aboutsummaryrefslogtreecommitdiff
path: root/src/lib.rs
diff options
context:
space:
mode:
authorAndrzej Janik <vosen@vosen.pl>2015-06-04 20:23:46 +0200
committerAndrzej Janik <vosen@vosen.pl>2015-06-04 20:23:46 +0200
commit2fcd829b1d9c70d0981411b4f4adca9124985b54 (patch)
tree1487d67764c99542b6fc7df30c60dc89719dd370 /src/lib.rs
parent971700148b58df921f070015febd8706c66edded (diff)
downloadmilf-rs-2fcd829b1d9c70d0981411b4f4adca9124985b54.tar.gz
milf-rs-2fcd829b1d9c70d0981411b4f4adca9124985b54.zip
Disallow table redefinitions
Diffstat (limited to 'src/lib.rs')
-rw-r--r--src/lib.rs20
1 files changed, 18 insertions, 2 deletions
diff --git a/src/lib.rs b/src/lib.rs
index 0196fbc..547c407 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -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