From 81c9fc8fe2c72b2b292c185bee9312d80643d959 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Orhun=20Parmaks=C4=B1z?= Date: Tue, 5 Oct 2021 20:32:52 +0300 Subject: [PATCH] feat(error): add custom error implementation --- Cargo.lock | 23 +++++++++++++++++++++++ kparams-core/Cargo.toml | 1 + kparams-core/src/error.rs | 12 ++++++++++++ kparams-core/src/lib.rs | 3 +++ kparams/src/lib.rs | 23 +++++++++++++++++++++++ kparams/src/main.rs | 15 ++++----------- 6 files changed, 66 insertions(+), 11 deletions(-) create mode 100644 kparams-core/src/error.rs create mode 100644 kparams/src/lib.rs diff --git a/Cargo.lock b/Cargo.lock index 54b60de..34825d3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -70,6 +70,9 @@ dependencies = [ [[package]] name = "kparams-core" version = "0.1.0" +dependencies = [ + "thiserror", +] [[package]] name = "kparams-parser" @@ -176,6 +179,26 @@ dependencies = [ "unicode-xid", ] +[[package]] +name = "thiserror" +version = "1.0.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "602eca064b2d83369e2b2f34b09c70b605402801927c65c11071ac911d299b88" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bad553cc2c78e8de258400763a647e80e6d1b31ee237275d756f6836d204494c" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "typenum" version = "1.14.0" diff --git a/kparams-core/Cargo.toml b/kparams-core/Cargo.toml index ea453f4..6c58314 100644 --- a/kparams-core/Cargo.toml +++ b/kparams-core/Cargo.toml @@ -5,3 +5,4 @@ authors = ["Orhun Parmaksız "] edition = "2021" [dependencies] +thiserror = "1.0.29" diff --git a/kparams-core/src/error.rs b/kparams-core/src/error.rs new file mode 100644 index 0000000..f0e6fa2 --- /dev/null +++ b/kparams-core/src/error.rs @@ -0,0 +1,12 @@ +use thiserror::Error as ThisError; + +/// Custom error type. +#[derive(Debug, ThisError)] +pub enum Error { + /// Error that might occur during I/O operations. + #[error("IO error: `{0}`")] + IoError(#[from] std::io::Error), +} + +/// Type alias for the standard [`Result`] type. +pub type Result = core::result::Result; diff --git a/kparams-core/src/lib.rs b/kparams-core/src/lib.rs index 75a32b9..911e434 100644 --- a/kparams-core/src/lib.rs +++ b/kparams-core/src/lib.rs @@ -7,3 +7,6 @@ pub mod kernel; /// File reader. pub mod reader; + +/// Error handler. +pub mod error; diff --git a/kparams/src/lib.rs b/kparams/src/lib.rs new file mode 100644 index 0000000..176e964 --- /dev/null +++ b/kparams/src/lib.rs @@ -0,0 +1,23 @@ +//! kparams + +#![warn(missing_docs, clippy::unwrap_used)] + +use kparams_core::error::Result; +use kparams_core::reader; +use kparams_parser::parser::RstParser; +use std::path::PathBuf; + +/// Runs `kparams`. +pub fn run() -> Result<()> { + let kernel_docs = PathBuf::from("/usr/share/doc/linux"); + let sysctl_docs = kernel_docs.join("admin-guide").join("sysctl"); + let kernel_section = reader::read_to_string(&sysctl_docs.join("kernel.rst"))?; + + let kernel_section_docs = RstParser::parse_docs(&kernel_section); + for kernel_parameter in kernel_section_docs.parameters { + println!("## {}", kernel_parameter.name); + println!("{}", kernel_parameter.description); + } + + Ok(()) +} diff --git a/kparams/src/main.rs b/kparams/src/main.rs index 54a15ed..b0636ee 100644 --- a/kparams/src/main.rs +++ b/kparams/src/main.rs @@ -1,15 +1,8 @@ -use kparams_core::reader; -use kparams_parser::parser::RstParser; -use std::path::PathBuf; +use std::process; fn main() { - let kernel_docs = PathBuf::from("/usr/share/doc/linux"); - let sysctl_docs = kernel_docs.join("admin-guide").join("sysctl"); - let kernel_section = reader::read_to_string(&sysctl_docs.join("kernel.rst")).unwrap(); - - let kernel_section_docs = RstParser::parse_docs(&kernel_section); - for kernel_parameter in kernel_section_docs.parameters { - println!("## {}", kernel_parameter.name); - println!("{}", kernel_parameter.description); + match kparams::run() { + Ok(_) => process::exit(0), + Err(_) => process::exit(1), } }