Skip to main content

wi_api/
types.rs

1use serde::{Deserialize, Serialize};
2use serde_json::value::RawValue;
3
4// ─── Session ──────────────────────────────────────────────────────────────────
5
6#[derive(Debug, Clone, Deserialize)]
7pub struct SessionStatus {
8    pub connected: bool,
9    pub phone: Option<String>,
10}
11
12#[derive(Debug, Clone, Deserialize)]
13pub struct QRCode {
14    pub qr: Option<String>,
15}
16
17#[derive(Debug, Clone, Deserialize)]
18pub struct PairPhoneResult {
19    pub pair_code: Option<String>,
20}
21
22#[derive(Debug, Clone, Deserialize)]
23pub struct MessageResponse {
24    #[serde(rename = "messageId")]
25    pub message_id: String,
26    pub id: String,
27}
28
29// ─── Send params ──────────────────────────────────────────────────────────────
30
31#[derive(Debug, Clone, Serialize, Default)]
32pub struct SendTextParams {
33    pub to: String,
34    pub text: String,
35    #[serde(skip_serializing_if = "Option::is_none")]
36    pub quoted: Option<String>,
37    #[serde(skip_serializing_if = "Option::is_none")]
38    pub mentions: Option<Vec<String>>,
39}
40
41#[derive(Debug, Clone, Serialize, Default)]
42pub struct SendImageParams {
43    pub to: String,
44    pub url: String,
45    #[serde(skip_serializing_if = "Option::is_none")]
46    pub caption: Option<String>,
47    #[serde(skip_serializing_if = "Option::is_none")]
48    pub quoted: Option<String>,
49}
50
51#[derive(Debug, Clone, Serialize, Default)]
52pub struct SendAudioParams {
53    pub to: String,
54    pub url: String,
55    /// Send as voice note. Default: false.
56    #[serde(skip_serializing_if = "Option::is_none")]
57    pub ptt: Option<bool>,
58}
59
60#[derive(Debug, Clone, Serialize, Default)]
61pub struct SendVideoParams {
62    pub to: String,
63    pub url: String,
64    #[serde(skip_serializing_if = "Option::is_none")]
65    pub caption: Option<String>,
66    #[serde(skip_serializing_if = "Option::is_none")]
67    pub quoted: Option<String>,
68}
69
70#[derive(Debug, Clone, Serialize, Default)]
71pub struct SendDocumentParams {
72    pub to: String,
73    pub url: String,
74    #[serde(skip_serializing_if = "Option::is_none")]
75    pub filename: Option<String>,
76    #[serde(skip_serializing_if = "Option::is_none")]
77    pub caption: Option<String>,
78}
79
80#[derive(Debug, Clone, Serialize, Default)]
81pub struct SendLocationParams {
82    pub to: String,
83    pub latitude: f64,
84    pub longitude: f64,
85    #[serde(skip_serializing_if = "Option::is_none")]
86    pub title: Option<String>,
87    #[serde(skip_serializing_if = "Option::is_none")]
88    pub address: Option<String>,
89}
90
91#[derive(Debug, Clone, Serialize, Default)]
92pub struct SendContactParams {
93    pub to: String,
94    pub contact_name: String,
95    pub contact_number: String,
96}
97
98#[derive(Debug, Clone, Serialize, Default)]
99pub struct SendStickerParams {
100    pub to: String,
101    pub url: String,
102}
103
104#[derive(Debug, Clone, Serialize, Default)]
105pub struct SendPollParams {
106    pub to: String,
107    pub question: String,
108    pub options: Vec<String>,
109    #[serde(skip_serializing_if = "Option::is_none")]
110    pub multiple_answers: Option<bool>,
111}
112
113#[derive(Debug, Clone, Serialize, Default)]
114pub struct SendReactionParams {
115    pub to: String,
116    pub message_id: String,
117    /// Emoji character, or empty string to remove the reaction.
118    pub emoji: String,
119}
120
121// ─── Chat params ──────────────────────────────────────────────────────────────
122
123#[derive(Debug, Clone, Serialize, Default)]
124pub struct MarkReadParams {
125    pub chat_id: String,
126    #[serde(skip_serializing_if = "Option::is_none")]
127    pub last_message_id: Option<String>,
128}
129
130#[derive(Debug, Clone, Serialize, Default)]
131pub struct PresenceParams {
132    pub chat_id: String,
133    /// One of "composing", "recording", "paused"
134    pub presence: String,
135}
136
137// ─── Webhooks ─────────────────────────────────────────────────────────────────
138
139#[derive(Debug, Clone, Deserialize)]
140pub struct Event {
141    pub event: String,
142    pub session_id: String,
143    pub data: Box<RawValue>,
144    pub timestamp: String,
145}
146
147#[derive(Debug, Clone, Deserialize)]
148pub struct IncomingMessage {
149    pub id: String,
150    pub chat: String,
151    pub from: String,
152    pub from_me: bool,
153    #[serde(rename = "type")]
154    pub msg_type: String,
155    pub text: Option<String>,
156    pub caption: Option<String>,
157    pub media_url: Option<String>,
158    pub mimetype: Option<String>,
159    pub filename: Option<String>,
160    pub latitude: Option<f64>,
161    pub longitude: Option<f64>,
162    pub timestamp: i64,
163}