Translate TOML datetime properly

This commit is contained in:
Laurenz 2023-06-09 15:40:27 +02:00
parent 7ece53ae0c
commit 3bedf8d0d1
3 changed files with 29 additions and 5 deletions

View File

@ -1,4 +1,5 @@
use typst::diag::{format_xml_like_error, FileError};
use typst::eval::Datetime;
use crate::prelude::*;
@ -268,8 +269,24 @@ fn convert_toml(value: toml::Value) -> Value {
.map(|(key, value)| (key.into(), convert_toml(value)))
.collect::<Dict>()
.into_value(),
// TODO: Make it use native date/time object(s) once it is implemented.
toml::Value::Datetime(v) => v.to_string().into_value(),
toml::Value::Datetime(v) => match (v.date, v.time) {
(None, None) => Value::None,
(Some(date), None) => {
Datetime::from_ymd(date.year as i32, date.month, date.day).into_value()
}
(None, Some(time)) => {
Datetime::from_hms(time.hour, time.minute, time.second).into_value()
}
(Some(date), Some(time)) => Datetime::from_ymd_hms(
date.year as i32,
date.month,
date.day,
time.hour,
time.minute,
time.second,
)
.into_value(),
},
}
}

View File

@ -16,9 +16,9 @@ pub enum Datetime {
/// Representation as a date.
Date(time::Date),
/// Representation as a time.
Datetime(time::PrimitiveDateTime),
/// Representation as a combination of date and time.
Time(time::Time),
/// Representation as a combination of date and time.
Datetime(time::PrimitiveDateTime),
}
impl Datetime {

View File

@ -48,11 +48,18 @@
#test(data.integer, 42)
#test(data.float, 3.14)
#test(data.boolean, true)
#test(data.date_time, "2023-02-01T15:38:57Z")
#test(data.array, (1, "string", 3.0, false))
#test(data.inline_table, ("first": "amazing", "second": "greater") )
#test(data.table.element, 5)
#test(data.table.others, (false, "indeed", 7))
#test(data.date_time, datetime(
year: 2023,
month: 2,
day: 1,
hour: 15,
minute: 38,
second: 57,
))
---
// Error: 7-18 failed to parse toml file: expected `.`, `=`, index 15-15