use indexmap::IndexMap;
use serde::{Deserialize, Serialize};
use serde_json::Value;
use super::metadata::Metadata;
use super::types::Schema;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum StreamingMode {
Bounded,
Unbounded,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct StreamingDeclaration {
pub mode: StreamingMode,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct InterfaceCondition {
pub rule: String,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Input {
pub id: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub schema: Option<Schema>,
#[serde(default)]
pub optional: bool,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub streaming: Option<StreamingDeclaration>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub preconditions: Vec<InterfaceCondition>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub metadata: Option<Metadata>,
#[serde(default, flatten)]
pub extensions: IndexMap<String, Value>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Output {
pub id: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub schema: Option<Schema>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub streaming: Option<StreamingDeclaration>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub postconditions: Vec<InterfaceCondition>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub metadata: Option<Metadata>,
#[serde(default, flatten)]
pub extensions: IndexMap<String, Value>,
}