diff options
| author | 魏曹先生 <1992414357@qq.com> | 2026-01-23 04:49:34 +0800 |
|---|---|---|
| committer | 魏曹先生 <1992414357@qq.com> | 2026-01-23 04:49:34 +0800 |
| commit | 626536ce51975b051fea087620bc1eb7f6bc69d3 (patch) | |
| tree | b24916b22012d9b8b3b09366bca9911781e6d596 /src/systems/cmd/errors.rs | |
| parent | f607f6ac3b98d00370f613e674da7beb4c61ce58 (diff) | |
Reorganize project structure into systems and assets
Diffstat (limited to 'src/systems/cmd/errors.rs')
| -rw-r--r-- | src/systems/cmd/errors.rs | 139 |
1 files changed, 139 insertions, 0 deletions
diff --git a/src/systems/cmd/errors.rs b/src/systems/cmd/errors.rs new file mode 100644 index 0000000..358d15a --- /dev/null +++ b/src/systems/cmd/errors.rs @@ -0,0 +1,139 @@ +use just_enough_vcs::vcs::data::{member::MemberId, sheet::SheetName}; + +#[derive(thiserror::Error, Debug)] +pub enum CmdPrepareError { + #[error("IO error: {0}")] + Io(#[from] std::io::Error), + + #[error("{0}")] + Error(String), + + #[error("LocalWorkspace not found")] + LocalWorkspaceNotFound, + + #[error("LocalConfig not found")] + LocalConfigNotFound, + + #[error("LatestInfo not found")] + LatestInfoNotFound, + + #[error("LatestFileData of {0} not found")] + LatestFileDataNotExist(MemberId), + + #[error("CachedSheet `{0}` not found")] + CachedSheetNotFound(SheetName), + + #[error("LocalSheet `{0}/{1}` not found")] + LocalSheetNotFound(MemberId, SheetName), + + #[error("LocalStatusAnalyzeFailed")] + LocalStatusAnalyzeFailed, + + #[error("No sheet in use")] + NoSheetInUse, +} + +impl CmdPrepareError { + pub fn new(msg: impl AsRef<str>) -> Self { + CmdPrepareError::Error(msg.as_ref().to_string()) + } +} + +#[derive(thiserror::Error, Debug)] +pub enum CmdExecuteError { + #[error("IO error: {0}")] + Io(#[from] std::io::Error), + + #[error("Content not prepared, cannot run")] + Prepare(#[from] CmdPrepareError), + + #[error("{0}")] + Error(String), +} + +impl CmdExecuteError { + pub fn new(msg: impl AsRef<str>) -> Self { + CmdExecuteError::Error(msg.as_ref().to_string()) + } +} + +#[derive(thiserror::Error, Debug)] +pub enum CmdRenderError { + #[error("IO error: {0}")] + Io(#[from] std::io::Error), + + #[error("Preparation failed, cannot render")] + Prepare(#[from] CmdPrepareError), + + #[error("Execution failed, no output content obtained before rendering")] + Execute(#[from] CmdExecuteError), + + #[error("{0}")] + Error(String), + + #[error("Serialize failed, {0}")] + SerializeFailed(String), + + #[error("Renderer `{0}` not found")] + RendererNotFound(String), +} + +impl CmdRenderError { + pub fn new(msg: impl AsRef<str>) -> Self { + CmdRenderError::Error(msg.as_ref().to_string()) + } +} + +#[derive(thiserror::Error, Debug)] +pub enum CmdProcessError { + #[error("Prepare error: {0}")] + Prepare(#[from] CmdPrepareError), + + #[error("Execute error: {0}")] + Execute(#[from] CmdExecuteError), + + #[error("Render error: {0}")] + Render(#[from] CmdRenderError), + + #[error("{0}")] + Error(String), + + #[error("Node `{0}` not found!")] + NoNodeFound(String), + + #[error("No matching command found")] + NoMatchingCommand, + + #[error("Ambiguous command, multiple matches found")] + AmbiguousCommand(Vec<String>), + + #[error("Parse error")] + ParseError(String), +} + +impl CmdProcessError { + pub fn new(msg: impl AsRef<str>) -> Self { + CmdProcessError::Error(msg.as_ref().to_string()) + } + + pub fn prepare_err(&self) -> Option<&CmdPrepareError> { + match self { + CmdProcessError::Prepare(e) => Some(e), + _ => None, + } + } + + pub fn execute_err(&self) -> Option<&CmdExecuteError> { + match self { + CmdProcessError::Execute(e) => Some(e), + _ => None, + } + } + + pub fn render_err(&self) -> Option<&CmdRenderError> { + match self { + CmdProcessError::Render(e) => Some(e), + _ => None, + } + } +} |
