Skip to content

Commit 266e4f6

Browse files
authored
Merge pull request #21 from jacovdbergh/main
Serialize time extent using to_rfc3339()
2 parents ea3c11b + f827324 commit 266e4f6

File tree

1 file changed

+21
-2
lines changed

1 file changed

+21
-2
lines changed

ogcapi-types/src/common/extent.rs

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use chrono::{DateTime, Utc};
2-
use serde::{Deserialize, Serialize};
2+
use serde::{ser::SerializeSeq, ser::Serializer, Deserialize, Serialize};
33
use serde_with::DisplayFromStr;
44

55
use crate::common::{Bbox, Crs};
@@ -43,7 +43,7 @@ impl Default for SpatialExtent {
4343
#[derive(Serialize, Deserialize, Debug, PartialEq, Eq, Clone)]
4444
pub struct TemporalExtent {
4545
#[serde(skip_serializing_if = "Vec::is_empty")]
46-
#[serde_as(as = "Vec<Vec<Option<DisplayFromStr>>>")]
46+
#[serde(serialize_with = "serialize_interval")]
4747
pub interval: Vec<Vec<Option<DateTime<Utc>>>>,
4848
#[serde(default = "default_trs")]
4949
pub trs: String,
@@ -58,6 +58,25 @@ impl Default for TemporalExtent {
5858
}
5959
}
6060

61+
fn serialize_interval<S>(
62+
interval: &Vec<Vec<Option<DateTime<Utc>>>>,
63+
serializer: S,
64+
) -> Result<S::Ok, S::Error>
65+
where
66+
S: Serializer,
67+
{
68+
let mut outer_seq = serializer.serialize_seq(Some(interval.len()))?;
69+
for inner_vec in interval {
70+
let serialized_inner_vec: Vec<_> = inner_vec
71+
.iter()
72+
.map(|item| item.as_ref().map(|dt| dt.to_rfc3339()))
73+
.collect();
74+
75+
outer_seq.serialize_element(&serialized_inner_vec)?;
76+
}
77+
outer_seq.end()
78+
}
79+
6180
fn default_trs() -> String {
6281
"http://www.opengis.net/def/uom/ISO-8601/0/Gregorian".to_string()
6382
}

0 commit comments

Comments
 (0)