Revision control
Copy as Markdown
Other Tools
use serde_test::{
Compact, Configure, Readable, Token, assert_de_tokens, assert_de_tokens_error, assert_tokens,
};
use time::macros::{date, datetime, offset, time};
use time::{Date, Duration, Month, OffsetDateTime, PrimitiveDateTime, Time, UtcOffset, Weekday};
mod error_conditions;
mod iso8601;
mod json;
mod macros;
mod rfc2822;
mod rfc3339;
mod timestamps;
#[test]
fn time() {
assert_tokens(
&Time::MIDNIGHT.compact(),
&[
Token::Tuple { len: 4 },
Token::U8(0),
Token::U8(0),
Token::U8(0),
Token::U32(0),
Token::TupleEnd,
],
);
assert_tokens(
&time!(23:58:59.123_456_789).compact(),
&[
Token::Tuple { len: 4 },
Token::U8(23),
Token::U8(58),
Token::U8(59),
Token::U32(123_456_789),
Token::TupleEnd,
],
);
assert_tokens(
&Time::MIDNIGHT.readable(),
&[Token::BorrowedStr("00:00:00.0")],
);
assert_tokens(
&time!(23:58:59.123_456_789).readable(),
&[Token::BorrowedStr("23:58:59.123456789")],
);
}
#[test]
fn time_error() {
assert_de_tokens_error::<Compact<Time>>(
&[
Token::Tuple { len: 4 },
Token::U8(24),
Token::U8(0),
Token::U8(0),
Token::U32(0),
Token::TupleEnd,
],
"invalid hour, expected an in-range value",
);
assert_de_tokens_error::<Readable<Time>>(
&[Token::BorrowedStr("24:00:00.0")],
"the 'hour' component could not be parsed",
);
assert_de_tokens_error::<Readable<Time>>(
&[Token::BorrowedStr("23-00:00.0")],
"a character literal was not valid",
);
assert_de_tokens_error::<Readable<Time>>(
&[Token::BorrowedStr("0:00:00.0")],
"the 'hour' component could not be parsed",
);
assert_de_tokens_error::<Readable<Time>>(
&[Token::BorrowedStr("00:00:00.0x")],
"unexpected trailing characters; the end of input was expected",
);
assert_de_tokens_error::<Readable<Time>>(
&[Token::Bool(false)],
"invalid type: boolean `false`, expected a `Time`",
);
assert_de_tokens_error::<Compact<Time>>(
&[Token::Bool(false)],
"invalid type: boolean `false`, expected a `Time`",
);
}
#[test]
fn time_partial() {
assert_de_tokens_error::<Compact<Time>>(
&[Token::Tuple { len: 4 }, Token::TupleEnd],
"expected hour",
);
assert_de_tokens_error::<Compact<Time>>(
&[Token::Tuple { len: 4 }, Token::U8(0), Token::TupleEnd],
"expected minute",
);
assert_de_tokens_error::<Compact<Time>>(
&[
Token::Tuple { len: 4 },
Token::U8(0),
Token::U8(0),
Token::TupleEnd,
],
"expected second",
);
assert_de_tokens_error::<Compact<Time>>(
&[
Token::Tuple { len: 4 },
Token::U8(0),
Token::U8(0),
Token::U8(0),
Token::TupleEnd,
],
"expected nanosecond",
);
assert_de_tokens_error::<Readable<Time>>(
&[Token::Tuple { len: 4 }, Token::TupleEnd],
"expected hour",
);
assert_de_tokens_error::<Readable<Time>>(
&[Token::Tuple { len: 4 }, Token::U8(0), Token::TupleEnd],
"expected minute",
);
assert_de_tokens_error::<Readable<Time>>(
&[
Token::Tuple { len: 4 },
Token::U8(0),
Token::U8(0),
Token::TupleEnd,
],
"expected second",
);
assert_de_tokens_error::<Readable<Time>>(
&[
Token::Tuple { len: 4 },
Token::U8(0),
Token::U8(0),
Token::U8(0),
Token::TupleEnd,
],
"expected nanosecond",
);
}
#[test]
fn date() {
assert_tokens(
&date!(-9999-001).compact(),
&[
Token::Tuple { len: 2 },
Token::I32(-9999),
Token::U16(1),
Token::TupleEnd,
],
);
assert_tokens(
&date!(+9999-365).compact(),
&[
Token::Tuple { len: 2 },
Token::I32(9999),
Token::U16(365),
Token::TupleEnd,
],
);
assert_tokens(
&date!(-9999-001).readable(),
&[Token::BorrowedStr("-9999-01-01")],
);
assert_tokens(
&date!(+9999-365).readable(),
&[Token::BorrowedStr("9999-12-31")],
);
}
#[test]
fn date_error() {
assert_de_tokens_error::<Readable<Date>>(
&[Token::Bool(false)],
"invalid type: boolean `false`, expected a `Date`",
);
assert_de_tokens_error::<Compact<Date>>(
&[Token::Bool(false)],
"invalid type: boolean `false`, expected a `Date`",
);
}
#[test]
fn date_partial() {
assert_de_tokens_error::<Compact<Date>>(
&[Token::Tuple { len: 2 }, Token::TupleEnd],
"expected year",
);
assert_de_tokens_error::<Compact<Date>>(
&[Token::Tuple { len: 2 }, Token::I32(9999), Token::TupleEnd],
"expected day of year",
);
assert_de_tokens_error::<Readable<Date>>(
&[Token::Tuple { len: 2 }, Token::TupleEnd],
"expected year",
);
assert_de_tokens_error::<Readable<Date>>(
&[Token::Tuple { len: 2 }, Token::I32(9999), Token::TupleEnd],
"expected day of year",
);
}
#[test]
fn primitive_date_time() {
assert_tokens(
&datetime!(-9999-001 0:00).compact(),
&[
Token::Tuple { len: 6 },
Token::I32(-9999),
Token::U16(1),
Token::U8(0),
Token::U8(0),
Token::U8(0),
Token::U32(0),
Token::TupleEnd,
],
);
assert_tokens(
&datetime!(+9999-365 23:58:59.123_456_789).compact(),
&[
Token::Tuple { len: 6 },
Token::I32(9999),
Token::U16(365),
Token::U8(23),
Token::U8(58),
Token::U8(59),
Token::U32(123_456_789),
Token::TupleEnd,
],
);
assert_tokens(
&datetime!(-9999-001 0:00).readable(),
&[Token::BorrowedStr("-9999-01-01 00:00:00.0")],
);
assert_tokens(
&datetime!(+9999-365 23:58:59.123_456_789).readable(),
&[Token::BorrowedStr("9999-12-31 23:58:59.123456789")],
);
}
#[test]
fn primitive_date_time_error() {
assert_de_tokens_error::<Readable<PrimitiveDateTime>>(
&[Token::Bool(false)],
"invalid type: boolean `false`, expected a `PrimitiveDateTime`",
);
assert_de_tokens_error::<Compact<PrimitiveDateTime>>(
&[Token::Bool(false)],
"invalid type: boolean `false`, expected a `PrimitiveDateTime`",
);
assert_de_tokens_error::<Compact<PrimitiveDateTime>>(
&[
Token::Tuple { len: 6 },
Token::I32(2021),
Token::U16(366),
Token::U8(0),
Token::U8(0),
Token::U8(0),
Token::U32(0),
Token::TupleEnd,
],
"invalid ordinal, expected an in-range value",
);
assert_de_tokens_error::<Compact<PrimitiveDateTime>>(
&[
Token::Tuple { len: 6 },
Token::I32(2021),
Token::U16(1),
Token::U8(24),
Token::U8(0),
Token::U8(0),
Token::U32(0),
Token::TupleEnd,
],
"invalid hour, expected an in-range value",
);
}
#[test]
fn primitive_date_time_partial() {
assert_de_tokens_error::<Compact<PrimitiveDateTime>>(
&[Token::Tuple { len: 6 }, Token::TupleEnd],
"expected year",
);
assert_de_tokens_error::<Compact<PrimitiveDateTime>>(
&[Token::Tuple { len: 6 }, Token::I32(9999), Token::TupleEnd],
"expected day of year",
);
assert_de_tokens_error::<Compact<PrimitiveDateTime>>(
&[
Token::Tuple { len: 6 },
Token::I32(9999),
Token::U16(365),
Token::TupleEnd,
],
"expected hour",
);
assert_de_tokens_error::<Compact<PrimitiveDateTime>>(
&[
Token::Tuple { len: 6 },
Token::I32(9999),
Token::U16(365),
Token::U8(23),
Token::TupleEnd,
],
"expected minute",
);
assert_de_tokens_error::<Compact<PrimitiveDateTime>>(
&[
Token::Tuple { len: 6 },
Token::I32(9999),
Token::U16(365),
Token::U8(23),
Token::U8(58),
Token::TupleEnd,
],
"expected second",
);
assert_de_tokens_error::<Compact<PrimitiveDateTime>>(
&[
Token::Tuple { len: 6 },
Token::I32(9999),
Token::U16(365),
Token::U8(23),
Token::U8(58),
Token::U8(59),
Token::TupleEnd,
],
"expected nanosecond",
);
assert_de_tokens_error::<Readable<PrimitiveDateTime>>(
&[Token::Tuple { len: 6 }, Token::TupleEnd],
"expected year",
);
assert_de_tokens_error::<Readable<PrimitiveDateTime>>(
&[Token::Tuple { len: 6 }, Token::I32(9999), Token::TupleEnd],
"expected day of year",
);
assert_de_tokens_error::<Readable<PrimitiveDateTime>>(
&[
Token::Tuple { len: 6 },
Token::I32(9999),
Token::U16(365),
Token::TupleEnd,
],
"expected hour",
);
assert_de_tokens_error::<Readable<PrimitiveDateTime>>(
&[
Token::Tuple { len: 6 },
Token::I32(9999),
Token::U16(365),
Token::U8(23),
Token::TupleEnd,
],
"expected minute",
);
assert_de_tokens_error::<Readable<PrimitiveDateTime>>(
&[
Token::Tuple { len: 6 },
Token::I32(9999),
Token::U16(365),
Token::U8(23),
Token::U8(58),
Token::TupleEnd,
],
"expected second",
);
assert_de_tokens_error::<Readable<PrimitiveDateTime>>(
&[
Token::Tuple { len: 6 },
Token::I32(9999),
Token::U16(365),
Token::U8(23),
Token::U8(58),
Token::U8(59),
Token::TupleEnd,
],
"expected nanosecond",
);
}
#[test]
fn offset_date_time() {
assert_tokens(
&datetime!(-9999-001 0:00 UTC)
.to_offset(offset!(+23:58:59))
.compact(),
&[
Token::Tuple { len: 9 },
Token::I32(-9999),
Token::U16(1),
Token::U8(23),
Token::U8(58),
Token::U8(59),
Token::U32(0),
Token::I8(23),
Token::I8(58),
Token::I8(59),
Token::TupleEnd,
],
);
assert_tokens(
&datetime!(+9999-365 23:58:59.123_456_789 UTC)
.to_offset(offset!(-23:58:59))
.compact(),
&[
Token::Tuple { len: 9 },
Token::I32(9999),
Token::U16(365),
Token::U8(0),
Token::U8(0),
Token::U8(0),
Token::U32(123_456_789),
Token::I8(-23),
Token::I8(-58),
Token::I8(-59),
Token::TupleEnd,
],
);
assert_tokens(
&datetime!(-9999-001 0:00 UTC)
.to_offset(offset!(+23:58:59))
.readable(),
&[Token::BorrowedStr("-9999-01-01 23:58:59.0 +23:58:59")],
);
assert_tokens(
&datetime!(+9999-365 23:58:59.123_456_789 UTC)
.to_offset(offset!(-23:58:59))
.readable(),
&[Token::BorrowedStr(
"9999-12-31 00:00:00.123456789 -23:58:59",
)],
);
}
#[test]
fn offset_date_time_error() {
assert_de_tokens_error::<Readable<OffsetDateTime>>(
&[Token::Bool(false)],
"invalid type: boolean `false`, expected an `OffsetDateTime`",
);
assert_de_tokens_error::<Compact<OffsetDateTime>>(
&[Token::Bool(false)],
"invalid type: boolean `false`, expected an `OffsetDateTime`",
);
assert_de_tokens_error::<Compact<OffsetDateTime>>(
&[
Token::Tuple { len: 9 },
Token::I32(2021),
Token::U16(366),
Token::U8(0),
Token::U8(0),
Token::U8(0),
Token::U32(0),
Token::I8(0),
Token::I8(0),
Token::I8(0),
Token::TupleEnd,
],
"invalid ordinal, expected an in-range value",
);
assert_de_tokens_error::<Compact<OffsetDateTime>>(
&[
Token::Tuple { len: 9 },
Token::I32(2021),
Token::U16(1),
Token::U8(24),
Token::U8(0),
Token::U8(0),
Token::U32(0),
Token::I8(0),
Token::I8(0),
Token::I8(0),
Token::TupleEnd,
],
"invalid hour, expected an in-range value",
);
assert_de_tokens_error::<Compact<OffsetDateTime>>(
&[
Token::Tuple { len: 9 },
Token::I32(2021),
Token::U16(1),
Token::U8(0),
Token::U8(0),
Token::U8(0),
Token::U32(0),
Token::I8(26),
Token::I8(0),
Token::I8(0),
Token::TupleEnd,
],
"invalid offset hour, expected an in-range value",
);
// the Deserialize impl does not recognize leap second times as valid
assert_de_tokens_error::<Compact<OffsetDateTime>>(
&[
Token::Tuple { len: 9 },
Token::I32(2021),
Token::U16(365),
Token::U8(23),
Token::U8(59),
Token::U8(60),
Token::U32(0),
Token::I8(0),
Token::I8(0),
Token::I8(0),
Token::TupleEnd,
],
"invalid second, expected an in-range value",
);
assert_de_tokens_error::<Readable<OffsetDateTime>>(
&[Token::BorrowedStr("2021-12-31 23:59:60.0 +00:00:00")],
"second was not in range",
);
}
#[test]
fn offset_date_time_partial() {
assert_de_tokens_error::<Compact<OffsetDateTime>>(
&[Token::Tuple { len: 9 }, Token::TupleEnd],
"expected year",
);
assert_de_tokens_error::<Compact<OffsetDateTime>>(
&[Token::Tuple { len: 9 }, Token::I32(9999), Token::TupleEnd],
"expected day of year",
);
assert_de_tokens_error::<Compact<OffsetDateTime>>(
&[
Token::Tuple { len: 9 },
Token::I32(9999),
Token::U16(365),
Token::TupleEnd,
],
"expected hour",
);
assert_de_tokens_error::<Compact<OffsetDateTime>>(
&[
Token::Tuple { len: 9 },
Token::I32(9999),
Token::U16(365),
Token::U8(0),
Token::TupleEnd,
],
"expected minute",
);
assert_de_tokens_error::<Compact<OffsetDateTime>>(
&[
Token::Tuple { len: 9 },
Token::I32(9999),
Token::U16(365),
Token::U8(0),
Token::U8(0),
Token::TupleEnd,
],
"expected second",
);
assert_de_tokens_error::<Compact<OffsetDateTime>>(
&[
Token::Tuple { len: 9 },
Token::I32(9999),
Token::U16(365),
Token::U8(0),
Token::U8(0),
Token::U8(0),
Token::TupleEnd,
],
"expected nanosecond",
);
assert_de_tokens_error::<Compact<OffsetDateTime>>(
&[
Token::Tuple { len: 9 },
Token::I32(9999),
Token::U16(365),
Token::U8(0),
Token::U8(0),
Token::U8(0),
Token::U32(123_456_789),
Token::TupleEnd,
],
"expected offset hours",
);
assert_de_tokens_error::<Compact<OffsetDateTime>>(
&[
Token::Tuple { len: 9 },
Token::I32(9999),
Token::U16(365),
Token::U8(0),
Token::U8(0),
Token::U8(0),
Token::U32(123_456_789),
Token::I8(-23),
Token::TupleEnd,
],
"expected offset minutes",
);
assert_de_tokens_error::<Compact<OffsetDateTime>>(
&[
Token::Tuple { len: 9 },
Token::I32(9999),
Token::U16(365),
Token::U8(0),
Token::U8(0),
Token::U8(0),
Token::U32(123_456_789),
Token::I8(-23),
Token::I8(-58),
Token::TupleEnd,
],
"expected offset seconds",
);
assert_de_tokens_error::<Readable<OffsetDateTime>>(
&[Token::Tuple { len: 9 }, Token::TupleEnd],
"expected year",
);
assert_de_tokens_error::<Readable<OffsetDateTime>>(
&[Token::Tuple { len: 9 }, Token::I32(9999), Token::TupleEnd],
"expected day of year",
);
assert_de_tokens_error::<Readable<OffsetDateTime>>(
&[
Token::Tuple { len: 9 },
Token::I32(9999),
Token::U16(365),
Token::TupleEnd,
],
"expected hour",
);
assert_de_tokens_error::<Readable<OffsetDateTime>>(
&[
Token::Tuple { len: 9 },
Token::I32(9999),
Token::U16(365),
Token::U8(0),
Token::TupleEnd,
],
"expected minute",
);
assert_de_tokens_error::<Readable<OffsetDateTime>>(
&[
Token::Tuple { len: 9 },
Token::I32(9999),
Token::U16(365),
Token::U8(0),
Token::U8(0),
Token::TupleEnd,
],
"expected second",
);
assert_de_tokens_error::<Readable<OffsetDateTime>>(
&[
Token::Tuple { len: 9 },
Token::I32(9999),
Token::U16(365),
Token::U8(0),
Token::U8(0),
Token::U8(0),
Token::TupleEnd,
],
"expected nanosecond",
);
assert_de_tokens_error::<Readable<OffsetDateTime>>(
&[
Token::Tuple { len: 9 },
Token::I32(9999),
Token::U16(365),
Token::U8(0),
Token::U8(0),
Token::U8(0),
Token::U32(123_456_789),
Token::TupleEnd,
],
"expected offset hours",
);
assert_de_tokens_error::<Readable<OffsetDateTime>>(
&[
Token::Tuple { len: 9 },
Token::I32(9999),
Token::U16(365),
Token::U8(0),
Token::U8(0),
Token::U8(0),
Token::U32(123_456_789),
Token::I8(-23),
Token::TupleEnd,
],
"expected offset minutes",
);
assert_de_tokens_error::<Readable<OffsetDateTime>>(
&[
Token::Tuple { len: 9 },
Token::I32(9999),
Token::U16(365),
Token::U8(0),
Token::U8(0),
Token::U8(0),
Token::U32(123_456_789),
Token::I8(-23),
Token::I8(-58),
Token::TupleEnd,
],
"expected offset seconds",
);
}
#[test]
fn utc_offset() {
assert_tokens(
&offset!(-23:58:59).compact(),
&[
Token::Tuple { len: 3 },
Token::I8(-23),
Token::I8(-58),
Token::I8(-59),
Token::TupleEnd,
],
);
assert_tokens(
&offset!(+23:58:59).compact(),
&[
Token::Tuple { len: 3 },
Token::I8(23),
Token::I8(58),
Token::I8(59),
Token::TupleEnd,
],
);
assert_tokens(
&offset!(-23:58:59).readable(),
&[Token::BorrowedStr("-23:58:59")],
);
assert_tokens(
&offset!(+23:58:59).readable(),
&[Token::BorrowedStr("+23:58:59")],
);
}
#[test]
fn utc_offset_error() {
assert_de_tokens_error::<Readable<UtcOffset>>(
&[Token::Bool(false)],
"invalid type: boolean `false`, expected a `UtcOffset`",
);
assert_de_tokens_error::<Compact<UtcOffset>>(
&[Token::Bool(false)],
"invalid type: boolean `false`, expected a `UtcOffset`",
);
assert_de_tokens_error::<Compact<UtcOffset>>(
&[
Token::Tuple { len: 3 },
Token::I8(26),
Token::I8(0),
Token::I8(0),
Token::TupleEnd,
],
"invalid offset hour, expected an in-range value",
);
}
#[test]
fn utc_offset_partial() {
assert_de_tokens_error::<Compact<UtcOffset>>(
&[Token::Tuple { len: 0 }, Token::TupleEnd],
"expected offset hours",
);
assert_de_tokens_error::<Readable<UtcOffset>>(
&[Token::Tuple { len: 0 }, Token::TupleEnd],
"expected offset hours",
);
let value = offset!(+23);
assert_de_tokens::<Compact<UtcOffset>>(
&value.compact(),
&[Token::Tuple { len: 1 }, Token::I8(23), Token::TupleEnd],
);
let value = offset!(+23);
assert_de_tokens::<Readable<UtcOffset>>(
&value.readable(),
&[Token::Tuple { len: 1 }, Token::I8(23), Token::TupleEnd],
);
let value = offset!(+23:58);
assert_de_tokens::<Compact<UtcOffset>>(
&value.compact(),
&[
Token::Tuple { len: 2 },
Token::I8(23),
Token::I8(58),
Token::TupleEnd,
],
);
let value = offset!(+23:58);
assert_de_tokens::<Readable<UtcOffset>>(
&value.readable(),
&[
Token::Tuple { len: 2 },
Token::I8(23),
Token::I8(58),
Token::TupleEnd,
],
);
}
#[test]
fn duration() {
assert_tokens(
&Duration::MIN.compact(),
&[
Token::Tuple { len: 2 },
Token::I64(i64::MIN),
Token::I32(-999_999_999),
Token::TupleEnd,
],
);
assert_tokens(
&Duration::MAX.compact(),
&[
Token::Tuple { len: 2 },
Token::I64(i64::MAX),
Token::I32(999_999_999),
Token::TupleEnd,
],
);
assert_tokens(
&Duration::MIN.readable(),
&[Token::BorrowedStr("-9223372036854775808.999999999")],
);
assert_tokens(
&Duration::MAX.readable(),
&[Token::BorrowedStr("9223372036854775807.999999999")],
);
assert_tokens(
&Duration::ZERO.readable(),
&[Token::BorrowedStr("0.000000000")],
);
assert_tokens(
&Duration::nanoseconds(123).readable(),
&[Token::BorrowedStr("0.000000123")],
);
assert_tokens(
&Duration::nanoseconds(-123).readable(),
&[Token::BorrowedStr("-0.000000123")],
);
}
#[test]
fn duration_error() {
assert_de_tokens_error::<Readable<Duration>>(
&[Token::BorrowedStr("x")],
r#"invalid value: string "x", expected a decimal point"#,
);
assert_de_tokens_error::<Readable<Duration>>(
&[Token::BorrowedStr("x.0")],
r#"invalid value: string "x", expected seconds"#,
);
assert_de_tokens_error::<Readable<Duration>>(
&[Token::BorrowedStr("0.x")],
r#"invalid value: string "x", expected nanoseconds"#,
);
assert_de_tokens_error::<Readable<Duration>>(
&[Token::Bool(false)],
"invalid type: boolean `false`, expected a `Duration`",
);
assert_de_tokens_error::<Compact<Duration>>(
&[Token::Bool(false)],
"invalid type: boolean `false`, expected a `Duration`",
);
}
#[test]
fn duration_partial() {
assert_de_tokens_error::<Compact<Duration>>(
&[Token::Tuple { len: 2 }, Token::TupleEnd],
"expected seconds",
);
assert_de_tokens_error::<Compact<Duration>>(
&[
Token::Tuple { len: 2 },
Token::I64(i64::MAX),
Token::TupleEnd,
],
"expected nanoseconds",
);
assert_de_tokens_error::<Readable<Duration>>(
&[Token::Tuple { len: 2 }, Token::TupleEnd],
"expected seconds",
);
assert_de_tokens_error::<Readable<Duration>>(
&[
Token::Tuple { len: 2 },
Token::I64(i64::MAX),
Token::TupleEnd,
],
"expected nanoseconds",
);
}
#[test]
fn weekday() {
use Weekday::*;
assert_tokens(&Monday.compact(), &[Token::U8(1)]);
assert_tokens(&Tuesday.compact(), &[Token::U8(2)]);
assert_tokens(&Wednesday.compact(), &[Token::U8(3)]);
assert_tokens(&Thursday.compact(), &[Token::U8(4)]);
assert_tokens(&Friday.compact(), &[Token::U8(5)]);
assert_tokens(&Saturday.compact(), &[Token::U8(6)]);
assert_tokens(&Sunday.compact(), &[Token::U8(7)]);
assert_tokens(&Monday.readable(), &[Token::BorrowedStr("Monday")]);
assert_tokens(&Tuesday.readable(), &[Token::BorrowedStr("Tuesday")]);
assert_tokens(&Wednesday.readable(), &[Token::BorrowedStr("Wednesday")]);
assert_tokens(&Thursday.readable(), &[Token::BorrowedStr("Thursday")]);
assert_tokens(&Friday.readable(), &[Token::BorrowedStr("Friday")]);
assert_tokens(&Saturday.readable(), &[Token::BorrowedStr("Saturday")]);
assert_tokens(&Sunday.readable(), &[Token::BorrowedStr("Sunday")]);
}
#[test]
fn weekday_error() {
assert_de_tokens_error::<Compact<Weekday>>(
&[Token::U8(0)],
"invalid value: integer `0`, expected a value in the range 1..=7",
);
assert_de_tokens_error::<Readable<Weekday>>(
&[Token::BorrowedStr("NotADay")],
r#"invalid value: string "NotADay", expected a `Weekday`"#,
);
assert_de_tokens_error::<Readable<Weekday>>(
&[Token::Bool(false)],
"invalid type: boolean `false`, expected a `Weekday`",
);
assert_de_tokens_error::<Compact<Weekday>>(
&[Token::Bool(false)],
"invalid type: boolean `false`, expected a `Weekday`",
);
}
#[test]
fn month() {
use Month::*;
assert_tokens(&January.compact(), &[Token::U8(1)]);
assert_tokens(&February.compact(), &[Token::U8(2)]);
assert_tokens(&March.compact(), &[Token::U8(3)]);
assert_tokens(&April.compact(), &[Token::U8(4)]);
assert_tokens(&May.compact(), &[Token::U8(5)]);
assert_tokens(&June.compact(), &[Token::U8(6)]);
assert_tokens(&July.compact(), &[Token::U8(7)]);
assert_tokens(&August.compact(), &[Token::U8(8)]);
assert_tokens(&September.compact(), &[Token::U8(9)]);
assert_tokens(&October.compact(), &[Token::U8(10)]);
assert_tokens(&November.compact(), &[Token::U8(11)]);
assert_tokens(&December.compact(), &[Token::U8(12)]);
assert_tokens(&January.readable(), &[Token::BorrowedStr("January")]);
assert_tokens(&February.readable(), &[Token::BorrowedStr("February")]);
assert_tokens(&March.readable(), &[Token::BorrowedStr("March")]);
assert_tokens(&April.readable(), &[Token::BorrowedStr("April")]);
assert_tokens(&May.readable(), &[Token::BorrowedStr("May")]);
assert_tokens(&June.readable(), &[Token::BorrowedStr("June")]);
assert_tokens(&July.readable(), &[Token::BorrowedStr("July")]);
assert_tokens(&August.readable(), &[Token::BorrowedStr("August")]);
assert_tokens(&September.readable(), &[Token::BorrowedStr("September")]);
assert_tokens(&October.readable(), &[Token::BorrowedStr("October")]);
assert_tokens(&November.readable(), &[Token::BorrowedStr("November")]);
assert_tokens(&December.readable(), &[Token::BorrowedStr("December")]);
}
#[test]
fn month_error() {
assert_de_tokens_error::<Compact<Month>>(
&[Token::U8(0)],
"invalid value: integer `0`, expected a value in the range 1..=12",
);
assert_de_tokens_error::<Readable<Month>>(
&[Token::BorrowedStr("NotAMonth")],
r#"invalid value: string "NotAMonth", expected a `Month`"#,
);
assert_de_tokens_error::<Readable<Month>>(
&[Token::Bool(false)],
"invalid type: boolean `false`, expected a `Month`",
);
assert_de_tokens_error::<Compact<Month>>(
&[Token::Bool(false)],
"invalid type: boolean `false`, expected a `Month`",
);
}