From 6bd7aad30e5d533b833c613625553b05b489c9c0 Mon Sep 17 00:00:00 2001 From: Geert Stappers Date: Sun, 4 Aug 2019 20:08:57 +0200 Subject: [PATCH 1/3] Added simple expample In the (new) example directory is now `simple.rs` and `config.yaml`. It is a working example plus a matching YAML file. --- examples/config.yaml | 8 ++++++++ examples/simple.rs | 31 +++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 examples/config.yaml create mode 100644 examples/simple.rs diff --git a/examples/config.yaml b/examples/config.yaml new file mode 100644 index 0000000..ab8e2c9 --- /dev/null +++ b/examples/config.yaml @@ -0,0 +1,8 @@ +# +--- +item1: foo +# comment +item2: bar +_item3: underscore used to comment out a keyword +... +# l l diff --git a/examples/simple.rs b/examples/simple.rs new file mode 100644 index 0000000..ff7675b --- /dev/null +++ b/examples/simple.rs @@ -0,0 +1,31 @@ +extern crate quire; +#[macro_use] extern crate serde_derive; +use quire::{parse_config, Options}; +use quire::validate::{Structure, Scalar}; + +#[derive(Deserialize)] +#[allow(dead_code)] +struct Config { + item1: String, + item2: Option, +} + +fn validator() -> Structure<'static> { + Structure::new() + .member("item1", Scalar::new()) + .member("item2", Scalar::new().optional()) +} + +fn work(cfg: &Config) { + println!("item1 is {}.", cfg.item1); + //intln!("item2 is {}.", cfg.item2); + // hey, this is just demonstration code ... +} + +fn main() { + let cfg: Config; + cfg = parse_config("examples/config.yaml", + &validator(), &Options::default()) + .expect("valid config"); + work(&cfg) +} From 04b5bfab988626189834224f9b576d4d0a963b32 Mon Sep 17 00:00:00 2001 From: Geert Stappers Date: Sun, 4 Aug 2019 20:15:48 +0200 Subject: [PATCH 2/3] Information for programmer in documation Mostly for making the example source code visible. And has pointers to further information. --- doc/index.rst | 1 + doc/programmer.rst | 44 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 doc/programmer.rst diff --git a/doc/index.rst b/doc/index.rst index 3abeeb4..69627be 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -20,6 +20,7 @@ Contents: :maxdepth: 2 user + programmer .. _Yaml: http://yaml.org diff --git a/doc/programmer.rst b/doc/programmer.rst new file mode 100644 index 0000000..5f1373e --- /dev/null +++ b/doc/programmer.rst @@ -0,0 +1,44 @@ + +================ +Programmer Guide +================ + +As a programmer you are looking for source code. +You found it, here it is. + +.. literalinclude:: ../examples/simple.rs + :language: rust + + +Key link +======== + +The key link between configuration file +and the executable programm that you are writen +is the configuration ``struct``. + +In the demo source code is that struct named *Config* +and is *cfg* a variable of type Config. + + +config.yaml +=========== + +Nothing of ``Config`` or ``cfg`` needs to be in the YAML. +But the field names **must**. + +Here the *.yaml* that goes with the above example source code. + + +.. literalinclude:: ../examples/config.yaml + :language: yaml + + +See also +======== + +The documentation of `serde `_. + +Our ``examples`` directory. + +`Reverse dependencies `_. From aed331f687acf156c2980321dace6772b469856f Mon Sep 17 00:00:00 2001 From: Geert Stappers Date: Sun, 4 Aug 2019 20:18:27 +0200 Subject: [PATCH 3/3] Added examples/README.text Provides `cargo` usage information. --- examples/README.text | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 examples/README.text diff --git a/examples/README.text b/examples/README.text new file mode 100644 index 0000000..d5ff58d --- /dev/null +++ b/examples/README.text @@ -0,0 +1,10 @@ + +Run + cargo build --examples +anywhere to get examples been compiled. + +For + cargo run --example simple +be in the top directory of the project. +That is for having the correct start point +to get path to config.yaml right.