use chrono::Duration; use serde::{Deserialize, Serialize}; use serde_with::{serde_as, DurationSecondsWithFrac}; use uuid::Uuid; use crate::app::FullUserToken; #[derive(Deserialize, Serialize, Default)] pub struct Config { #[serde(default)] pub bot_token: Option, #[serde(default)] pub user_token: Option, pub commands: Vec, pub redemptions: Vec, #[serde(default)] pub events: Events, } #[derive(Deserialize, Serialize, Clone)] pub struct Command { #[serde(default = "Uuid::new_v4")] pub id: Uuid, pub name: String, pub aliases: Vec, pub cooldowns: Cooldowns, pub executor: CommandExecutor, } #[derive(Deserialize, Serialize, Clone)] pub enum CommandExecutor { Text(String), Rhai(String), } #[serde_as] #[derive(Deserialize, Serialize, Default, Clone)] pub struct Cooldowns { #[serde_as(as = "Option>")] pub global: Option, #[serde_as(as = "Option>")] pub user: Option, } #[derive(Deserialize, Serialize, Clone)] pub struct Redemption { #[serde(default = "Uuid::new_v4")] pub id: Uuid, pub name: String, pub twitch_id: twitch_api2::types::RewardId, pub rhai: String, } #[derive(Deserialize, Serialize, Default, Clone)] pub struct Events { pub stream_status: Option, }