tg_flows/types/
webhook_info.rs1use std::net::IpAddr;
2
3use chrono::{DateTime, Utc};
4use serde::{Deserialize, Serialize};
5
6use crate::types::AllowedUpdate;
7
8#[serde_with_macros::skip_serializing_none]
12#[derive(Clone, Debug, Eq, Hash, PartialEq, Serialize, Deserialize)]
13pub struct WebhookInfo {
14 #[serde(with = "crate::types::option_url_from_string")]
16 pub url: Option<url::Url>,
17
18 pub has_custom_certificate: bool,
21
22 pub pending_update_count: u32,
24
25 pub ip_address: Option<IpAddr>,
27
28 #[serde(default, with = "crate::types::serde_opt_date_from_unix_timestamp")]
31 pub last_error_date: Option<DateTime<Utc>>,
32
33 pub last_error_message: Option<String>,
36
37 #[serde(default, with = "crate::types::serde_opt_date_from_unix_timestamp")]
40 pub last_synchronization_error_date: Option<DateTime<Utc>>,
41
42 pub max_connections: Option<u32>,
45
46 pub allowed_updates: Option<Vec<AllowedUpdate>>,
49}
50
51#[test]
53fn empty_url() {
54 let json = r#"{"url":"","has_custom_certificate":false,"pending_update_count":0,"allowed_updates":["message"]}"#;
55 let actual: WebhookInfo = serde_json::from_str(json).unwrap();
56 let expected = WebhookInfo {
57 url: None,
58 has_custom_certificate: false,
59 pending_update_count: 0,
60 ip_address: None,
61 last_error_date: None,
62 last_error_message: None,
63 last_synchronization_error_date: None,
64 max_connections: None,
65 allowed_updates: Some(vec![AllowedUpdate::Message]),
66 };
67
68 assert_eq!(actual, expected);
69}