// SPDX-License-Identifier: Apache-2.0 //! Lean Telegram `Update` struct hierarchy. //! //! Only the fields KeiBuddy needs are modelled. //! All optional fields use `#[serde(default)]` so missing JSON keys deserialize cleanly. use serde::{Deserialize, Serialize}; /// Telegram `Voice` attachment (OGG-Opus from the mic). #[derive(Debug, Clone, PartialEq, Deserialize, Serialize, Default)] pub struct Voice { pub file_id: String, #[serde(default)] pub duration: i64, #[serde(default)] pub mime_type: String, } /// Telegram `Audio` attachment (music/audio file). #[derive(Debug, Clone, PartialEq, Deserialize, Serialize, Default)] pub struct Audio { pub file_id: String, #[serde(default)] pub duration: i64, #[serde(default)] pub mime_type: String, } /// Top-level Telegram update payload. #[derive(Debug, Clone, PartialEq, Deserialize, Serialize)] pub struct Update { pub update_id: i64, #[serde(default)] pub message: Option, #[serde(default)] pub callback_query: Option, } /// Incoming text message (or voice/audio message). #[derive(Debug, Clone, PartialEq, Deserialize, Serialize)] pub struct Message { pub message_id: i64, pub date: i64, pub chat: Chat, #[serde(default)] pub from: Option, #[serde(default)] pub text: Option, #[serde(default)] pub voice: Option, #[serde(default)] pub audio: Option