summaryrefslogtreecommitdiff
path: root/src/systems/cmd/errors.rs
diff options
context:
space:
mode:
author魏曹先生 <1992414357@qq.com>2026-01-23 04:49:34 +0800
committer魏曹先生 <1992414357@qq.com>2026-01-23 04:49:34 +0800
commit626536ce51975b051fea087620bc1eb7f6bc69d3 (patch)
treeb24916b22012d9b8b3b09366bca9911781e6d596 /src/systems/cmd/errors.rs
parentf607f6ac3b98d00370f613e674da7beb4c61ce58 (diff)
Reorganize project structure into systems and assets
Diffstat (limited to 'src/systems/cmd/errors.rs')
-rw-r--r--src/systems/cmd/errors.rs139
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,
+ }
+ }
+}