ogcapi_types/common/
collections.rs1use chrono::{SecondsFormat, Utc};
2use serde::{Deserialize, Serialize};
3use serde_with::DisplayFromStr;
4
5use crate::common::{Crs, Links};
6
7use super::Collection;
8
9#[serde_with::serde_as]
10#[serde_with::skip_serializing_none]
11#[derive(Serialize, Deserialize, Debug, PartialEq, Clone)]
12#[serde(rename_all = "camelCase")]
13pub struct Collections {
14 #[serde(default)]
15 pub links: Links,
16 pub time_stamp: Option<String>,
17 pub number_matched: Option<u64>,
18 pub number_returned: Option<u64>,
19 pub collections: Vec<Collection>,
20 #[serde(default)]
21 #[serde_as(as = "Vec<DisplayFromStr>")]
22 pub crs: Vec<Crs>,
23}
24
25impl Collections {
26 pub fn new(collections: Vec<Collection>) -> Self {
27 let count = collections.len();
28 Collections {
29 links: Vec::new(),
30 time_stamp: Some(Utc::now().to_rfc3339_opts(SecondsFormat::Secs, true)),
31 number_matched: None,
32 number_returned: Some(count as u64),
33 collections,
34 crs: Vec::new(),
35 }
36 }
37}