use super::{present_nullable, validate_response_date};
use serde::{Deserialize, Serialize};
fn present_nullable_date<'de, D: serde::Deserializer<'de>>(
d: D,
) -> Result<Option<Option<String>>, D::Error> {
let value = present_nullable::<D, String>(d)?;
if let Some(Some(date)) = &value {
validate_response_date(date).map_err(|()| {
serde::de::Error::custom("expected a valid Wekan date-time string or null")
})?;
}
Ok(value)
}
#[derive(Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(untagged)]
pub enum RuleNumber {
Number(serde_json::Number),
Text(String),
}
#[derive(Clone, Debug, Default, Deserialize, Serialize, Eq, PartialEq)]
#[serde(deny_unknown_fields, rename_all = "camelCase")]
pub struct RuleTrigger {
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub advanced_filter: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub text_contains: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub cron: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub direction: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub activity_type: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub description: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub user_id: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub username: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub list_name: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub old_list_name: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub swimlane_name: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub card_title: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub checklist_name: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub checklist_item_name: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub label_id: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub attachment_name: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub desc: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub schedule_kind: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub schedule_type: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub at_time: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub weekday: Option<Option<RuleNumber>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub day_of_month: Option<Option<RuleNumber>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub on_date: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub due_condition: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub days: Option<Option<RuleNumber>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub last_run_key: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub last_run_at: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub button_type: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub button_label: Option<Option<String>>,
}
#[derive(Clone, Debug, Default, Deserialize, Serialize, Eq, PartialEq)]
#[serde(deny_unknown_fields, rename_all = "camelCase")]
pub struct RuleAction {
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub include_card_details: Option<Option<bool>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub include_checklists_and_comments: Option<Option<bool>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub include_attachments: Option<Option<bool>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub integration_id: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub comment_text: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub list_id: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub swimlane_id: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub action_type: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub list_name: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub swimlane_name: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub card_name: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub from_list_name: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub checklist_name: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub check_item_name: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub checklist_items: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub date_field: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub unit: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub email_to: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub email_subject: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub email_msg: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub selected_color: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub label_id: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub username: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub sort_field: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub desc: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub days: Option<Option<RuleNumber>>,
}
#[derive(Clone, Debug, Default, Deserialize, Serialize, Eq, PartialEq)]
#[serde(deny_unknown_fields, rename_all = "camelCase")]
pub struct RuleTriggerInput {
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub advanced_filter: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub text_contains: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub cron: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub direction: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub activity_type: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub description: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub user_id: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub username: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub list_name: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub old_list_name: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub swimlane_name: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub card_title: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub checklist_name: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub checklist_item_name: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub label_id: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub attachment_name: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub desc: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub schedule_kind: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub schedule_type: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub at_time: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub weekday: Option<Option<RuleNumber>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub day_of_month: Option<Option<RuleNumber>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub on_date: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub due_condition: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub days: Option<Option<RuleNumber>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub last_run_key: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable_date"
)]
pub last_run_at: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub button_type: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub button_label: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
#[serde(rename = "_id")]
pub id: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub board_id: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub created_at: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub modified_at: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub updated_at: Option<Option<String>>,
}
#[derive(Clone, Debug, Default, Deserialize, Serialize, Eq, PartialEq)]
#[serde(deny_unknown_fields, rename_all = "camelCase")]
pub struct RuleActionInput {
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub include_card_details: Option<Option<bool>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub include_checklists_and_comments: Option<Option<bool>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub include_attachments: Option<Option<bool>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub integration_id: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub comment_text: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub list_id: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub swimlane_id: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub action_type: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub list_name: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub swimlane_name: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub card_name: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub from_list_name: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub checklist_name: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub check_item_name: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub checklist_items: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub date_field: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub unit: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub email_to: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub email_subject: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub email_msg: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub selected_color: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub label_id: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub username: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub sort_field: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub desc: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub days: Option<Option<RuleNumber>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
#[serde(rename = "_id")]
pub id: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub board_id: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub created_at: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub modified_at: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "present_nullable"
)]
pub updated_at: Option<Option<String>>,
}