From 87e745b8e60225a789b51d5011fa620051c4cfbe Mon Sep 17 00:00:00 2001 From: pml68 Date: Wed, 30 Oct 2024 03:00:17 +0100 Subject: feat: add error dialogs, windows manifest --- iced_builder/src/error.rs | 61 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 iced_builder/src/error.rs (limited to 'iced_builder/src/error.rs') diff --git a/iced_builder/src/error.rs b/iced_builder/src/error.rs new file mode 100644 index 0000000..5bf41b1 --- /dev/null +++ b/iced_builder/src/error.rs @@ -0,0 +1,61 @@ +use rfd::{MessageButtons, MessageDialog, MessageLevel}; +use std::io; +use thiserror::Error; + +#[derive(Debug, Clone, Error)] +pub enum Error { + #[error("An I/O error accured: {0}")] + IOError(String), + #[error("A Serde error accured: {0}")] + SerdeError(String), + #[error("A RustFmt error accured: {0}")] + FormatError(String), + #[error("The element tree contains no matching element")] + NonExistentElement, + #[error("The file dialog has been closed without selecting a valid option")] + DialogClosed, + #[error("{0}")] + Other(String), +} + +impl From for Error { + fn from(value: io::Error) -> Self { + Self::IOError(value.to_string()) + } +} + +impl From for Error { + fn from(value: serde_json::Error) -> Self { + Self::SerdeError(value.to_string()) + } +} + +impl From for Error { + fn from(value: rust_format::Error) -> Self { + Self::FormatError(value.to_string()) + } +} + +impl From<&'static str> for Error { + fn from(value: &'static str) -> Self { + Self::Other(value.to_owned()) + } +} + +pub fn error_dialog(description: impl Into) { + MessageDialog::new() + .set_level(MessageLevel::Error) + .set_buttons(MessageButtons::Ok) + .set_title("Oops! Something went wrong.") + .set_description(description) + .show(); +} + +pub fn warning_dialog(title: impl Into, description: impl Into) { + MessageDialog::new() + .set_level(MessageLevel::Warning) + .set_buttons(MessageButtons::Ok) + .set_title(title) + .set_description(description) + .show(); +} -- cgit v1.2.3