@@ -44,6 +44,15 @@ pub fn parse_input_to_json(value: &str) -> Result<String, DscError> {
44
44
}
45
45
}
46
46
47
+ /// Will search setting files for the specified setting.
48
+ ///
49
+ /// # Arguments
50
+ ///
51
+ /// * `value_name` - The name of the setting.
52
+ ///
53
+ /// # Errors
54
+ ///
55
+ /// Will return `Err` if could not find requested setting.
47
56
pub fn get_setting ( value_name : & str ) -> Result < serde_json:: Value , DscError > {
48
57
49
58
const SETTINGS_FILE_NAME : & str = "settings.dsc.json" ;
@@ -57,36 +66,36 @@ pub fn get_setting(value_name: &str) -> Result<serde_json::Value, DscError> {
57
66
58
67
// First, get setting from the default settings file
59
68
settings_file_path = exe_home. join ( DEFAULT_SETTINGS_FILE_NAME ) ;
60
- if let Ok ( v) = load_value_from_json ( & settings_file_path, & value_name) {
69
+ if let Ok ( v) = load_value_from_json ( & settings_file_path, value_name) {
61
70
result = v;
62
- debug ! ( "Found setting '{}' in {}" , & value_name, settings_file_path. to_string_lossy( ) )
71
+ debug ! ( "Found setting '{}' in {}" , & value_name, settings_file_path. to_string_lossy( ) ) ;
63
72
} else {
64
- debug ! ( "Did not find setting '{}' in {}" , & value_name, settings_file_path. to_string_lossy( ) )
73
+ debug ! ( "Did not find setting '{}' in {}" , & value_name, settings_file_path. to_string_lossy( ) ) ;
65
74
}
66
75
67
76
// Second, get setting from the active settings file overwriting previous value
68
77
settings_file_path = exe_home. join ( SETTINGS_FILE_NAME ) ;
69
- if let Ok ( v) = load_value_from_json ( & settings_file_path, & value_name) {
78
+ if let Ok ( v) = load_value_from_json ( & settings_file_path, value_name) {
70
79
result = v;
71
- debug ! ( "Found setting '{}' in {}" , & value_name, settings_file_path. to_string_lossy( ) )
80
+ debug ! ( "Found setting '{}' in {}" , & value_name, settings_file_path. to_string_lossy( ) ) ;
72
81
} else {
73
- debug ! ( "Did not find setting '{}' in {}" , & value_name, settings_file_path. to_string_lossy( ) )
82
+ debug ! ( "Did not find setting '{}' in {}" , & value_name, settings_file_path. to_string_lossy( ) ) ;
74
83
}
75
84
} else {
76
85
debug ! ( "Can't get dsc executable path" ) ;
77
86
}
78
87
79
88
// Third, get setting from the policy settings file overwriting previous value
80
89
settings_file_path = PathBuf :: from ( get_settings_policy_file_path ( ) ) ;
81
- if let Ok ( v) = load_value_from_json ( & settings_file_path, & value_name) {
90
+ if let Ok ( v) = load_value_from_json ( & settings_file_path, value_name) {
82
91
result = v;
83
- debug ! ( "Found setting '{}' in {}" , & value_name, settings_file_path. to_string_lossy( ) )
92
+ debug ! ( "Found setting '{}' in {}" , & value_name, settings_file_path. to_string_lossy( ) ) ;
84
93
} else {
85
- debug ! ( "Did not find setting '{}' in {}" , & value_name, settings_file_path. to_string_lossy( ) )
94
+ debug ! ( "Did not find setting '{}' in {}" , & value_name, settings_file_path. to_string_lossy( ) ) ;
86
95
}
87
96
88
97
if result == serde_json:: Value :: Null {
89
- return Err ( DscError :: NotSupported ( format ! ( "Could not find '{}' in settings" , value_name ) . to_string ( ) ) ) ;
98
+ return Err ( DscError :: NotSupported ( format ! ( "Could not find '{value_name }' in settings" ) . to_string ( ) ) ) ;
90
99
}
91
100
92
101
Ok ( result)
@@ -96,15 +105,17 @@ pub fn load_value_from_json(path: &PathBuf, value_name: &str) -> Result<serde_js
96
105
let file = File :: open ( path) ?;
97
106
let reader = BufReader :: new ( file) ;
98
107
let root: serde_json:: Value = match serde_json:: from_reader ( reader) {
99
- Ok ( j) => j,
100
- Err ( err) => {
101
- return Err ( DscError :: Json ( err) ) ;
102
- }
103
- } ;
108
+ Ok ( j) => j,
109
+ Err ( err) => {
110
+ return Err ( DscError :: Json ( err) ) ;
111
+ }
112
+ } ;
104
113
105
- for ( key, value) in root. as_object ( ) . unwrap ( ) {
106
- if * key == value_name {
107
- return Ok ( value. clone ( ) )
114
+ if let Some ( r) = root. as_object ( ) {
115
+ for ( key, value) in r {
116
+ if * key == value_name {
117
+ return Ok ( value. clone ( ) )
118
+ }
108
119
}
109
120
}
110
121
0 commit comments