Skip to content

Commit c918d2c

Browse files
committed
consolidate what-if returns
1 parent 3c0ce24 commit c918d2c

File tree

2 files changed

+14
-23
lines changed

2 files changed

+14
-23
lines changed

registry/src/main.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ fn main() {
6767
let reg_helper = match RegistryHelper::new(&input) {
6868
Ok(reg_helper) => reg_helper,
6969
Err(err) => {
70-
eprintln!("{err}");
70+
eprintln!("Error: {err}");
7171
exit(EXIT_INVALID_INPUT);
7272
}
7373
};

registry/src/registry_helper.rs

Lines changed: 13 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ impl RegistryHelper {
7878

7979
pub fn set(&self, is_what_if: bool) -> Result<Option<Registry>, RegistryError> {
8080
let mut depth = None;
81+
let mut proposed_data: Option<RegistryValueData> = None;
8182
let reg_key = match self.open(Security::Write) {
8283
Ok((reg_key, _subkey)) => reg_key,
8384
// handle NotFound error
@@ -98,24 +99,24 @@ impl RegistryHelper {
9899

99100
self.open(Security::Write)?.0
100101
},
101-
Err(e) => return self.handle_what_if_error(e, is_what_if)
102+
Err(e) => return self.handle_error_or_what_if(e, is_what_if)
102103
};
103104

104105
if let Some(value_data) = &self.config.value_data {
105106
let Ok(value_name) = U16CString::from_str(self.config.value_name.as_ref().unwrap()) else {
106-
return self.handle_what_if_error(RegistryError::Utf16Conversion("valueName".to_string()), is_what_if);
107+
return self.handle_error_or_what_if(RegistryError::Utf16Conversion("valueName".to_string()), is_what_if);
107108
};
108109

109110
let data = match value_data {
110111
RegistryValueData::String(s) => {
111112
let Ok(utf16) = U16CString::from_str(s) else {
112-
return self.handle_what_if_error(RegistryError::Utf16Conversion("valueData".to_string()), is_what_if);
113+
return self.handle_error_or_what_if(RegistryError::Utf16Conversion("valueData".to_string()), is_what_if);
113114
};
114115
Data::String(utf16)
115116
},
116117
RegistryValueData::ExpandString(s) => {
117118
let Ok(utf16) = U16CString::from_str(s) else {
118-
return self.handle_what_if_error(RegistryError::Utf16Conversion("valueData".to_string()), is_what_if);
119+
return self.handle_error_or_what_if(RegistryError::Utf16Conversion("valueData".to_string()), is_what_if);
119120
};
120121
Data::ExpandString(utf16)
121122
},
@@ -129,7 +130,7 @@ impl RegistryHelper {
129130
let mut m16: Vec<UCString<u16>> = Vec::<UCString<u16>>::new();
130131
for s in m {
131132
let Ok(utf16) = U16CString::from_str(s) else {
132-
return self.handle_what_if_error(RegistryError::Utf16Conversion("valueData".to_string()), is_what_if);
133+
return self.handle_error_or_what_if(RegistryError::Utf16Conversion("valueData".to_string()), is_what_if);
133134
};
134135
m16.push(utf16);
135136
}
@@ -141,22 +142,11 @@ impl RegistryHelper {
141142
};
142143

143144
if is_what_if {
144-
let change_type = if let Some(name_exists) = self.get()?.exist {
145-
if name_exists { Action::Clobber }
146-
else { Action::New }
147-
} else { Action::Clobber };
148-
return Ok(Some(Registry {
149-
key_path: self.config.key_path.clone(),
150-
what_if: Some(WhatIf {
151-
change_type,
152-
proposed_data: Some(convert_reg_value(&data)?),
153-
depth,
154-
message: None
155-
}),
156-
..Default::default()
157-
}));
145+
proposed_data = Some(convert_reg_value(&data)?);
146+
}
147+
else {
148+
reg_key.set_value(&value_name, &data)?;
158149
}
159-
reg_key.set_value(&value_name, &data)?;
160150
}
161151

162152
if is_what_if {
@@ -168,13 +158,14 @@ impl RegistryHelper {
168158
key_path: self.config.key_path.clone(),
169159
what_if: Some(WhatIf {
170160
change_type,
171-
proposed_data: None,
161+
proposed_data,
172162
depth,
173163
message: None
174164
}),
175165
..Default::default()
176166
}));
177167
}
168+
178169
Ok(None)
179170
}
180171

@@ -249,7 +240,7 @@ impl RegistryHelper {
249240
Ok((parent_key, subkeys))
250241
}
251242

252-
fn handle_what_if_error(&self, error: RegistryError, is_what_if: bool) -> Result<Option<Registry>, RegistryError> {
243+
fn handle_error_or_what_if(&self, error: RegistryError, is_what_if: bool) -> Result<Option<Registry>, RegistryError> {
253244
if is_what_if {
254245
return Ok(Some(Registry {
255246
key_path: self.config.key_path.clone(),

0 commit comments

Comments
 (0)