Support Jiff's "friendly" format as input for jiff::Duration
GraphQL scalar
This commit is contained in:
parent
497c839f30
commit
b75e1aa55a
2 changed files with 77 additions and 3 deletions
|
@ -53,7 +53,7 @@ fnv = "1.0.5"
|
||||||
futures = { version = "0.3.22", features = ["alloc"], default-features = false }
|
futures = { version = "0.3.22", features = ["alloc"], default-features = false }
|
||||||
graphql-parser = { version = "0.4", optional = true }
|
graphql-parser = { version = "0.4", optional = true }
|
||||||
indexmap = { version = "2.0", features = ["serde"] }
|
indexmap = { version = "2.0", features = ["serde"] }
|
||||||
jiff = { version = "0.1.5", features = ["std"], default-features = false, optional = true }
|
jiff = { version = "0.1.16", features = ["std"], default-features = false, optional = true }
|
||||||
juniper_codegen = { version = "0.16.0", path = "../juniper_codegen" }
|
juniper_codegen = { version = "0.16.0", path = "../juniper_codegen" }
|
||||||
rust_decimal = { version = "1.20", default-features = false, optional = true }
|
rust_decimal = { version = "1.20", default-features = false, optional = true }
|
||||||
ryu = { version = "1.0", optional = true }
|
ryu = { version = "1.0", optional = true }
|
||||||
|
@ -78,7 +78,7 @@ void = { version = "1.0.2", optional = true }
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
bencher = "0.1.2"
|
bencher = "0.1.2"
|
||||||
chrono = { version = "0.4.30", features = ["alloc"], default-features = false }
|
chrono = { version = "0.4.30", features = ["alloc"], default-features = false }
|
||||||
jiff = { version = "0.1.5", features = ["tzdb-bundle-always"], default-features = false }
|
jiff = { version = "0.1.16", features = ["tzdb-bundle-always"], default-features = false }
|
||||||
pretty_assertions = "1.0.0"
|
pretty_assertions = "1.0.0"
|
||||||
serde_json = "1.0.18"
|
serde_json = "1.0.18"
|
||||||
serial_test = "3.0"
|
serial_test = "3.0"
|
||||||
|
|
|
@ -1170,6 +1170,81 @@ mod duration_test {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn parses_jiff_friendly_input() {
|
||||||
|
for (raw, expected) in [
|
||||||
|
("40d", 40.days()),
|
||||||
|
("40 days", 40.days()),
|
||||||
|
("1y1d", 1.year().days(1)),
|
||||||
|
("1yr 1d", 1.year().days(1)),
|
||||||
|
("3d4h59m", 3.days().hours(4).minutes(59)),
|
||||||
|
("3 days, 4 hours, 59 minutes", 3.days().hours(4).minutes(59)),
|
||||||
|
("3d 4h 59m", 3.days().hours(4).minutes(59)),
|
||||||
|
("2h30m", 2.hours().minutes(30)),
|
||||||
|
("2h 30m", 2.hours().minutes(30)),
|
||||||
|
("1mo", 1.month()),
|
||||||
|
("1w", 1.week()),
|
||||||
|
("1 week", 1.week()),
|
||||||
|
("1w4d", 1.week().days(4)),
|
||||||
|
("1 wk 4 days", 1.week().days(4)),
|
||||||
|
("1m", 1.minute()),
|
||||||
|
("0.0021s", 2.milliseconds().microseconds(100)),
|
||||||
|
("0s", 0.seconds()),
|
||||||
|
("0d", 0.seconds()),
|
||||||
|
("0 days", 0.seconds()),
|
||||||
|
(
|
||||||
|
"1y1mo1d1h1m1.1s",
|
||||||
|
1.year()
|
||||||
|
.months(1)
|
||||||
|
.days(1)
|
||||||
|
.hours(1)
|
||||||
|
.minutes(1)
|
||||||
|
.seconds(1)
|
||||||
|
.milliseconds(100),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"1yr 1mo 1day 1hr 1min 1.1sec",
|
||||||
|
1.year()
|
||||||
|
.months(1)
|
||||||
|
.days(1)
|
||||||
|
.hours(1)
|
||||||
|
.minutes(1)
|
||||||
|
.seconds(1)
|
||||||
|
.milliseconds(100),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"1 year, 1 month, 1 day, 1 hour, 1 minute 1.1 seconds",
|
||||||
|
1.year()
|
||||||
|
.months(1)
|
||||||
|
.days(1)
|
||||||
|
.hours(1)
|
||||||
|
.minutes(1)
|
||||||
|
.seconds(1)
|
||||||
|
.milliseconds(100),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"1 year, 1 month, 1 day, 01:01:01.1",
|
||||||
|
1.year()
|
||||||
|
.months(1)
|
||||||
|
.days(1)
|
||||||
|
.hours(1)
|
||||||
|
.minutes(1)
|
||||||
|
.seconds(1)
|
||||||
|
.milliseconds(100),
|
||||||
|
),
|
||||||
|
] {
|
||||||
|
let input: InputValue = graphql_input_value!((raw));
|
||||||
|
let parsed = Duration::from_input_value(&input);
|
||||||
|
|
||||||
|
assert!(
|
||||||
|
parsed.is_ok(),
|
||||||
|
"failed to parse `{raw}`: {:?}",
|
||||||
|
parsed.unwrap_err(),
|
||||||
|
);
|
||||||
|
assert_eq!(parsed.unwrap(), expected, "input: {raw}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn fails_on_invalid_input() {
|
fn fails_on_invalid_input() {
|
||||||
for input in [
|
for input in [
|
||||||
|
@ -1178,7 +1253,6 @@ mod duration_test {
|
||||||
graphql_input_value!("P0"),
|
graphql_input_value!("P0"),
|
||||||
graphql_input_value!("PT"),
|
graphql_input_value!("PT"),
|
||||||
graphql_input_value!("PTS"),
|
graphql_input_value!("PTS"),
|
||||||
graphql_input_value!("56:34:22"),
|
|
||||||
graphql_input_value!("1996-12-19"),
|
graphql_input_value!("1996-12-19"),
|
||||||
graphql_input_value!("1996-12-19T14:23:43"),
|
graphql_input_value!("1996-12-19T14:23:43"),
|
||||||
graphql_input_value!("1996-12-19T14:23:43Z"),
|
graphql_input_value!("1996-12-19T14:23:43Z"),
|
||||||
|
|
Loading…
Reference in a new issue