use serde::{Deserialize, Serialize}; #[derive(Serialize, Deserialize)] pub struct VlessUser { pub id: String, pub encryption: String, pub flow: Option, pub level: Option, } #[derive(Serialize, Deserialize)] pub struct VlessServerObject { pub address: String, pub port: u16, pub users: Vec, } #[derive(Serialize, Deserialize)] pub struct VlessOutboundSettings { pub vnext: Vec, } #[derive(Serialize, Deserialize)] #[serde(untagged)] pub enum OutboundSettings { Vless(VlessOutboundSettings), } #[derive(Serialize, Deserialize)] pub struct NonHeaderObject { pub r#type: Option, } #[allow(non_snake_case)] #[derive(Serialize, Deserialize)] pub struct QuicSettings { pub header: Option, pub security: Option, pub key: Option, } #[allow(non_snake_case)] #[derive(Serialize, Deserialize)] pub struct GRPCSettings { pub authority: Option, pub multiMode: Option, pub serviceName: Option, } #[allow(non_snake_case)] #[derive(Serialize, Deserialize)] pub struct KCPSettings { pub mtu: Option, pub tti: Option, pub uplinkCapacity: Option, pub downlinkCapacity: Option, pub congestion: Option, pub readBufferSize: Option, pub writeBufferSize: Option, pub seed: Option, } #[allow(non_snake_case)] #[derive(Serialize, Deserialize)] pub struct XHTTPSettings { pub host: Option, pub path: Option, pub mode: Option, pub extra: Option, } #[allow(non_snake_case)] #[derive(Serialize, Deserialize)] pub struct RealitySettings { pub fingerprint: Option, pub serverName: Option, pub publicKey: Option, pub shortId: Option, pub spiderX: Option, } #[derive(Serialize, Deserialize)] pub struct TCPHeader { pub r#type: Option, } #[allow(non_snake_case)] #[derive(Serialize, Deserialize)] pub struct TCPSettings { pub header: Option, pub acceptProxyProtocol: Option, } #[allow(non_snake_case)] #[derive(Serialize, Deserialize)] pub struct HeaderSetting { pub Host: Option, } #[allow(non_snake_case)] #[derive(Serialize, Deserialize)] pub struct WsSettings { pub path: Option, pub Host: Option, pub acceptProxyProtocol: Option, } #[allow(non_snake_case)] #[derive(Serialize, Deserialize)] pub struct TlsSettings { pub alpn: Option>, pub allowInsecure: Option, pub serverName: Option, pub enableSessionResumption: Option, pub disableSystemRoot: Option, pub minVersion: Option, pub maxVersion: Option, pub cipherSuites: Option, pub preferServerCipherSuites: Option, pub fingerprint: Option, pub rejectUnknownSni: Option, } #[allow(non_snake_case)] #[derive(Serialize, Deserialize)] pub struct StreamSettings { pub network: Option, pub security: Option, pub tlsSettings: Option, pub wsSettings: Option, pub tcpSettings: Option, pub realitySettings: Option, pub grpcSettings: Option, pub quicSettings: Option, pub kcpSettings: Option, pub xhttpSettings: Option, } #[allow(non_snake_case)] #[derive(Serialize, Deserialize)] pub struct Outbound { pub settings: OutboundSettings, pub streamSettings: StreamSettings, pub protocol: String, pub tag: String, } #[derive(Serialize, Deserialize)] pub struct InboundSettings { pub udp: bool, } #[derive(Serialize, Deserialize)] #[allow(non_snake_case)] pub struct SniffingSettings { pub enabled: Option, pub destOverride: Option>, pub domainsExcluded: Option>, pub metadataOnly: Option, pub routeOnly: Option, } #[derive(Serialize, Deserialize)] pub struct Inbound { pub listen: String, pub port: u16, pub protocol: String, pub settings: InboundSettings, pub sniffing: Option, pub tag: String, } #[derive(Serialize, Deserialize)] pub struct Config { pub outbounds: Vec, pub inbounds: Vec, }