use serde::{Deserialize, Deserializer, Serialize};
#[non_exhaustive]
#[derive(Clone, Debug, PartialEq, Serialize)]
#[serde(untagged)]
pub enum NotebookCellUpdateRequestAttributes {
NotebookMarkdownCellAttributes(Box<crate::datadogV1::model::NotebookMarkdownCellAttributes>),
NotebookTimeseriesCellAttributes(
Box<crate::datadogV1::model::NotebookTimeseriesCellAttributes>,
),
NotebookToplistCellAttributes(Box<crate::datadogV1::model::NotebookToplistCellAttributes>),
NotebookHeatMapCellAttributes(Box<crate::datadogV1::model::NotebookHeatMapCellAttributes>),
NotebookDistributionCellAttributes(
Box<crate::datadogV1::model::NotebookDistributionCellAttributes>,
),
NotebookLogStreamCellAttributes(Box<crate::datadogV1::model::NotebookLogStreamCellAttributes>),
UnparsedObject(crate::datadog::UnparsedObject),
}
impl<'de> Deserialize<'de> for NotebookCellUpdateRequestAttributes {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: Deserializer<'de>,
{
let value: serde_json::Value = Deserialize::deserialize(deserializer)?;
if let Ok(_v) = serde_json::from_value::<
Box<crate::datadogV1::model::NotebookMarkdownCellAttributes>,
>(value.clone())
{
if !_v._unparsed {
return Ok(NotebookCellUpdateRequestAttributes::NotebookMarkdownCellAttributes(_v));
}
}
if let Ok(_v) = serde_json::from_value::<
Box<crate::datadogV1::model::NotebookTimeseriesCellAttributes>,
>(value.clone())
{
if !_v._unparsed {
return Ok(
NotebookCellUpdateRequestAttributes::NotebookTimeseriesCellAttributes(_v),
);
}
}
if let Ok(_v) = serde_json::from_value::<
Box<crate::datadogV1::model::NotebookToplistCellAttributes>,
>(value.clone())
{
if !_v._unparsed {
return Ok(NotebookCellUpdateRequestAttributes::NotebookToplistCellAttributes(_v));
}
}
if let Ok(_v) = serde_json::from_value::<
Box<crate::datadogV1::model::NotebookHeatMapCellAttributes>,
>(value.clone())
{
if !_v._unparsed {
return Ok(NotebookCellUpdateRequestAttributes::NotebookHeatMapCellAttributes(_v));
}
}
if let Ok(_v) = serde_json::from_value::<
Box<crate::datadogV1::model::NotebookDistributionCellAttributes>,
>(value.clone())
{
if !_v._unparsed {
return Ok(
NotebookCellUpdateRequestAttributes::NotebookDistributionCellAttributes(_v),
);
}
}
if let Ok(_v) = serde_json::from_value::<
Box<crate::datadogV1::model::NotebookLogStreamCellAttributes>,
>(value.clone())
{
if !_v._unparsed {
return Ok(
NotebookCellUpdateRequestAttributes::NotebookLogStreamCellAttributes(_v),
);
}
}
return Ok(NotebookCellUpdateRequestAttributes::UnparsedObject(
crate::datadog::UnparsedObject { value },
));
}
}