From 0dfee5bde0bbeaf7278e5af9a31072618d438116 Mon Sep 17 00:00:00 2001 From: "jacovdbergh@gmail.com" Date: Tue, 26 Nov 2024 11:23:35 +0200 Subject: [PATCH 1/2] serialize time extent using to_rfc3339() --- ogcapi-types/src/common/extent.rs | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/ogcapi-types/src/common/extent.rs b/ogcapi-types/src/common/extent.rs index 2d09f54..87ce4b1 100644 --- a/ogcapi-types/src/common/extent.rs +++ b/ogcapi-types/src/common/extent.rs @@ -1,5 +1,5 @@ use chrono::{DateTime, Utc}; -use serde::{Deserialize, Serialize}; +use serde::{ser::SerializeSeq, ser::Serializer, Deserialize, Serialize}; use serde_with::DisplayFromStr; use crate::common::{Bbox, Crs}; @@ -43,7 +43,7 @@ impl Default for SpatialExtent { #[derive(Serialize, Deserialize, Debug, PartialEq, Eq, Clone)] pub struct TemporalExtent { #[serde(skip_serializing_if = "Vec::is_empty")] - #[serde_as(as = "Vec>>")] + #[serde(serialize_with = "serialize_interval")] pub interval: Vec>>>, #[serde(default = "default_trs")] pub trs: String, @@ -58,6 +58,25 @@ impl Default for TemporalExtent { } } +pub fn serialize_interval( + interval: &Vec>>>, + serializer: S, +) -> Result +where + S: Serializer, +{ + let mut outer_seq = serializer.serialize_seq(Some(interval.len()))?; + for inner_vec in interval { + let serialized_inner_vec: Vec<_> = inner_vec + .iter() + .map(|item| item.as_ref().map(|dt| dt.to_rfc3339())) + .collect(); + + outer_seq.serialize_element(&serialized_inner_vec)?; + } + outer_seq.end() +} + fn default_trs() -> String { "http://www.opengis.net/def/uom/ISO-8601/0/Gregorian".to_string() } From f8273241ae05e2bbddbd8c20f9cf65fad8740aef Mon Sep 17 00:00:00 2001 From: "jacovdbergh@gmail.com" Date: Mon, 13 Jan 2025 09:44:10 +0200 Subject: [PATCH 2/2] no need for public --- ogcapi-types/src/common/extent.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ogcapi-types/src/common/extent.rs b/ogcapi-types/src/common/extent.rs index 87ce4b1..905d8e1 100644 --- a/ogcapi-types/src/common/extent.rs +++ b/ogcapi-types/src/common/extent.rs @@ -58,7 +58,7 @@ impl Default for TemporalExtent { } } -pub fn serialize_interval( +fn serialize_interval( interval: &Vec>>>, serializer: S, ) -> Result