homestar_runtime/cli/
error.rs

1//! Error type for CLI / CLI-interaction.
2
3use crate::network::rpc;
4use miette::{miette, Diagnostic};
5use std::io;
6use tarpc::client::RpcError;
7
8/// Error types for CLI / CLI-interaction.
9#[derive(thiserror::Error, Debug, Diagnostic)]
10pub enum Error {
11    /// Generic CLI error.
12    #[error("{error_message}")]
13    Cli {
14        /// Error message.
15        error_message: String,
16    },
17    /// Propagated RPC error related to [tarpc::client::RpcError].
18    #[error(transparent)]
19    Rpc(#[from] RpcError),
20    /// Propagated error related to an .
21    #[error(transparent)]
22    RpcMessage(#[from] rpc::Error),
23    /// Propagated IO error.
24    #[error("error writing data to console: {0}")]
25    Io(#[from] io::Error),
26}
27
28impl Error {
29    /// Create a new [Error].
30    pub fn new(err: miette::ErrReport) -> Self {
31        Error::Cli {
32            error_message: err.to_string(),
33        }
34    }
35}
36
37impl From<anyhow::Error> for Error {
38    fn from(e: anyhow::Error) -> Self {
39        Error::new(miette!(e.to_string()))
40    }
41}