Decodes foo-bar
into a field named foo_bar
This logic is specific to the Decoder, and because Rust does not support hyphenated names as identifiers, it's the only reasonable thing to do with hyphenated names in Toml.
This commit is contained in:
parent
e32363c788
commit
806a7bd937
|
@ -1,6 +1,7 @@
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use std::mem;
|
use std::mem;
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
|
use std::str;
|
||||||
|
|
||||||
use serialize;
|
use serialize;
|
||||||
use {Value, Table, Array, String, Integer, Float, Boolean, Parser};
|
use {Value, Table, Array, String, Integer, Float, Boolean, Parser};
|
||||||
|
@ -555,7 +556,10 @@ impl serialize::Decoder<DecodeError> for Decoder {
|
||||||
-> Result<T, DecodeError> {
|
-> Result<T, DecodeError> {
|
||||||
let field = f_name.to_string();
|
let field = f_name.to_string();
|
||||||
let toml = match self.toml {
|
let toml = match self.toml {
|
||||||
Some(Table(ref mut table)) => table.pop(&field),
|
Some(Table(ref mut table)) => {
|
||||||
|
table.pop(&field)
|
||||||
|
.or_else(|| table.pop(&hyphenate(f_name)))
|
||||||
|
},
|
||||||
ref found => return Err(self.mismatch("table", found)),
|
ref found => return Err(self.mismatch("table", found)),
|
||||||
};
|
};
|
||||||
let mut d = self.sub_decoder(toml, f_name);
|
let mut d = self.sub_decoder(toml, f_name);
|
||||||
|
@ -694,6 +698,10 @@ impl serialize::Decoder<DecodeError> for Decoder {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn hyphenate(string: &str) -> String {
|
||||||
|
str::replace(string, "_", "-")
|
||||||
|
}
|
||||||
|
|
||||||
impl fmt::Show for DecodeError {
|
impl fmt::Show for DecodeError {
|
||||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||||
try!(match self.kind {
|
try!(match self.kind {
|
||||||
|
|
Loading…
Reference in a new issue