ogcapi_types/processes/
execute.rs

1use std::collections::HashMap;
2
3use serde::{Deserialize, Serialize};
4use serde_json::{Map, Value};
5
6use crate::common::{Bbox, Link};
7
8#[derive(Serialize, Deserialize, Debug)]
9pub struct Execute {
10    #[serde(default, skip_serializing_if = "HashMap::is_empty")]
11    pub inputs: HashMap<String, Input>,
12    #[serde(default, skip_serializing_if = "HashMap::is_empty")]
13    pub outputs: HashMap<String, Output>,
14    #[serde(default)]
15    pub response: Response,
16    pub subscriber: Option<Subscriber>,
17}
18
19#[derive(Serialize, Deserialize, Debug)]
20#[serde(untagged)]
21pub enum Input {
22    InlineOrRefData(InlineOrRefData),
23    InlineOrRefDataArray(Vec<InlineOrRefData>),
24}
25
26#[derive(Serialize, Deserialize, Debug)]
27#[serde(untagged)]
28pub enum InlineOrRefData {
29    InputValueNoObject(InputValueNoObject),
30    QualifiedInputValue(QualifiedInputValue),
31    Link(Link),
32}
33
34#[derive(Serialize, Deserialize, Debug)]
35#[serde(untagged)]
36pub enum InputValueNoObject {
37    String(String),
38    Number(f64),
39    Integer(i64),
40    Boolean(bool),
41    Array(Vec<Value>),
42    // TODO: requires custom serde implementation
43    // BinaryInputValue(String), // Undistinguishable from String(String)
44    // Bbox(BoundingBox), // Bbox is actually an object
45}
46
47#[derive(Serialize, Deserialize, Debug)]
48pub struct BoundingBox {
49    pub bbox: Bbox,
50    pub crs: Option<String>,
51}
52
53#[derive(Serialize, Deserialize, Debug)]
54pub struct QualifiedInputValue {
55    pub value: InputValue,
56    #[serde(flatten)]
57    pub format: Format,
58}
59
60#[derive(Serialize, Deserialize, Debug)]
61#[serde(untagged)]
62pub enum InputValue {
63    InputValueNoObject(InputValueNoObject),
64    Object(Map<String, Value>),
65}
66
67#[derive(Serialize, Deserialize, Debug)]
68#[serde(rename_all = "camelCase")]
69pub struct Output {
70    pub format: Option<Format>,
71    #[serde(default)]
72    pub transmission_mode: TransmissionMode,
73}
74
75#[derive(Serialize, Deserialize, Debug)]
76#[serde(rename_all = "camelCase")]
77pub struct Format {
78    pub media_type: Option<String>,
79    pub encoding: Option<String>,
80    pub schema: Option<Schema>,
81}
82
83#[derive(Serialize, Deserialize, Debug)]
84#[serde(untagged)]
85pub enum Schema {
86    String(String),
87    Object(Map<String, Value>),
88}
89
90#[derive(Serialize, Deserialize, Default, Debug)]
91#[serde(rename_all = "lowercase")]
92pub enum TransmissionMode {
93    #[default]
94    Value,
95    Reference,
96}
97
98#[derive(Serialize, Deserialize, Default, Debug)]
99#[serde(rename_all = "lowercase")]
100pub enum Response {
101    #[default]
102    Raw,
103    Document,
104}
105
106#[derive(Serialize, Deserialize, Debug)]
107#[serde(rename_all = "camelCase")]
108pub struct Subscriber {
109    pub success_uri: String,
110    pub in_progress_uri: Option<String>,
111    pub failed_uri: Option<String>,
112}