use serde::{Deserialize, Serialize}; #[derive(Serialize, Deserialize)] pub struct VnextUser { pub id: Option, pub encryption: Option, pub flow: Option, pub level: Option, pub security: Option, } #[derive(Serialize, Deserialize)] pub struct VnextServerObject { pub address: Option, pub port: Option, pub users: Option>, } #[derive(Serialize, Deserialize)] pub struct TrojanServerObject { pub address: Option, pub port: Option, pub password: Option, pub level: Option, } #[derive(Serialize, Deserialize)] pub struct VlessOutboundSettings { pub vnext: Vec, } #[derive(Serialize, Deserialize)] pub struct VmessOutboundSettings { pub vnext: Vec, } #[derive(Serialize, Deserialize)] pub struct TrojanOutboundSettings { pub servers: Vec, } #[derive(Serialize, Deserialize)] #[serde(untagged)] pub enum OutboundSettings { Vless(VlessOutboundSettings), Vmess(VmessOutboundSettings), Trojan(TrojanOutboundSettings), } #[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: bool, 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: Option, pub sniffing: Option, pub tag: String, } #[derive(Serialize, Deserialize)] pub struct Config { pub outbounds: Vec, pub inbounds: Vec, } #[derive(Serialize, Deserialize)] #[allow(non_snake_case)] pub struct RawData { pub remarks: String, pub security: Option, pub vnext_security: Option, pub sni: Option, pub fp: Option, pub pbk: Option, pub sid: Option, pub r#type: Option, pub flow: Option, pub path: Option, pub encryption: Option, pub header_type: Option, pub host: Option, pub seed: Option, pub quic_security: Option, pub r#key: Option, pub mode: Option, pub service_name: Option, pub authority: Option, pub slpn: Option, pub spx: Option, pub alpn: Option, pub extra: Option, pub allowInsecure: Option, pub uuid: Option, pub address: Option, pub port: Option, }