From 6fede9561f9b156d9f5c73e7c7592a10877926cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Hru=C5=A1ka?= Date: Fri, 8 May 2020 00:53:52 +0200 Subject: [PATCH] fix examples --- Cargo.toml | 6 +++++- README.md | 4 ++++ examples/minimal.rs | 5 ++--- examples/rotn.rs | 17 ++++++----------- src/lib.rs | 3 ++- 5 files changed, 19 insertions(+), 16 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 3c7d387..267e000 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "clappconfig" -version = "0.3.0" +version = "0.3.1" authors = ["Ondřej Hruška "] edition = "2018" license = "MIT" @@ -20,3 +20,7 @@ serde = "1.0" serde_json = "1.0" clap = "2.33" json5 = "0.2" + +[dev-dependencies] +smart-default = "0.6" +serde_derive = "1.0" diff --git a/README.md b/README.md index 70f1d9f..44f56b8 100644 --- a/README.md +++ b/README.md @@ -28,6 +28,10 @@ Supports custom `clap` arguments as well. - log level can be overridden by the `--log` CLI flag - log level can be increased by repeated use of `-v` or `--verbose` +## Re-exports + +The crates re-exports crates used in public API: `clap`, `anyhow`, `log`. + ## Example See the examples directory. diff --git a/examples/minimal.rs b/examples/minimal.rs index 9045356..584e9a5 100644 --- a/examples/minimal.rs +++ b/examples/minimal.rs @@ -6,7 +6,6 @@ extern crate serde_derive; extern crate log; use clappconfig::AppConfig; // Must be in scope so the trait methods may be used -use failure::Fallible; #[derive(Serialize, Deserialize, Debug, Default)] #[serde(default)] @@ -25,12 +24,12 @@ impl AppConfig for Config { } /// Finalize config (this is called inside `init()`) - fn configure<'a>(self, _clap: &clap::ArgMatches<'a>) -> Fallible { + fn configure<'a>(self, _clap: &clap::ArgMatches<'a>) -> anyhow::Result { Ok(self) } } -fn main() -> Fallible<()> { +fn main() -> anyhow::Result<()> { let cfg = Config::init("Foo Example", "examples/foo.json", None)?; trace!("Trace message"); diff --git a/examples/rotn.rs b/examples/rotn.rs index 96535bc..3f12167 100644 --- a/examples/rotn.rs +++ b/examples/rotn.rs @@ -3,13 +3,10 @@ #[macro_use] extern crate serde_derive; #[macro_use] -extern crate failure; -#[macro_use] -extern crate log; +pub extern crate log; use clap::ArgMatches; use clappconfig::AppConfig; -use failure::Fallible; use smart_default::SmartDefault; use std::collections::HashMap; use std::fs::OpenOptions; @@ -105,14 +102,14 @@ impl AppConfig for Config { /// /// This can also be solved using `#[serde(skip)]` on the field, but sometimes that is not /// possible. - fn configure<'a>(mut self, clap: &ArgMatches<'a>) -> Fallible { + fn configure<'a>(mut self, clap: &ArgMatches<'a>) -> anyhow::Result { let input = clap.value_of("input").unwrap().to_string(); // Logging is initialized now - feel free to use it debug!("Input: {}", input); if input.is_empty() { - bail!("Input is required!"); + anyhow::bail!("Input is required!"); } // `?` can be used to abort @@ -121,7 +118,7 @@ impl AppConfig for Config { debug!("Input path: {}", pb.display()); if !pb.is_file() { - return Err(format_err!("Input is not a file!")); + anyhow::bail!("Input is not a file!"); } // Set offset by arg @@ -144,7 +141,7 @@ impl AppConfig for Config { } } -fn main() -> Fallible<()> { +fn main() -> anyhow::Result<()> { // Using custom version (default is CARGO_PKG_VERSION) let version = format!( "{} by {}", @@ -156,9 +153,7 @@ fn main() -> Fallible<()> { // rot13 - let mut f = OpenOptions::new() - .read(true) - .open(main.input_file)?; + let mut f = OpenOptions::new().read(true).open(main.input_file)?; let mut buf = String::new(); f.read_to_string(&mut buf)?; diff --git a/src/lib.rs b/src/lib.rs index 008ceb6..3f1f84c 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -11,6 +11,7 @@ use std::path::{Path, PathBuf}; use std::str::FromStr; // re-export libs appearing in public API +pub use anyhow; pub use clap; pub const LOG_LEVELS: [&str; 6] = ["off", "error", "warn", "info", "debug", "trace"]; @@ -52,7 +53,7 @@ pub trait AppConfig: Sized + Serialize + DeserializeOwned + Debug + Default { /// Called when the config file is resolved, e.g. to store it in Config /// for later relative path resolution - fn on_config_file_found(&mut self, _path : &PathBuf) { + fn on_config_file_found(&mut self, _path: &PathBuf) { // }