ogcapi_types/common/
collections.rs

1use 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}