mirror of
https://github.com/chronotope/chrono.git
synced 2025-10-02 15:26:12 +00:00
add optional rkyv support
This commit is contained in:
parent
3105ff5bb9
commit
0ec64a9723
@ -21,6 +21,7 @@ Versions with only mechanical changes will be omitted from the following list.
|
|||||||
* Correct build for wasm32-unknown-emscripten target (#568)
|
* Correct build for wasm32-unknown-emscripten target (#568)
|
||||||
* Change `Local::now()` and `Utc::now()` documentation from "current date" to "current date and time" (#647)
|
* Change `Local::now()` and `Utc::now()` documentation from "current date" to "current date and time" (#647)
|
||||||
* Fix `duration_round` panic on rounding by `Duration::zero()` (#658)
|
* Fix `duration_round` panic on rounding by `Duration::zero()` (#658)
|
||||||
|
* Add optional rkyv support.
|
||||||
|
|
||||||
## 0.4.19
|
## 0.4.19
|
||||||
|
|
||||||
|
@ -39,6 +39,7 @@ rustc-serialize = { version = "0.3.20", optional = true }
|
|||||||
serde = { version = "1.0.99", default-features = false, optional = true }
|
serde = { version = "1.0.99", default-features = false, optional = true }
|
||||||
pure-rust-locales = { version = "0.5.2", optional = true }
|
pure-rust-locales = { version = "0.5.2", optional = true }
|
||||||
criterion = { version = "0.3", optional = true }
|
criterion = { version = "0.3", optional = true }
|
||||||
|
rkyv = {version = "0.7", optional = true}
|
||||||
|
|
||||||
[target.'cfg(all(target_arch = "wasm32", not(any(target_os = "emscripten", target_os = "wasi"))))'.dependencies]
|
[target.'cfg(all(target_arch = "wasm32", not(any(target_os = "emscripten", target_os = "wasi"))))'.dependencies]
|
||||||
wasm-bindgen = { version = "0.2", optional = true }
|
wasm-bindgen = { version = "0.2", optional = true }
|
||||||
|
@ -18,7 +18,8 @@ use crate::naive::{self, IsoWeek, NaiveDate, NaiveTime};
|
|||||||
use crate::offset::{TimeZone, Utc};
|
use crate::offset::{TimeZone, Utc};
|
||||||
use crate::DateTime;
|
use crate::DateTime;
|
||||||
use crate::{Datelike, Weekday};
|
use crate::{Datelike, Weekday};
|
||||||
|
#[cfg(feature = "rkyv")]
|
||||||
|
use rkyv::{Archive, Deserialize, Serialize};
|
||||||
/// ISO 8601 calendar date with time zone.
|
/// ISO 8601 calendar date with time zone.
|
||||||
///
|
///
|
||||||
/// You almost certainly want to be using a [`NaiveDate`] instead of this type.
|
/// You almost certainly want to be using a [`NaiveDate`] instead of this type.
|
||||||
@ -51,6 +52,7 @@ use crate::{Datelike, Weekday};
|
|||||||
/// so the local date and UTC date should be equal for most cases
|
/// so the local date and UTC date should be equal for most cases
|
||||||
/// even though the raw calculation between `NaiveDate` and `Duration` may not.
|
/// even though the raw calculation between `NaiveDate` and `Duration` may not.
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
|
#[cfg_attr(feature = "rkyv", derive(Archive, Deserialize, Serialize))]
|
||||||
pub struct Date<Tz: TimeZone> {
|
pub struct Date<Tz: TimeZone> {
|
||||||
date: NaiveDate,
|
date: NaiveDate,
|
||||||
offset: Tz::Offset,
|
offset: Tz::Offset,
|
||||||
|
@ -17,6 +17,8 @@ use crate::format::{parse, ParseError, ParseResult, Parsed, StrftimeItems};
|
|||||||
use crate::format::{Item, Numeric, Pad};
|
use crate::format::{Item, Numeric, Pad};
|
||||||
use crate::naive::{IsoWeek, NaiveDateTime, NaiveTime};
|
use crate::naive::{IsoWeek, NaiveDateTime, NaiveTime};
|
||||||
use crate::{Datelike, Weekday};
|
use crate::{Datelike, Weekday};
|
||||||
|
#[cfg(feature = "rkyv")]
|
||||||
|
use rkyv::{Archive, Deserialize, Serialize};
|
||||||
|
|
||||||
use super::internals::{self, DateImpl, Mdf, Of, YearFlags};
|
use super::internals::{self, DateImpl, Mdf, Of, YearFlags};
|
||||||
use super::isoweek;
|
use super::isoweek;
|
||||||
@ -96,6 +98,7 @@ const MAX_BITS: usize = 44;
|
|||||||
///
|
///
|
||||||
/// This is currently the internal format of Chrono's date types.
|
/// This is currently the internal format of Chrono's date types.
|
||||||
#[derive(PartialEq, Eq, Hash, PartialOrd, Ord, Copy, Clone)]
|
#[derive(PartialEq, Eq, Hash, PartialOrd, Ord, Copy, Clone)]
|
||||||
|
#[cfg_attr(feature = "rkyv", derive(Archive, Deserialize, Serialize))]
|
||||||
pub struct NaiveDate {
|
pub struct NaiveDate {
|
||||||
ymdf: DateImpl, // (year << 13) | of
|
ymdf: DateImpl, // (year << 13) | of
|
||||||
}
|
}
|
||||||
|
@ -20,6 +20,8 @@ use crate::naive::time::{MAX_TIME, MIN_TIME};
|
|||||||
use crate::naive::{IsoWeek, NaiveDate, NaiveTime};
|
use crate::naive::{IsoWeek, NaiveDate, NaiveTime};
|
||||||
use crate::oldtime::Duration as OldDuration;
|
use crate::oldtime::Duration as OldDuration;
|
||||||
use crate::{Datelike, Timelike, Weekday};
|
use crate::{Datelike, Timelike, Weekday};
|
||||||
|
#[cfg(feature = "rkyv")]
|
||||||
|
use rkyv::{Archive, Deserialize, Serialize};
|
||||||
|
|
||||||
#[cfg(feature = "rustc-serialize")]
|
#[cfg(feature = "rustc-serialize")]
|
||||||
pub(super) mod rustc_serialize;
|
pub(super) mod rustc_serialize;
|
||||||
@ -70,6 +72,7 @@ pub const MAX_DATETIME: NaiveDateTime = NaiveDateTime { date: MAX_DATE, time: MA
|
|||||||
/// assert_eq!(dt.num_seconds_from_midnight(), 33011);
|
/// assert_eq!(dt.num_seconds_from_midnight(), 33011);
|
||||||
/// ```
|
/// ```
|
||||||
#[derive(PartialEq, Eq, Hash, PartialOrd, Ord, Copy, Clone)]
|
#[derive(PartialEq, Eq, Hash, PartialOrd, Ord, Copy, Clone)]
|
||||||
|
#[cfg_attr(feature = "rkyv", derive(Archive, Deserialize, Serialize))]
|
||||||
pub struct NaiveDateTime {
|
pub struct NaiveDateTime {
|
||||||
date: NaiveDate,
|
date: NaiveDate,
|
||||||
time: NaiveTime,
|
time: NaiveTime,
|
||||||
|
@ -15,6 +15,8 @@ use crate::format::{parse, ParseError, ParseResult, Parsed, StrftimeItems};
|
|||||||
use crate::format::{Fixed, Item, Numeric, Pad};
|
use crate::format::{Fixed, Item, Numeric, Pad};
|
||||||
use crate::oldtime::Duration as OldDuration;
|
use crate::oldtime::Duration as OldDuration;
|
||||||
use crate::Timelike;
|
use crate::Timelike;
|
||||||
|
#[cfg(feature = "rkyv")]
|
||||||
|
use rkyv::{Archive, Deserialize, Serialize};
|
||||||
|
|
||||||
#[cfg(feature = "rustc-serialize")]
|
#[cfg(feature = "rustc-serialize")]
|
||||||
mod rustc_serialize;
|
mod rustc_serialize;
|
||||||
@ -189,6 +191,7 @@ pub(super) const MAX_TIME: NaiveTime =
|
|||||||
/// Since Chrono alone cannot determine any existence of leap seconds,
|
/// Since Chrono alone cannot determine any existence of leap seconds,
|
||||||
/// **there is absolutely no guarantee that the leap second read has actually happened**.
|
/// **there is absolutely no guarantee that the leap second read has actually happened**.
|
||||||
#[derive(PartialEq, Eq, Hash, PartialOrd, Ord, Copy, Clone)]
|
#[derive(PartialEq, Eq, Hash, PartialOrd, Ord, Copy, Clone)]
|
||||||
|
#[cfg_attr(feature = "rkyv", derive(Archive, Deserialize, Serialize))]
|
||||||
pub struct NaiveTime {
|
pub struct NaiveTime {
|
||||||
secs: u32,
|
secs: u32,
|
||||||
frac: u32,
|
frac: u32,
|
||||||
|
@ -12,6 +12,8 @@ use crate::naive::{NaiveDate, NaiveDateTime, NaiveTime};
|
|||||||
use crate::oldtime::Duration as OldDuration;
|
use crate::oldtime::Duration as OldDuration;
|
||||||
use crate::DateTime;
|
use crate::DateTime;
|
||||||
use crate::Timelike;
|
use crate::Timelike;
|
||||||
|
#[cfg(feature = "rkyv")]
|
||||||
|
use rkyv::{Archive, Deserialize, Serialize};
|
||||||
|
|
||||||
/// The time zone with fixed offset, from UTC-23:59:59 to UTC+23:59:59.
|
/// The time zone with fixed offset, from UTC-23:59:59 to UTC+23:59:59.
|
||||||
///
|
///
|
||||||
@ -20,6 +22,7 @@ use crate::Timelike;
|
|||||||
/// `DateTime<FixedOffset>` instances. See the [`east`](#method.east) and
|
/// `DateTime<FixedOffset>` instances. See the [`east`](#method.east) and
|
||||||
/// [`west`](#method.west) methods for examples.
|
/// [`west`](#method.west) methods for examples.
|
||||||
#[derive(PartialEq, Eq, Hash, Copy, Clone)]
|
#[derive(PartialEq, Eq, Hash, Copy, Clone)]
|
||||||
|
#[cfg_attr(feature = "rkyv", derive(Archive, Deserialize, Serialize))]
|
||||||
pub struct FixedOffset {
|
pub struct FixedOffset {
|
||||||
local_minus_utc: i32,
|
local_minus_utc: i32,
|
||||||
}
|
}
|
||||||
|
@ -14,6 +14,8 @@ use crate::naive::{NaiveDate, NaiveDateTime};
|
|||||||
use crate::{Date, DateTime};
|
use crate::{Date, DateTime};
|
||||||
#[cfg(not(all(target_arch = "wasm32", not(target_os = "wasi"), feature = "wasmbind")))]
|
#[cfg(not(all(target_arch = "wasm32", not(target_os = "wasi"), feature = "wasmbind")))]
|
||||||
use crate::{Datelike, Timelike};
|
use crate::{Datelike, Timelike};
|
||||||
|
#[cfg(feature = "rkyv")]
|
||||||
|
use rkyv::{Archive, Deserialize, Serialize};
|
||||||
|
|
||||||
/// Converts a `time::Tm` struct into the timezone-aware `DateTime`.
|
/// Converts a `time::Tm` struct into the timezone-aware `DateTime`.
|
||||||
/// This assumes that `time` is working correctly, i.e. any error is fatal.
|
/// This assumes that `time` is working correctly, i.e. any error is fatal.
|
||||||
@ -88,6 +90,7 @@ fn datetime_to_timespec(d: &NaiveDateTime, local: bool) -> sys::Timespec {
|
|||||||
/// let dt: DateTime<Local> = Local.timestamp(0, 0);
|
/// let dt: DateTime<Local> = Local.timestamp(0, 0);
|
||||||
/// ```
|
/// ```
|
||||||
#[derive(Copy, Clone, Debug)]
|
#[derive(Copy, Clone, Debug)]
|
||||||
|
#[cfg_attr(feature = "rkyv", derive(Archive, Deserialize, Serialize))]
|
||||||
pub struct Local;
|
pub struct Local;
|
||||||
|
|
||||||
impl Local {
|
impl Local {
|
||||||
|
@ -9,6 +9,8 @@ use super::{FixedOffset, LocalResult, Offset, TimeZone};
|
|||||||
use crate::naive::{NaiveDate, NaiveDateTime};
|
use crate::naive::{NaiveDate, NaiveDateTime};
|
||||||
#[cfg(feature = "clock")]
|
#[cfg(feature = "clock")]
|
||||||
use crate::{Date, DateTime};
|
use crate::{Date, DateTime};
|
||||||
|
#[cfg(feature = "rkyv")]
|
||||||
|
use rkyv::{Archive, Deserialize, Serialize};
|
||||||
#[cfg(all(
|
#[cfg(all(
|
||||||
feature = "clock",
|
feature = "clock",
|
||||||
not(all(target_arch = "wasm32", not(target_os = "wasi"), feature = "wasmbind"))
|
not(all(target_arch = "wasm32", not(target_os = "wasi"), feature = "wasmbind"))
|
||||||
@ -33,6 +35,7 @@ use std::time::{SystemTime, UNIX_EPOCH};
|
|||||||
/// assert_eq!(Utc.ymd(1970, 1, 1).and_hms(0, 1, 1), dt);
|
/// assert_eq!(Utc.ymd(1970, 1, 1).and_hms(0, 1, 1), dt);
|
||||||
/// ```
|
/// ```
|
||||||
#[derive(Copy, Clone, PartialEq, Eq)]
|
#[derive(Copy, Clone, PartialEq, Eq)]
|
||||||
|
#[cfg_attr(feature = "rkyv", derive(Archive, Deserialize, Serialize))]
|
||||||
pub struct Utc;
|
pub struct Utc;
|
||||||
|
|
||||||
#[cfg(feature = "clock")]
|
#[cfg(feature = "clock")]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user