diff --git a/src/config_models/mod.rs b/src/config_models/mod.rs index a836175..9e37177 100644 --- a/src/config_models/mod.rs +++ b/src/config_models/mod.rs @@ -265,3 +265,10 @@ pub struct RawData { pub server_method: Option, pub username: Option, } + +#[derive(Serialize, Deserialize)] +#[allow(non_snake_case)] +pub struct ConfigMetaData { + pub name: String, + pub protocol: String, +} diff --git a/src/main.rs b/src/main.rs index abfc3f4..986d3a2 100644 --- a/src/main.rs +++ b/src/main.rs @@ -28,9 +28,9 @@ fn main() { .value_parser(value_parser!(u16)), ) .arg( - Arg::new("get_name") - .long("get-name") - .help("Only print the config name") + Arg::new("get_metadata") + .long("get-metadata") + .help("Only print config meta data") .action(clap::ArgAction::SetTrue), ) .get_matches(); @@ -38,10 +38,10 @@ fn main() { let uri = matches.get_one::("uri").unwrap(); let socksport = matches.get_one::("socksport").copied(); let httpport = matches.get_one::("httpport").copied(); - let get_name = matches.get_flag("get_name"); + let get_metadata = matches.get_flag("get_metadata"); - if get_name { - print!("{}", parser::get_name(uri)); + if get_metadata { + print!("{}", parser::get_metadata(uri)); return; } diff --git a/src/parser/mod.rs b/src/parser/mod.rs index 4ac9d9c..67653bd 100644 --- a/src/parser/mod.rs +++ b/src/parser/mod.rs @@ -1,7 +1,7 @@ use crate::config_models::{ - self, GRPCSettings, KCPSettings, NonHeaderObject, Outbound, OutboundSettings, QuicSettings, - RawData, RealitySettings, StreamSettings, TCPHeader, TCPSettings, TlsSettings, WsSettings, - XHTTPSettings, + self, ConfigMetaData, GRPCSettings, KCPSettings, NonHeaderObject, Outbound, OutboundSettings, + QuicSettings, RawData, RealitySettings, StreamSettings, TCPHeader, TCPSettings, TlsSettings, + WsSettings, XHTTPSettings, }; use crate::utils::{inbound_generator, parse_raw_json}; @@ -12,9 +12,14 @@ mod uri_identifier; mod vless; mod vmess; -pub fn get_name(uri: &str) -> String { - let (_, data, _) = get_uri_data(uri); - return data.remarks; +pub fn get_metadata(uri: &str) -> String { + let (protocol, data, _) = get_uri_data(uri); + let meta_data = ConfigMetaData { + name: data.remarks, + protocol, + }; + let serialized = serde_json::to_string(&meta_data).unwrap(); + return serialized; } pub fn create_json_config(uri: &str, socks_port: Option, http_port: Option) -> String {