Skip to content

Commit

Permalink
Merge pull request #21 from jacovdbergh/main
Browse files Browse the repository at this point in the history
Serialize time extent using to_rfc3339()
  • Loading branch information
b4l authored Jan 13, 2025
2 parents ea3c11b + f827324 commit 266e4f6
Showing 1 changed file with 21 additions and 2 deletions.
23 changes: 21 additions & 2 deletions ogcapi-types/src/common/extent.rs
Original file line number Diff line number Diff line change
@@ -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};
Expand Down Expand Up @@ -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<Vec<Option<DisplayFromStr>>>")]
#[serde(serialize_with = "serialize_interval")]
pub interval: Vec<Vec<Option<DateTime<Utc>>>>,
#[serde(default = "default_trs")]
pub trs: String,
Expand All @@ -58,6 +58,25 @@ impl Default for TemporalExtent {
}
}

fn serialize_interval<S>(
interval: &Vec<Vec<Option<DateTime<Utc>>>>,
serializer: S,
) -> Result<S::Ok, S::Error>
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()
}

0 comments on commit 266e4f6

Please sign in to comment.