use serde_derive::{Deserialize, Serialize};
use crate::models::duration::*;
#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
pub struct RetryPolicyDefinition{
#[serde(rename = "when", skip_serializing_if = "Option::is_none")]
pub when: Option<String>,
#[serde(rename = "exceptWhen", skip_serializing_if = "Option::is_none")]
pub except_when: Option<String>,
#[serde(rename = "limit", skip_serializing_if = "Option::is_none")]
pub limit: Option<RetryPolicyLimitDefinition>,
#[serde(rename = "delay", skip_serializing_if = "Option::is_none")]
pub delay: Option<Duration>,
#[serde(rename = "backoff", skip_serializing_if = "Option::is_none")]
pub backoff: Option<BackoffStrategyDefinition>,
#[serde(rename = "jitter", skip_serializing_if = "Option::is_none")]
pub jitter: Option<JitterDefinition>
}
#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
pub struct RetryPolicyLimitDefinition{
#[serde(rename = "attempt", skip_serializing_if = "Option::is_none")]
pub attempt: Option<RetryAttemptLimitDefinition>,
#[serde(rename = "duration", skip_serializing_if = "Option::is_none")]
pub duration: Option<Duration>,
}
#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
pub struct RetryAttemptLimitDefinition{
#[serde(rename = "count", skip_serializing_if = "Option::is_none")]
pub count: Option<u16>,
#[serde(rename = "duration", skip_serializing_if = "Option::is_none")]
pub duration: Option<Duration>
}
#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
pub struct BackoffStrategyDefinition{
#[serde(rename = "constant", skip_serializing_if = "Option::is_none")]
pub constant: Option<ConstantBackoffDefinition>,
#[serde(rename = "exponential", skip_serializing_if = "Option::is_none")]
pub exponential: Option<ExponentialBackoffDefinition>,
#[serde(rename = "linear", skip_serializing_if = "Option::is_none")]
pub linear: Option<LinearBackoffDefinition>
}
impl BackoffStrategyDefinition{
pub fn new() -> Self{
Self{
constant: None,
exponential: None,
linear: None
}
}
}
#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
pub struct ConstantBackoffDefinition{
}
impl ConstantBackoffDefinition{
pub fn new() -> Self{
Self{}
}
}
#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
pub struct ExponentialBackoffDefinition{
}
impl ExponentialBackoffDefinition{
pub fn new() -> Self{
Self{}
}
}
#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
pub struct LinearBackoffDefinition{
#[serde(rename = "increment", skip_serializing_if = "Option::is_none")]
pub increment: Option<Duration>
}
impl LinearBackoffDefinition{
pub fn new() -> Self{
Self{ increment: None }
}
}
#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
pub struct JitterDefinition{
#[serde(rename = "from")]
pub from: Duration,
#[serde(rename = "to")]
pub to: Duration
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(untagged)]
pub enum OneOfRetryPolicyDefinitionOrReference{
Retry(RetryPolicyDefinition),
Reference(String)
}
impl Default for OneOfRetryPolicyDefinitionOrReference {
fn default() -> Self {
OneOfRetryPolicyDefinitionOrReference::Retry(RetryPolicyDefinition::default())
}
}