aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/lib.rs8
-rw-r--r--src/parser.rs8
2 files changed, 9 insertions, 7 deletions
diff --git a/src/lib.rs b/src/lib.rs
index 10e2009..89a72e7 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -191,7 +191,7 @@ impl Value {
}
},
&Value::Array(ref v) => {
- match key.parse::<usize>() {
+ match key.parse::<usize>().ok() {
Some(idx) if idx < v.len() => cur_value = &v[idx],
_ => return None
}
@@ -205,8 +205,10 @@ impl Value {
}
impl FromStr for Value {
- fn from_str(s: &str) -> Option<Value> {
- Parser::new(s).parse().map(Value::Table)
+ type Err = Vec<ParserError>;
+ fn from_str(s: &str) -> Result<Value, Vec<ParserError>> {
+ let mut p = Parser::new(s);
+ p.parse().map(Value::Table).ok_or(p.errors)
}
}
diff --git a/src/parser.rs b/src/parser.rs
index 4316df3..723ac3a 100644
--- a/src/parser.rs
+++ b/src/parser.rs
@@ -132,7 +132,7 @@ impl<'a> Parser<'a> {
// Consumes the rest of the line after a comment character
fn comment(&mut self) -> bool {
if !self.eat('#') { return false }
- for (_, ch) in self.cur {
+ for (_, ch) in self.cur.by_ref() {
if ch == '\n' { break }
}
true
@@ -379,7 +379,7 @@ impl<'a> Parser<'a> {
} else {
"invalid"
};
- match FromStrRadix::from_str_radix(num, 16) {
+ match FromStrRadix::from_str_radix(num, 16).ok() {
Some(n) => {
match char::from_u32(n) {
Some(c) => {
@@ -497,9 +497,9 @@ impl<'a> Parser<'a> {
} else {
let input = input.trim_left_matches('+');
if is_float {
- input.parse().map(Float)
+ input.parse().ok().map(Float)
} else {
- input.parse().map(Integer)
+ input.parse().ok().map(Integer)
}
};
if ret.is_none() {