use std::path::Path;
use serde::Serialize;
use serde_with::skip_serializing_none;
pub use super::ids::SourceId;
#[derive(Serialize)]
#[serde(tag = "requestType", content = "requestData")]
pub(crate) enum Request<'a> {
#[serde(rename = "GetSourceActive")]
Active {
#[serde(flatten)]
source: SourceId<'a>,
},
#[serde(rename = "GetSourceScreenshot")]
TakeScreenshot(TakeScreenshot<'a>),
#[serde(rename = "SaveSourceScreenshot")]
SaveScreenshot(SaveScreenshot<'a>),
}
impl<'a> From<Request<'a>> for super::RequestType<'a> {
fn from(value: Request<'a>) -> Self {
super::RequestType::Sources(value)
}
}
#[skip_serializing_none]
#[derive(Serialize)]
#[cfg_attr(feature = "builder", derive(bon::Builder))]
pub struct TakeScreenshot<'a> {
#[serde(flatten)]
pub source: SourceId<'a>,
#[serde(rename = "imageFormat")]
pub format: &'a str,
#[serde(rename = "imageWidth")]
pub width: Option<u32>,
#[serde(rename = "imageHeight")]
pub height: Option<u32>,
#[serde(rename = "imageCompressionQuality")]
pub compression_quality: Option<i32>,
}
#[skip_serializing_none]
#[derive(Serialize)]
#[cfg_attr(feature = "builder", derive(bon::Builder))]
pub struct SaveScreenshot<'a> {
#[serde(flatten)]
pub source: SourceId<'a>,
#[serde(rename = "imageFormat")]
pub format: &'a str,
#[serde(rename = "imageWidth")]
pub width: Option<u32>,
#[serde(rename = "imageHeight")]
pub height: Option<u32>,
#[serde(rename = "imageCompressionQuality")]
pub compression_quality: Option<i32>,
#[serde(rename = "imageFilePath")]
pub file_path: &'a Path,
}