use serde::{Deserialize, Serialize};
use crate::{to_query, IntoParams};
#[derive(Debug, Default, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct StreamTemplate {
pub name: String,
}
#[derive(Debug, Default, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct StreamSettingsWrite {
pub template: StreamTemplate,
}
#[derive(Debug, Default, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct StreamWrite {
pub external_id: String,
pub settings: StreamSettingsWrite,
}
impl From<Stream> for StreamWrite {
fn from(stream: Stream) -> Self {
Self {
external_id: stream.external_id,
settings: StreamSettingsWrite {
template: StreamTemplate {
name: stream.created_from_template,
},
},
}
}
}
#[derive(Debug, Default, Clone, Serialize, Deserialize)]
pub enum StreamType {
#[default]
Immutable,
Mutable,
}
#[derive(Debug, Default, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct StreamLifecycle {
pub data_deleted_after: Option<String>,
pub retained_after_soft_delete: String,
}
#[derive(Debug, Default, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct StreamResourceLimits {
pub provisioned: f64,
pub consumed: Option<f64>,
}
#[derive(Debug, Default, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct StreamLimits {
pub max_filtering_interval: Option<String>,
pub max_records_total: StreamResourceLimits,
pub max_giga_bytes_total: StreamResourceLimits,
}
#[derive(Debug, Default, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct StreamSettings {
pub lifecycle: StreamLifecycle,
pub limits: StreamLimits,
}
#[derive(Debug, Default, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Stream {
pub external_id: String,
pub created_time: i64,
pub created_from_template: String,
pub r#type: StreamType,
pub settings: Option<StreamSettings>,
}
#[derive(Debug, Default)]
pub struct ListStreamParams {}
impl IntoParams for ListStreamParams {
fn into_params(self) -> Vec<(String, String)> {
vec![]
}
}
#[derive(Debug, Default)]
pub struct RetrieveStreamParams {
pub include_statistics: Option<bool>,
}
impl IntoParams for RetrieveStreamParams {
fn into_params(self) -> Vec<(String, String)> {
let mut params = Vec::new();
to_query("includeStatistics", &self.include_statistics, &mut params);
params
}
}