pub struct Config {
pub value: Value,
pub explicit_braces: bool,
}Expand description
A libconfig document that tracks top-level formatting.
Config wraps a Value and remembers whether the outer group uses
implicit format (no braces) or explicit format ({...}).
Create an empty config with Config::new, parse from a string with
Config::from_str, or wrap an existing Value with Config::from(value).
Config derefs to Value, so all Value methods (indexing, lookup,
set, remove) work directly on a Config.
§Examples
use libconfig::{Config, Value};
let mut config = Config::new();
config.set("name", Value::String("test".into()));
config.set("version", Value::Integer(42));
assert_eq!(config["name"], "test");
assert_eq!(config["version"], 42);
let output = config.to_string().unwrap();
assert_eq!(output, "name = \"test\";\nversion = 42;");Fields§
§value: ValueThe root value of the configuration
explicit_braces: boolWhether the outer group has explicit braces
Implementations§
Source§impl Config
impl Config
Sourcepub fn from_str(s: &str) -> Result<Config>
pub fn from_str(s: &str) -> Result<Config>
Parse a libconfig string into a Config, automatically detecting
whether the input uses an implicit group (no outer braces) or
explicit group ({...}).
§Examples
use libconfig::Config;
// Implicit group (no braces)
let config = Config::from_str("a = 1; b = 2;").unwrap();
assert!(!config.explicit_braces);
assert_eq!(config["a"], 1);
// Explicit group (with braces)
let config = Config::from_str("{ a = 1; b = 2; }").unwrap();
assert!(config.explicit_braces);
assert_eq!(config["a"], 1);Sourcepub fn from_file<P: AsRef<Path>>(path: P) -> Result<Config>
pub fn from_file<P: AsRef<Path>>(path: P) -> Result<Config>
Read and parse a libconfig file into a Config, automatically
detecting whether the input uses an implicit or explicit group.
§Examples
use libconfig::Config;
let config = Config::from_file("settings.cfg").unwrap();
println!("{}", config["name"]);Methods from Deref<Target = Value>§
Sourcepub fn is_integer(&self) -> bool
pub fn is_integer(&self) -> bool
Returns true if the value is an integer (32-bit or 64-bit)
Sourcepub fn as_bool(&self) -> Option<bool>
pub fn as_bool(&self) -> Option<bool>
If the value is a boolean, returns it. Returns None otherwise.
Sourcepub fn as_i32(&self) -> Option<i32>
pub fn as_i32(&self) -> Option<i32>
If the value is an integer, returns it as i32. Returns None otherwise.
Sourcepub fn as_i64(&self) -> Option<i64>
pub fn as_i64(&self) -> Option<i64>
If the value is an integer, returns it as i64. Returns None otherwise.
Sourcepub fn as_f64(&self) -> Option<f64>
pub fn as_f64(&self) -> Option<f64>
If the value is a float, returns it. Returns None otherwise.
Sourcepub fn as_str(&self) -> Option<&str>
pub fn as_str(&self) -> Option<&str>
If the value is a string, returns a reference to it. Returns None otherwise.
Sourcepub fn as_array(&self) -> Option<&Vec<Value>>
pub fn as_array(&self) -> Option<&Vec<Value>>
If the value is an array or list, returns a reference to it. Returns None otherwise.
Sourcepub fn as_group(&self) -> Option<&Map>
pub fn as_group(&self) -> Option<&Map>
If the value is a group, returns a reference to the map. Returns None otherwise.
Sourcepub fn get<S: AsRef<str>>(&self, key: S) -> Option<&Value>
pub fn get<S: AsRef<str>>(&self, key: S) -> Option<&Value>
Gets a reference to a value in a group by key
Returns None if the value is not a group or the key doesn’t exist.
Sourcepub fn get_mut<S: AsRef<str>>(&mut self, key: S) -> Option<&mut Value>
pub fn get_mut<S: AsRef<str>>(&mut self, key: S) -> Option<&mut Value>
Gets a mutable reference to a value in a group by key
Returns None if the value is not a group or the key doesn’t exist.
Sourcepub fn get_index(&self, index: usize) -> Option<&Value>
pub fn get_index(&self, index: usize) -> Option<&Value>
Gets a reference to a value in an array/list by index
Returns None if the value is not an array/list or the index is out of bounds.
Sourcepub fn lookup(&self, path: &str) -> Option<&Value>
pub fn lookup(&self, path: &str) -> Option<&Value>
Looks up a value by a dotted path like “application.window.title”
Returns None if any part of the path doesn’t exist.
§Examples
use libconfig::Value;
let config = r#"
{
application = {
window = {
title = "My App";
};
};
}
"#;
let v = Value::from_str(config).unwrap();
assert_eq!(v.lookup("application.window.title").and_then(|v| v.as_str()), Some("My App"));Sourcepub fn lookup_mut(&mut self, path: &str) -> Option<&mut Value>
pub fn lookup_mut(&mut self, path: &str) -> Option<&mut Value>
Looks up a mutable reference to a value by a dotted path like “application.window.title”
Returns None if any part of the path doesn’t exist.
Supports both bracket notation (items.[0]) and bare numeric (items.0).
§Examples
use libconfig::Value;
let config = r#"
{
ports = [80, 443];
}
"#;
let mut v = Value::from_str(config).unwrap();
*v.lookup_mut("ports.[0]").unwrap() = Value::Integer(8080);
assert_eq!(v["ports.0"], 8080);Sourcepub fn set(&mut self, path: &str, value: Value) -> Option<()>
pub fn set(&mut self, path: &str, value: Value) -> Option<()>
Sets a value at the given path, creating intermediate Group nodes as needed.
Returns Some(()) on success, or None if the path is invalid or an
intermediate value is not a Group/Array/List.
Array/list indices must refer to existing elements (no auto-extension).
§Examples
use libconfig::Value;
use indexmap::IndexMap;
let mut v = Value::Group(IndexMap::new());
v.set("a.b.c", Value::Integer(42));
assert_eq!(v.lookup("a.b.c").unwrap().as_i32(), Some(42));Sourcepub fn remove(&mut self, path: &str) -> Option<Value>
pub fn remove(&mut self, path: &str) -> Option<Value>
Removes a value at the given path and returns it.
For group members, the key-value pair is removed. For array/list elements, the element is removed and subsequent elements shift down.
Returns None if the path is invalid or the target doesn’t exist.
§Examples
use libconfig::Value;
let mut v = Value::from_str(r#"{ a = 1; b = 2; c = 3; }"#).unwrap();
let removed = v.remove("b");
assert_eq!(removed, Some(Value::Integer(2)));
assert!(v.lookup("b").is_none());Sourcepub fn to_string(&self) -> Result<String>
pub fn to_string(&self) -> Result<String>
Serialize this value to a libconfig string.
The output always wraps top-level groups in braces. For implicit
(no braces) output, use Config::from or Config::from_str.
§Examples
use libconfig::Value;
let v = Value::Integer(42);
assert_eq!(v.to_string().unwrap(), "42");