diff options
author | Andrzej Janik <vosen@vosen.pl> | 2015-06-04 20:23:46 +0200 |
---|---|---|
committer | Andrzej Janik <vosen@vosen.pl> | 2015-06-04 20:23:46 +0200 |
commit | 2fcd829b1d9c70d0981411b4f4adca9124985b54 (patch) | |
tree | 1487d67764c99542b6fc7df30c60dc89719dd370 /src/lib.rs | |
parent | 971700148b58df921f070015febd8706c66edded (diff) | |
download | milf-rs-2fcd829b1d9c70d0981411b4f4adca9124985b54.tar.gz milf-rs-2fcd829b1d9c70d0981411b4f4adca9124985b54.zip |
Disallow table redefinitions
Diffstat (limited to 'src/lib.rs')
-rw-r--r-- | src/lib.rs | 20 |
1 files changed, 18 insertions, 2 deletions
@@ -75,8 +75,24 @@ pub enum Value { /// Type representing a TOML array, payload of the Value::Array variant pub type Array = Vec<Value>; +// The bool field flag is used during parsing and construction. +// Is true if the given table was explicitly defined, false otherwise +// e.g. in a toml document: `[a.b] foo = "bar"`, Table `a` would be false, +// where table `b` (contained inside `a`) would be true. /// Type representing a TOML table, payload of the Value::Table variant -pub type Table = BTreeMap<string::String, Value>; +#[derive(Debug, Clone)] +pub struct Table (pub BTreeMap<string::String, Value>, bool); +impl Table { + /// Creates new TOML table + pub fn new(map: BTreeMap<string::String, Value>) -> Table { + Table(map, false) + } +} +impl PartialEq for Table { + fn eq(&self, other: &Table) -> bool { + self.0.eq(&other.0) + } +} impl Value { /// Tests whether this and another value have the same type. @@ -182,7 +198,7 @@ impl Value { let mut cur_value = self; for key in path.split('.') { match cur_value { - &Value::Table(ref hm) => { + &Value::Table(Table(ref hm, _)) => { match hm.get(key) { Some(v) => cur_value = v, None => return None |