From 9d7a938e935455090f83270abc915505e2c41052 Mon Sep 17 00:00:00 2001 From: fanyang Date: Mon, 4 May 2026 10:42:19 +0800 Subject: [PATCH] Address review comments --- easytier/locales/app.yml | 4 +-- easytier/src/core.rs | 54 +++++++++++++++++++++++++++++----------- 2 files changed, 42 insertions(+), 16 deletions(-) diff --git a/easytier/locales/app.yml b/easytier/locales/app.yml index b38436a8..5b6b5fef 100644 --- a/easytier/locales/app.yml +++ b/easytier/locales/app.yml @@ -194,8 +194,8 @@ core_clap: en: "the url of the ipv6 listener, e.g.: tcp://[::]:11010, if not set, will listen on random udp port" zh-CN: "IPv6 监听器的URL,例如:tcp://[::]:11010,如果未设置,将在随机UDP端口上监听" compression: - en: "compression algorithm to use, support none, zstd, lzo. default is none" - zh-CN: "要使用的压缩算法,支持 none、zstd、lzo。默认为 none" + en: "compression algorithm to use, supported: %{algorithms}. default is none" + zh-CN: "要使用的压缩算法,支持:%{algorithms}。默认为 none" mapped_listeners: en: "manually specify the public address of the listener, other nodes can use this address to connect to this node. e.g.: tcp://123.123.123.123:11223, can specify multiple." zh-CN: "手动指定监听器的公网地址,其他节点可以使用该地址连接到本节点。例如:tcp://123.123.123.123:11223,可以指定多个。" diff --git a/easytier/src/core.rs b/easytier/src/core.rs index eded9bc8..dba58ac8 100644 --- a/easytier/src/core.rs +++ b/easytier/src/core.rs @@ -46,6 +46,29 @@ fn supported_compression_algorithms() -> &'static str { } } +fn compression_help() -> String { + t!( + "core_clap.compression", + algorithms = supported_compression_algorithms() + ) + .to_string() +} + +fn parse_compression_algorithm(compression: &str) -> anyhow::Result { + match compression { + "none" => Ok(CompressionAlgoPb::None), + #[cfg(feature = "zstd")] + "zstd" => Ok(CompressionAlgoPb::Zstd), + #[cfg(feature = "lzo")] + "lzo" => Ok(CompressionAlgoPb::Lzo), + _ => anyhow::bail!( + "unknown compression algorithm: {}, supported: {}", + compression, + supported_compression_algorithms() + ), + } +} + #[cfg(target_os = "windows")] windows_service::define_windows_service!(ffi_service_main, win_service_main); @@ -522,7 +545,7 @@ struct NetworkOptions { #[arg( long, env = "ET_COMPRESSION", - help = t!("core_clap.compression").to_string(), + help = compression_help(), )] compression: Option, @@ -1115,19 +1138,7 @@ impl NetworkOptions { f.need_p2p = self.need_p2p.unwrap_or(f.need_p2p); f.multi_thread = self.multi_thread.unwrap_or(f.multi_thread); if let Some(compression) = &self.compression { - f.data_compress_algo = match compression.as_str() { - "none" => CompressionAlgoPb::None, - #[cfg(feature = "zstd")] - "zstd" => CompressionAlgoPb::Zstd, - #[cfg(feature = "lzo")] - "lzo" => CompressionAlgoPb::Lzo, - _ => panic!( - "unknown compression algorithm: {}, supported: {}", - compression, - supported_compression_algorithms() - ), - } - .into(); + f.data_compress_algo = parse_compression_algorithm(compression)?.into(); } f.bind_device = self.bind_device.unwrap_or(f.bind_device); f.enable_kcp_proxy = self.enable_kcp_proxy.unwrap_or(f.enable_kcp_proxy); @@ -1640,6 +1651,21 @@ async fn validate_config(cli: &Cli) -> anyhow::Result<()> { mod tests { use super::*; + #[test] + fn test_compression_help_uses_supported_algorithms() { + assert!(compression_help().contains(supported_compression_algorithms())); + } + + #[test] + fn test_parse_compression_algorithm_rejects_unknown() { + let err = parse_compression_algorithm("snappy") + .unwrap_err() + .to_string(); + + assert!(err.contains("snappy")); + assert!(err.contains(supported_compression_algorithms())); + } + #[test] fn test_parse_listeners() { type IpSchemeMap = fn(&IpScheme) -> String;