e256931e9b
This commit completely rewrites this crate from the ground up, supporting serde at the lowest levels as I believe serde support was intended to do. This is a major change from the previous versions of this crate, with a summary of changes being: * Serialization directly to TOML is now supported without going through a `Value` first. * Deserialization directly from TOML is now supported without going through a `Value`. Note that due to the TOML format some values still are buffered in intermediate memory, but overall this should be at a minimum now. * The API of `Value` was overhauled to match the API of `serde_json::Value`. The changes here were to: * Add `is_*` accessors * Add `get` and `get_mut` for one-field lookups. * Implement panicking lookups through `Index` The old `index` methods are now gone in favor of `get` and `Index` implementations. * A `Datetime` type has been added to represent a TOML datetime in a first-class fashion. Currently this type provides no accessors other than a `Display` implementation, but the idea is that this will grow support over time for decomposing the date. * Support for the `rustc-serialize` crate has been dropped, that'll stay on the 0.2 and 0.1 release trains. * This crate no longer supports the detection of unused fields, for that though you can use the `serde_ignored` crate on crates.io
59 lines
1.5 KiB
Rust
59 lines
1.5 KiB
Rust
extern crate toml;
|
|
|
|
use std::str::FromStr;
|
|
|
|
use toml::Value;
|
|
|
|
#[test]
|
|
fn times() {
|
|
fn good(s: &str) {
|
|
let to_parse = format!("foo = {}", s);
|
|
let value = Value::from_str(&to_parse).unwrap();
|
|
assert_eq!(value["foo"].as_datetime().unwrap().to_string(), s);
|
|
}
|
|
|
|
good("1997-09-09T09:09:09Z");
|
|
good("1997-09-09T09:09:09+09:09");
|
|
good("1997-09-09T09:09:09-09:09");
|
|
good("1997-09-09T09:09:09");
|
|
good("1997-09-09");
|
|
good("09:09:09");
|
|
good("1997-09-09T09:09:09.09Z");
|
|
good("1997-09-09T09:09:09.09+09:09");
|
|
good("1997-09-09T09:09:09.09-09:09");
|
|
good("1997-09-09T09:09:09.09");
|
|
good("09:09:09.09");
|
|
}
|
|
|
|
#[test]
|
|
fn bad_times() {
|
|
fn bad(s: &str) {
|
|
let to_parse = format!("foo = {}", s);
|
|
assert!(Value::from_str(&to_parse).is_err());
|
|
}
|
|
|
|
bad("199-09-09");
|
|
bad("199709-09");
|
|
bad("1997-9-09");
|
|
bad("1997-09-9");
|
|
bad("1997-09-0909:09:09");
|
|
bad("1997-09-09T09:09:09.");
|
|
bad("T");
|
|
bad("T.");
|
|
bad("TZ");
|
|
bad("1997-09-09T09:09:09.09+");
|
|
bad("1997-09-09T09:09:09.09+09");
|
|
bad("1997-09-09T09:09:09.09+09:9");
|
|
bad("1997-09-09T09:09:09.09+0909");
|
|
bad("1997-09-09T09:09:09.09-");
|
|
bad("1997-09-09T09:09:09.09-09");
|
|
bad("1997-09-09T09:09:09.09-09:9");
|
|
bad("1997-09-09T09:09:09.09-0909");
|
|
|
|
bad("1997-00-09T09:09:09.09Z");
|
|
bad("1997-09-00T09:09:09.09Z");
|
|
bad("1997-09-09T30:09:09.09Z");
|
|
bad("1997-09-09T12:69:09.09Z");
|
|
bad("1997-09-09T12:09:69.09Z");
|
|
}
|