1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
//! Configuration is gathered by building a `Source` and then merging that source into the
//! current state of the configuration.
//!
//! ```rust
//! extern crate config;
//!
//! use std::env;
//! use config::{Config, File, FileFormat, Environment};
//!
//! fn main() {
//!     // Create a new local configuration
//!     let mut c = Config::new();
//!
//!     // Add 'Settings.toml'
//!     c.merge(File::new("Settings", FileFormat::Toml).required(false)).unwrap();
//!
//!     // Add 'Settings.$(RUST_ENV).toml`
//!     let name = format!("Settings.{}", env::var("env").unwrap_or("development".into()));
//!     c.merge(File::new(&name, FileFormat::Toml).required(false)).unwrap();
//!
//!     // Add environment variables that begin with APP_
//!     c.merge(Environment::new("APP")).unwrap();
//! }
//! ```
//!
//! Note that in the above example the calls to `config::merge` could have
//! been re-ordered to influence the priority as each successive merge
//! is evaluated on top of the previous.
//!
//! Configuration values can be retrieved with a call to `config::get` and then
//! coerced into a type with `as_*`.
//!
//! ```rust
//! # extern crate config;
//! #
//! # use std::env;
//! # use config::{Config, File, FileFormat, Environment};
//! #
//! # fn main() {
//! #    // Create a new local configuration
//! #    let mut c = Config::new();
//! #
//! #    // Add 'Settings.toml'
//! #    c.merge(File::new("Settings", FileFormat::Toml).required(false)).unwrap();
//! #
//! #    // Add 'Settings.$(RUST_ENV).toml`
//! #    let name = format!("Settings.{}", env::var("env").unwrap_or("development".into()));
//! #    c.merge(File::new(&name, FileFormat::Toml).required(false)).unwrap();
//! #
//! #    // Add environment variables that begin with APP_
//! #    c.merge(Environment::new("APP")).unwrap();
//! // Get 'debug' and coerce to a boolean
//! if let Some(value) = c.get("debug") {
//!     println!("{:?}", value.into_bool());
//! }
//!
//! // You can use a type suffix
//! println!("{:?}", c.get_bool("debug"));
//! println!("{:?}", c.get_str("debug"));
//! # }
//! ```
//!
//! See the [examples](https://github.com/mehcode/config-rs/tree/master/examples) for
//! more usage information.

#[macro_use]
extern crate nom;

#[cfg(feature = "toml")]
extern crate toml;

#[cfg(feature = "json")]
extern crate serde_json;

#[cfg(feature = "yaml")]
extern crate yaml_rust;

mod value;
mod source;
mod file;
mod env;
mod path;
mod config;

pub use source::{Source, SourceBuilder};
pub use file::{File, FileFormat};
pub use env::Environment;
pub use value::Value;
pub use config::Config;