diff --git a/CHANGELOG.md b/CHANGELOG.md index 5b87012..21af1cc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,12 @@ Chrono obeys the principle of [Semantic Versioning](http://semver.org/). There were/are numerous minor versions before 1.0 due to the language changes. Versions with only mechnical changes will be omitted from the following list. +## 0.4.next + +* More strongly deprecate RustcSerialize: remove it from documentation unless + the feature is enabled, issue a deprecation warning if the rustc-serialize + feature is enabled (@quodlibetor) + ## 0.4.1 ### Bug Fixes diff --git a/README.md b/README.md index cfff143..1d64138 100644 --- a/README.md +++ b/README.md @@ -45,21 +45,14 @@ Put this in your `Cargo.toml`: chrono = "0.4" ``` -Or, if you want [Serde](https://github.com/serde-rs/serde) or -[rustc-serialize](https://github.com/rust-lang-nursery/rustc-serialize) support, -include the features like this: +Or, if you want [Serde](https://github.com/serde-rs/serde) include the feature +like this: ```toml [dependencies] -chrono = { version = "0.4", features = ["serde", "rustc-serialize"] } +chrono = { version = "0.4", features = ["serde"] } ``` -> Note that Chrono's support for rustc-serialize is now considered deprecated. -Starting from 0.4.0 there is no further guarantee that -the features available in Serde will be also available to rustc-serialize, -and the support can be removed in any future major version. -**Rustc-serialize users are strongly recommended to migrate to Serde.** - Then put this in your crate root: ```rust diff --git a/src/datetime.rs b/src/datetime.rs index ec5e85a..3e12eb3 100644 --- a/src/datetime.rs +++ b/src/datetime.rs @@ -695,7 +695,9 @@ pub mod rustc_serialize { } } + #[allow(deprecated)] impl Decodable for TsSeconds { + #[allow(deprecated)] fn decode(d: &mut D) -> Result, D::Error> { from(FixedOffset::east(0).timestamp_opt(d.read_i64()?, 0), d) .map(TsSeconds) @@ -717,13 +719,16 @@ pub mod rustc_serialize { #[derive(Debug)] pub struct TsSeconds(DateTime); + #[allow(deprecated)] impl From> for DateTime { /// Pull the inner DateTime out + #[allow(deprecated)] fn from(obj: TsSeconds) -> DateTime { obj.0 } } + #[allow(deprecated)] impl Deref for TsSeconds { type Target = DateTime; @@ -732,6 +737,7 @@ pub mod rustc_serialize { } } + #[allow(deprecated)] impl Decodable for TsSeconds { fn decode(d: &mut D) -> Result, D::Error> { from(Utc.timestamp_opt(d.read_i64()?, 0), d) @@ -748,7 +754,9 @@ pub mod rustc_serialize { } } + #[allow(deprecated)] impl Decodable for TsSeconds { + #[allow(deprecated)] fn decode(d: &mut D) -> Result, D::Error> { from(Utc.timestamp_opt(d.read_i64()?, 0), d) .map(|dt| TsSeconds(dt.with_timezone(&Local))) diff --git a/src/lib.rs b/src/lib.rs index 6aad9ea..c10dcc2 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -411,7 +411,8 @@ pub use oldtime::Duration; #[doc(no_inline)] pub use naive::{NaiveDate, IsoWeek, NaiveTime, NaiveDateTime}; pub use date::{Date, MIN_DATE, MAX_DATE}; pub use datetime::{DateTime, SecondsFormat}; -#[cfg(feature = "rustc-serialize")] pub use datetime::rustc_serialize::TsSeconds; +#[cfg(feature = "rustc-serialize")] +pub use datetime::rustc_serialize::TsSeconds; pub use format::{ParseError, ParseResult}; pub use round::SubsecRound; @@ -451,6 +452,7 @@ pub mod naive { pub use self::time::NaiveTime; pub use self::datetime::NaiveDateTime; #[cfg(feature = "rustc-serialize")] + #[allow(deprecated)] pub use self::datetime::rustc_serialize::TsSeconds; diff --git a/src/naive/datetime.rs b/src/naive/datetime.rs index b1212bf..b5d1ce5 100644 --- a/src/naive/datetime.rs +++ b/src/naive/datetime.rs @@ -1503,24 +1503,32 @@ pub mod rustc_serialize { /// A `DateTime` that can be deserialized from a seconds-based timestamp #[derive(Debug)] + #[deprecated(since = "1.4.2", + note = "RustcSerialize will be removed before chrono 1.0, use Serde instead")] pub struct TsSeconds(NaiveDateTime); + #[allow(deprecated)] impl From for NaiveDateTime { /// Pull the internal NaiveDateTime out + #[allow(deprecated)] fn from(obj: TsSeconds) -> NaiveDateTime { obj.0 } } + #[allow(deprecated)] impl Deref for TsSeconds { type Target = NaiveDateTime; + #[allow(deprecated)] fn deref(&self) -> &Self::Target { &self.0 } } + #[allow(deprecated)] impl Decodable for TsSeconds { + #[allow(deprecated)] fn decode(d: &mut D) -> Result { Ok(TsSeconds( NaiveDateTime::from_timestamp_opt(d.read_i64()?, 0)