@@ -35,35 +35,38 @@ impl<S: StorageBackend + 'static, Schema: SettingsSchema> SettingsManager<S, Sch
3535 & self ,
3636 key : & str ,
3737 metadata : & SettingMetadata ,
38- ) -> Result < Option < Value > > {
38+ ) -> Result < Option < ( Value , bool ) > > {
3939 // For secrets, check keyring first
4040 if metadata. is_secret ( ) {
4141 // Check env var override for secrets if enabled
4242 if self . config . env_overrides_secrets
4343 && let Some ( env_value) = self . get_env_override ( key)
4444 {
45- return Ok ( Some ( env_value) ) ;
45+ return Ok ( Some ( ( env_value, true ) ) ) ;
4646 }
4747
4848 // Try retrieving from keyring
4949 if let Ok ( Some ( secret_value) ) = self . get_credential_with_profile ( key) {
50- return Ok ( Some ( Value :: String ( secret_value) ) ) ;
50+ return Ok ( Some ( ( Value :: String ( secret_value) , false ) ) ) ;
5151 }
5252
5353 // Secret not found, use default
54- return Ok ( Some ( metadata. default . clone ( ) ) ) ;
54+ return Ok ( Some ( ( metadata. default . clone ( ) , false ) ) ) ;
5555 }
5656
5757 // Not a secret - check cache (with env override support)
5858 if let Some ( env_value) = self . get_env_override ( key) {
59- return Ok ( Some ( env_value) ) ;
59+ return Ok ( Some ( ( env_value, true ) ) ) ;
6060 }
6161
6262 let Some ( ( category, setting_name) ) = Self :: parse_setting_key ( key) else {
6363 return Ok ( None ) ;
6464 } ;
6565
66- self . settings_cache . get_value ( category, setting_name, key)
66+ Ok ( self
67+ . settings_cache
68+ . get_value ( category, setting_name, key) ?
69+ . map ( |v| ( v, false ) ) )
6770 }
6871
6972 /// Helper to get a setting value (non-credential version)
@@ -72,18 +75,22 @@ impl<S: StorageBackend + 'static, Schema: SettingsSchema> SettingsManager<S, Sch
7275 & self ,
7376 key : & str ,
7477 _metadata : & SettingMetadata ,
75- ) -> Result < Option < Value > > {
78+ ) -> Result < Option < ( Value , bool ) > > {
7679 // Check env override first
7780 if let Some ( env_value) = self . get_env_override ( key) {
78- return Ok ( Some ( env_value) ) ;
81+ return Ok ( Some ( ( env_value, true ) ) ) ;
7982 }
8083
8184 let Some ( ( category, setting_name) ) = Self :: parse_setting_key ( key) else {
8285 return Ok ( None ) ;
8386 } ;
8487
85- self . settings_cache . get_value ( category, setting_name, key)
88+ Ok ( self
89+ . settings_cache
90+ . get_value ( category, setting_name, key) ?
91+ . map ( |v| ( v, false ) ) )
8692 }
93+
8794 /// Check if a setting value is overridden by an environment variable
8895 ///
8996 /// Returns the parsed value if env var is set and successfully parsed.
@@ -113,20 +120,24 @@ impl<S: StorageBackend + 'static, Schema: SettingsSchema> SettingsManager<S, Sch
113120
114121 for ( key, option) in & mut metadata {
115122 if Self :: parse_setting_key ( key) . is_some ( ) {
116- // Use the helper method to get value (handles secrets and env overrides)
117- if let Ok ( Some ( value) ) = self . get_value_with_secret_support ( key, option) {
118- option. value = Some ( value) ;
119-
120- // Mark as env-overridden if applicable
121- if self . get_env_override ( key) . is_some ( ) {
122- option
123- . metadata
124- . insert ( "env_override" . to_string ( ) , Value :: Bool ( true ) ) ;
125- debug ! ( "Setting {key} overridden by env var" ) ;
123+ match self . get_value_with_secret_support ( key, option) {
124+ Ok ( Some ( ( value, env_overridden) ) ) => {
125+ option. value = Some ( value) ;
126+ if env_overridden {
127+ option
128+ . metadata
129+ . insert ( "env_override" . to_string ( ) , Value :: Bool ( true ) ) ;
130+ debug ! ( "Setting {key} overridden by env var" ) ;
131+ }
132+ }
133+ Ok ( None ) => {
134+ // Fallback to default if helper returns None
135+ option. value = Some ( option. default . clone ( ) ) ;
136+ }
137+ Err ( e) => {
138+ debug ! ( "Failed to read value for {key}: {e}" ) ;
139+ option. value = Some ( option. default . clone ( ) ) ;
126140 }
127- } else {
128- // Fallback to default if helper returns None
129- option. value = Some ( option. default . clone ( ) ) ;
130141 }
131142 }
132143 }
@@ -189,8 +200,9 @@ impl<S: StorageBackend + 'static, Schema: SettingsSchema> SettingsManager<S, Sch
189200 . get ( key)
190201 . ok_or_else ( || Error :: SettingNotFound ( format ! ( "{category}.{setting_name}" ) ) ) ?;
191202
192- // Use the helper that handles both secrets and regular settings
203+ // Use the helper that handles both secrets and regular settings.
193204 self . get_value_with_secret_support ( key, setting_metadata) ?
205+ . map ( |( v, _) | v)
194206 . ok_or_else ( || Error :: SettingNotFound ( format ! ( "{category}.{setting_name}" ) ) )
195207 }
196208
@@ -374,7 +386,7 @@ impl<S: StorageBackend + 'static, Schema: SettingsSchema> SettingsManager<S, Sch
374386 for sub_type in sub_types {
375387 categories. push ( ExportCategory {
376388 id : sub_type. clone ( ) ,
377- name : sub_type. clone ( ) , // Could be enhanced with display names
389+ name : sub_type. clone ( ) ,
378390 category_type : ExportCategoryType :: SubSettings ,
379391 optional : false ,
380392 description : None ,
0 commit comments