fix examples

master 0.3.1
Ondřej Hruška 5 years ago
parent 53329aa5e8
commit 6fede9561f
Signed by: MightyPork
GPG Key ID: 2C5FD5035250423D
  1. 6
      Cargo.toml
  2. 4
      README.md
  3. 5
      examples/minimal.rs
  4. 17
      examples/rotn.rs
  5. 3
      src/lib.rs

@ -1,6 +1,6 @@
[package]
name = "clappconfig"
version = "0.3.0"
version = "0.3.1"
authors = ["Ondřej Hruška <ondra@ondrovo.com>"]
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"

@ -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.

@ -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<Self::Init> {
fn configure<'a>(self, _clap: &clap::ArgMatches<'a>) -> anyhow::Result<Self::Init> {
Ok(self)
}
}
fn main() -> Fallible<()> {
fn main() -> anyhow::Result<()> {
let cfg = Config::init("Foo Example", "examples/foo.json", None)?;
trace!("Trace message");

@ -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<Self::Init> {
fn configure<'a>(mut self, clap: &ArgMatches<'a>) -> anyhow::Result<Self::Init> {
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)?;

@ -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) {
//
}

Loading…
Cancel
Save