refactor: use Result with a unit type over Option
this helps convey intent, and makes it more consistent
This commit is contained in:
parent
dab5f8e09f
commit
ab24e5f10d
2 changed files with 9 additions and 10 deletions
|
|
@ -155,7 +155,7 @@ impl State {
|
|||
}
|
||||
|
||||
fn save_image(&mut self) {
|
||||
self.error = utils::save_image(self.image.as_ref());
|
||||
self.error = utils::save_image(self.image.as_ref()).err();
|
||||
}
|
||||
|
||||
#[must_use]
|
||||
|
|
|
|||
17
src/utils.rs
17
src/utils.rs
|
|
@ -105,19 +105,18 @@ pub fn pick_image() -> Result<PathBuf, String> {
|
|||
Ok(path)
|
||||
}
|
||||
|
||||
#[must_use]
|
||||
pub fn save_image(image: Option<&RgbaImage>) -> Option<String> {
|
||||
pub fn save_image(image: Option<&RgbaImage>) -> Result<(), String> {
|
||||
let Some(image) = image else {
|
||||
return Some("no image to save".into());
|
||||
return Err("no image to save".into());
|
||||
};
|
||||
|
||||
let Some(path) = FileDialog::new().save_file() else {
|
||||
return Some("no path to save provided".into());
|
||||
return Err("no path to save provided".into());
|
||||
};
|
||||
|
||||
let mut file = match fs::File::create(&path) {
|
||||
Ok(f) => f,
|
||||
Err(e) => return Some(format!("failed to create file '{}': {e}", path.display())),
|
||||
Err(e) => return Err(format!("failed to create file '{}': {e}", path.display())),
|
||||
};
|
||||
|
||||
match path.extension().map(OsStr::to_string_lossy).as_deref() {
|
||||
|
|
@ -132,20 +131,20 @@ pub fn save_image(image: Option<&RgbaImage>) -> Option<String> {
|
|||
match encoder.encode::<u8, u8>(&rgb_image, rgb_image.width(), rgb_image.height()) {
|
||||
Ok(j) => j,
|
||||
Err(e) => {
|
||||
return Some(format!("failed to encode jxl '{}': {e}", path.display()));
|
||||
return Err(format!("failed to encode jxl '{}': {e}", path.display()));
|
||||
}
|
||||
};
|
||||
|
||||
if let Err(e) = file.write(&jxl.data) {
|
||||
return Some(format!("failed to write jxl to '{}': {e}", path.display()));
|
||||
return Err(format!("failed to write jxl to '{}': {e}", path.display()));
|
||||
};
|
||||
}
|
||||
_ => {
|
||||
if let Err(e) = image.save(&path) {
|
||||
return Some(format!("failed to save '{}': {e}", path.display()));
|
||||
return Err(format!("failed to save '{}': {e}", path.display()));
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
None
|
||||
Ok(())
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue