diff --git a/noxis-cli/Cargo.toml b/noxis-cli/Cargo.toml index 22666eb..4c34412 100644 --- a/noxis-cli/Cargo.toml +++ b/noxis-cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "noxis-cli" -version = "0.1.6" +version = "0.2.4" edition = "2021" [dependencies] @@ -8,4 +8,5 @@ anyhow = "1.0.94" clap = { version = "4.5.22", features = ["derive"] } serde = { version = "1.0.215", features = ["derive"] } serde_json = "1.0.133" +thiserror = "2.0.11" tokio = { version = "1.42.0", features = ["full", "net"] } diff --git a/noxis-cli/src/cli_error.rs b/noxis-cli/src/cli_error.rs new file mode 100644 index 0000000..bb3a8bd --- /dev/null +++ b/noxis-cli/src/cli_error.rs @@ -0,0 +1,14 @@ +use thiserror::Error; +use super::cli_net::NOXIS_RS_CREDS; + +#[derive(Debug, Error)] +pub enum NoxisCliError { + #[error("Can't send any data to {:?}. Noxis-rs daemon is disabled or can't be accessed", NOXIS_RS_CREDS)] + NoxisDaemonMissing, + #[error("Noxis CLI can't write any data to the Noxis-rs port. Check daemon and it's web-functionality")] + PortIsNotWritable, + #[error("Can't send Cli-prompt to the Noxis-rs. Check it's state")] + CliPromptCanNotBeSent, + #[error("Can't parse CLI struct and send as byte stream")] + ToStringCliParsingParsing, +} \ No newline at end of file diff --git a/noxis-cli/src/net.rs b/noxis-cli/src/cli_net.rs similarity index 59% rename from noxis-cli/src/net.rs rename to noxis-cli/src/cli_net.rs index 2e8c43a..b0fbfe7 100644 --- a/noxis-cli/src/net.rs +++ b/noxis-cli/src/cli_net.rs @@ -3,26 +3,28 @@ use tokio::io::AsyncWriteExt; use tokio::time::{Duration, sleep}; use anyhow::Result; use super::Cli; +use super::cli_error::NoxisCliError; + +pub const NOXIS_RS_CREDS: &str = "127.0.0.1:7753"; pub async fn create_tcp_stream() -> Result { - let stream = TcpStream::connect("127.0.0.1:7753").await?; - Ok(stream) + Ok(TcpStream::connect(NOXIS_RS_CREDS).await.map_err(|_| NoxisCliError::NoxisDaemonMissing)?) } pub async fn try_send(stream: Result, params: Cli) -> Result<()> { use serde_json::to_string; - let mut stream = stream?; + let mut stream = stream.map_err(|_| NoxisCliError::NoxisDaemonMissing)?; loop { if stream.writable().await.is_err() { sleep(Duration::from_millis(100)).await; continue; } // let msg: Cli = from_str(&format!("{:?}", params))?; - let msg= to_string(¶ms)?; + let msg= to_string(¶ms).map_err(|_| NoxisCliError::ToStringCliParsingParsing)?; // let msg = r"HTTP/1.1 POST\r\nContent-Length: 14\r\nContent-Type: text/plain\r\n\r\nHello, World!@"; - stream.write_all(msg.as_bytes()).await?; + stream.write_all(msg.as_bytes()).await.map_err(|_| NoxisCliError::CliPromptCanNotBeSent)?; // ... break; } diff --git a/noxis-cli/src/lib.rs b/noxis-cli/src/lib.rs index 163fc0a..5515aa9 100644 --- a/noxis-cli/src/lib.rs +++ b/noxis-cli/src/lib.rs @@ -1,3 +1,5 @@ mod cli; +mod cli_net; +mod cli_error; pub use cli::*; \ No newline at end of file diff --git a/noxis-cli/src/main.rs b/noxis-cli/src/main.rs index 0b9e00f..9262502 100644 --- a/noxis-cli/src/main.rs +++ b/noxis-cli/src/main.rs @@ -1,9 +1,10 @@ mod cli; -mod net; +mod cli_net; +mod cli_error; use clap::Parser; use cli::Cli; -use net::{create_tcp_stream, try_send}; +use cli_net::{create_tcp_stream, try_send}; use anyhow::Result; #[tokio::main]