use chrono::Duration; use serde::{Deserialize, Serialize}; use serde_with::{serde_as, DurationSeconds}; 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, } #[derive(Deserialize, Serialize, Clone)] pub struct Command { 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 { pub name: String, pub twitch_id: twitch_api2::types::RewardId, pub rhai: String, }