use serde_derive::{Deserialize, Serialize};
use serde_json::Value;
use std::collections::HashMap;
#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
pub struct EventConsumptionStrategyDefinition{
#[serde(rename = "all", skip_serializing_if = "Option::is_none")]
pub all: Option<Vec<EventFilterDefinition>>,
#[serde(rename = "any", skip_serializing_if = "Option::is_none")]
pub any: Option<Vec<EventFilterDefinition>>,
#[serde(rename = "one", skip_serializing_if = "Option::is_none")]
pub one: Option<EventFilterDefinition>,
#[serde(rename = "until", skip_serializing_if = "Option::is_none")]
pub until: Option<Box<OneOfEventConsumptionStrategyDefinitionOrExpression>>
}
#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
pub struct EventFilterDefinition{
#[serde(rename = "with", skip_serializing_if = "Option::is_none")]
pub with : Option<HashMap<String, Value>>,
#[serde(rename = "correlate", skip_serializing_if = "Option::is_none")]
pub correlate: Option<HashMap<String, CorrelationKeyDefinition>>
}
#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
pub struct CorrelationKeyDefinition{
#[serde(rename = "from")]
pub from: String,
#[serde(rename = "expect", skip_serializing_if = "Option::is_none")]
pub expect: Option<String>
}
impl CorrelationKeyDefinition {
pub fn new(from: &str, expect: Option<String>) -> Self{
Self {
from: from.to_string(),
expect
}
}
}
#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
pub struct EventDefinition{
#[serde(rename = "with")]
pub with: HashMap<String, Value>
}
impl EventDefinition {
pub fn new(with: HashMap<String, Value>) -> Self{
Self{
with
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(untagged)]
pub enum OneOfEventConsumptionStrategyDefinitionOrExpression{
Strategy(EventConsumptionStrategyDefinition),
Expression(String)
}
impl Default for OneOfEventConsumptionStrategyDefinitionOrExpression{
fn default() -> Self {
OneOfEventConsumptionStrategyDefinitionOrExpression::Expression(String::default())
}
}