From 5a0e0cd43b845cc65cc104d93051ccd3847352e8 Mon Sep 17 00:00:00 2001 From: FrankHan Date: Fri, 4 Sep 2026 02:28:37 +0800 Subject: [PATCH] fix(ohos): expose valid config enum values Return protobuf enum values through the OHRS schema API and keep the share-link test on the public config repository module. --- .../src/config/services/schema_service.rs | 18 +++++++++++++++++- .../src/config/services/share_link_service.rs | 2 +- easytier-contrib/easytier-ohrs/src/lib.rs | 6 +++++- 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/easytier-contrib/easytier-ohrs/src/config/services/schema_service.rs b/easytier-contrib/easytier-ohrs/src/config/services/schema_service.rs index d1425b56..c29c946b 100644 --- a/easytier-contrib/easytier-ohrs/src/config/services/schema_service.rs +++ b/easytier-contrib/easytier-ohrs/src/config/services/schema_service.rs @@ -119,7 +119,11 @@ fn enum_options(kind: Kind) -> Vec { .values() .map(|value| FieldOption { label: value.name().to_string(), - value: value.number().to_string(), + // protobuf JSON uses enum names rather than their numeric wire values. + // Returning the number here made ArkTS write (for example) `1`, while + // NetworkConfig deserialization expects `"None"`, so field-level saves + // were rejected by the repository validation step. + value: value.name().to_string(), }) .collect(), _ => Vec::new(), @@ -410,5 +414,17 @@ mod tests { .iter() .any(|option| option.label == "PublicServer") ); + + let data_compress_algo = schema + .children + .iter() + .find(|field| field.name == "data_compress_algo") + .expect("data_compress_algo field"); + let none = data_compress_algo + .enum_options + .iter() + .find(|option| option.label == "None") + .expect("compression None option"); + assert_eq!(none.value, "None"); } } diff --git a/easytier-contrib/easytier-ohrs/src/config/services/share_link_service.rs b/easytier-contrib/easytier-ohrs/src/config/services/share_link_service.rs index 33bc65bd..49a6b0a6 100644 --- a/easytier-contrib/easytier-ohrs/src/config/services/share_link_service.rs +++ b/easytier-contrib/easytier-ohrs/src/config/services/share_link_service.rs @@ -162,7 +162,7 @@ pub fn import_config_share_link( #[cfg(test)] mod tests { use super::*; - use crate::config_repo::{create_config_record, init_config_store}; + use crate::config::repository::{create_config_record, init_config_store}; use std::time::{SystemTime, UNIX_EPOCH}; fn test_root() -> String { diff --git a/easytier-contrib/easytier-ohrs/src/lib.rs b/easytier-contrib/easytier-ohrs/src/lib.rs index 987fadc4..29f1abf0 100644 --- a/easytier-contrib/easytier-ohrs/src/lib.rs +++ b/easytier-contrib/easytier-ohrs/src/lib.rs @@ -63,6 +63,7 @@ use easytier::common::{ use easytier::instance::factory::{NativeInstanceManager, native_instance_manager_with_runtime}; use easytier::proto::api::manage::NetworkConfig; use easytier::proto::api::manage::NetworkingMethod; +use easytier::proto::common::CompressionAlgoPb; use easytier::web_client::{WebClient, WebClientHooks, run_web_client}; use kernel_bridge::{ start_local_socket_server as start_local_socket_server_inner, @@ -669,8 +670,11 @@ fn resolve_instance_id_inner(instance_name: &str) -> Option { } pub(crate) fn build_default_network_config_json() -> Result { - let config = NetworkConfig::new_from_config(TomlConfigLoader::default()) + let mut config = NetworkConfig::new_from_config(TomlConfigLoader::default()) .map_err(|e| format!("default_network_config failed {}", e))?; + // HarmonyOS 的配置编辑页将压缩算法作为显式选项展示。新建实例默认 + // 使用 NONE,避免在用户没有主动选择时增加压缩开销。 + config.data_compress_algo = Some(CompressionAlgoPb::None as i32); serde_json::to_string(&config).map_err(|e| format!("default_network_config failed {}", e)) }