From f66d8bcf33530c858a502bfa170f2383a8cbc204 Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Sun, 29 Jan 2017 16:53:20 -0800 Subject: Rewrite crate with serde support from ground up 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 --- src/datetime.rs | 424 +++++++++++ src/de.rs | 1195 +++++++++++++++++++++++++++++ src/decoder/mod.rs | 240 ------ src/decoder/rustc_serialize.rs | 371 --------- src/decoder/serde.rs | 773 ------------------- src/display.rs | 212 ------ src/encoder/mod.rs | 222 ------ src/encoder/rustc_serialize.rs | 748 ------------------ src/encoder/serde.rs | 339 --------- src/lib.rs | 640 ++++------------ src/parser.rs | 1627 ---------------------------------------- src/ser.rs | 1006 +++++++++++++++++++++++++ src/tokens.rs | 620 +++++++++++++++ src/value.rs | 894 ++++++++++++++++++++++ src/value/display.rs | 134 ++++ 15 files changed, 4424 insertions(+), 5021 deletions(-) create mode 100644 src/datetime.rs create mode 100644 src/de.rs delete mode 100644 src/decoder/mod.rs delete mode 100644 src/decoder/rustc_serialize.rs delete mode 100644 src/decoder/serde.rs delete mode 100644 src/display.rs delete mode 100644 src/encoder/mod.rs delete mode 100644 src/encoder/rustc_serialize.rs delete mode 100644 src/encoder/serde.rs delete mode 100644 src/parser.rs create mode 100644 src/ser.rs create mode 100644 src/tokens.rs create mode 100644 src/value.rs create mode 100644 src/value/display.rs (limited to 'src') diff --git a/src/datetime.rs b/src/datetime.rs new file mode 100644 index 0000000..7a618dc --- /dev/null +++ b/src/datetime.rs @@ -0,0 +1,424 @@ +use std::fmt; +use std::str::{self, FromStr}; +use std::error; + +use serde::{de, ser}; + +/// A parsed TOML datetime value +/// +/// This structure is intended to represent the datetime primitive type that can +/// be encoded into TOML documents. This type is a parsed version that contains +/// all metadata internally. +/// +/// Currently this type is intentionally conservative and only supports +/// `to_string` as an accessor. Over time though it's intended that it'll grow +/// more support! +/// +/// Note that if you're using `Deserialize` to deserialize a TOML document, you +/// can use this as a placeholder for where you're expecting a datetime to be +/// specified. +/// +/// Also note though that while this type implements `Serialize` and +/// `Deserialize` it's only recommended to use this type with the TOML format, +/// otherwise encoded in other formats it may look a little odd. +#[derive(PartialEq, Clone)] +pub struct Datetime { + date: Option, + time: Option