use serde::Serialize;
use serde_with::skip_serializing_none;
use super::sources::SourceId;
#[derive(Serialize)]
#[serde(tag = "requestType", content = "requestData")]
pub(crate) enum Request<'a> {
#[serde(rename = "GetSourceFilterKindList")]
KindList,
#[serde(rename = "GetSourceFilterList")]
List {
#[serde(flatten)]
source: SourceId<'a>,
},
#[serde(rename = "GetSourceFilterDefaultSettings")]
DefaultSettings {
#[serde(rename = "filterKind")]
kind: &'a str,
},
#[serde(rename = "CreateSourceFilter")]
Create(CreateInternal<'a>),
#[serde(rename = "RemoveSourceFilter")]
Remove {
#[serde(flatten)]
source: SourceId<'a>,
#[serde(rename = "filterName")]
filter: &'a str,
},
#[serde(rename = "SetSourceFilterName")]
SetName(SetName<'a>),
#[serde(rename = "GetSourceFilter")]
Get {
#[serde(flatten)]
source: SourceId<'a>,
#[serde(rename = "filterName")]
filter: &'a str,
},
#[serde(rename = "SetSourceFilterIndex")]
SetIndex(SetIndex<'a>),
#[serde(rename = "SetSourceFilterSettings")]
SetSettings(SetSettingsInternal<'a>),
#[serde(rename = "SetSourceFilterEnabled")]
SetEnabled(SetEnabled<'a>),
}
impl<'a> From<Request<'a>> for super::RequestType<'a> {
fn from(value: Request<'a>) -> Self {
super::RequestType::Filters(value)
}
}
#[cfg_attr(feature = "builder", derive(bon::Builder))]
pub struct Create<'a, T> {
pub source: SourceId<'a>,
pub filter: &'a str,
pub kind: &'a str,
pub settings: Option<T>,
}
#[skip_serializing_none]
#[derive(Default, Serialize)]
pub(crate) struct CreateInternal<'a> {
#[serde(flatten)]
pub source: SourceId<'a>,
#[serde(rename = "filterName")]
pub filter: &'a str,
#[serde(rename = "filterKind")]
pub kind: &'a str,
#[serde(rename = "filterSettings")]
pub settings: Option<serde_json::Value>,
}
#[derive(Default, Serialize)]
#[cfg_attr(feature = "builder", derive(bon::Builder))]
pub struct SetName<'a> {
#[serde(flatten)]
pub source: SourceId<'a>,
#[serde(rename = "filterName")]
pub filter: &'a str,
#[serde(rename = "newFilterName")]
pub new_name: &'a str,
}
#[derive(Default, Serialize)]
#[cfg_attr(feature = "builder", derive(bon::Builder))]
pub struct SetIndex<'a> {
#[serde(flatten)]
pub source: SourceId<'a>,
#[serde(rename = "filterName")]
pub filter: &'a str,
#[serde(rename = "filterIndex")]
pub index: u32,
}
#[cfg_attr(feature = "builder", derive(bon::Builder))]
pub struct SetSettings<'a, T> {
pub source: SourceId<'a>,
pub filter: &'a str,
pub settings: T,
pub overlay: Option<bool>,
}
#[derive(Default, Serialize)]
pub(crate) struct SetSettingsInternal<'a> {
#[serde(flatten)]
pub source: SourceId<'a>,
#[serde(rename = "filterName")]
pub filter: &'a str,
#[serde(rename = "filterSettings")]
pub settings: serde_json::Value,
#[serde(rename = "overlay")]
pub overlay: Option<bool>,
}
#[derive(Default, Serialize)]
#[cfg_attr(feature = "builder", derive(bon::Builder))]
pub struct SetEnabled<'a> {
#[serde(flatten)]
pub source: SourceId<'a>,
#[serde(rename = "filterName")]
pub filter: &'a str,
#[serde(rename = "filterEnabled")]
pub enabled: bool,
}