use serde::{Deserialize, Serialize};
use serde_json::Number;
use super::CardStickerHighlight;
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
#[serde(deny_unknown_fields, rename_all = "camelCase")]
pub struct CardVoteInput {
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_value"
)]
pub question: Option<String>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_value"
)]
pub positive: Option<Vec<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_value"
)]
pub negative: Option<Vec<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "nullable_value"
)]
pub end: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_value"
)]
pub public: Option<bool>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_value"
)]
pub allow_non_board_members: Option<bool>,
}
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
#[serde(deny_unknown_fields, rename_all = "camelCase")]
pub struct CardPokerInput {
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "nullable_value"
)]
pub question: Option<Option<bool>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "nullable_value"
)]
pub one: Option<Option<Vec<String>>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "nullable_value"
)]
pub two: Option<Option<Vec<String>>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "nullable_value"
)]
pub three: Option<Option<Vec<String>>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "nullable_value"
)]
pub five: Option<Option<Vec<String>>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "nullable_value"
)]
pub eight: Option<Option<Vec<String>>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "nullable_value"
)]
pub thirteen: Option<Option<Vec<String>>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "nullable_value"
)]
pub twenty: Option<Option<Vec<String>>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "nullable_value"
)]
pub forty: Option<Option<Vec<String>>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "nullable_value"
)]
pub one_hundred: Option<Option<Vec<String>>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "nullable_value"
)]
pub unsure: Option<Option<Vec<String>>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "nullable_value"
)]
pub end: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "nullable_value"
)]
pub allow_non_board_members: Option<Option<bool>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "nullable_value"
)]
pub estimation: Option<Option<Number>>,
}
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
#[serde(deny_unknown_fields)]
pub struct CardCustomFieldInput {
#[serde(
rename = "_id",
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "nullable_value"
)]
pub custom_field_id: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "nullable_value"
)]
pub value: Option<Option<serde_json::Value>>,
}
fn nullable_value<'de, D, T>(deserializer: D) -> Result<Option<Option<T>>, D::Error>
where
D: serde::Deserializer<'de>,
T: Deserialize<'de>,
{
Option::<T>::deserialize(deserializer).map(Some)
}
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
#[serde(deny_unknown_fields)]
pub struct CardStickerInput {
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_value"
)]
pub icon: Option<String>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_value"
)]
pub name: Option<String>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_value"
)]
pub highlight: Option<CardStickerHighlight>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_value"
)]
pub position: Option<serde_json::Value>,
}
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
#[serde(deny_unknown_fields)]
pub struct CardLocationInput {
#[serde(
rename = "_id",
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "nullable_value"
)]
pub location_id: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "nullable_value"
)]
pub name: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "nullable_value"
)]
pub address: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "nullable_value"
)]
pub latitude: Option<Option<serde_json::Value>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "nullable_value"
)]
pub longitude: Option<Option<serde_json::Value>>,
}
fn present_value<'de, D, T>(deserializer: D) -> Result<Option<T>, D::Error>
where
D: serde::Deserializer<'de>,
T: Deserialize<'de>,
{
T::deserialize(deserializer).map(Some)
}