Use serde(flatten) for BusinessConnectionId

This commit is contained in:
Akshett Rai Jindal 2024-08-24 15:29:52 +05:30
parent 951c8f1438
commit 17b3807d3f
4 changed files with 6 additions and 22 deletions

View file

@ -2,33 +2,15 @@ use serde::{Deserialize, Serialize};
/// A unique business connection identifier. /// A unique business connection identifier.
#[derive(Default, Clone, Debug, derive_more::Display, PartialEq, Eq, Hash, Serialize, Deserialize)] #[derive(Default, Clone, Debug, derive_more::Display, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(from = "BusinessConnectionIdRaw", into = "BusinessConnectionIdRaw")]
pub struct BusinessConnectionId(pub String); pub struct BusinessConnectionId(pub String);
#[derive(Serialize, Deserialize)]
struct BusinessConnectionIdRaw {
business_connection_id: String,
}
impl From<BusinessConnectionIdRaw> for BusinessConnectionId {
fn from(BusinessConnectionIdRaw { business_connection_id }: BusinessConnectionIdRaw) -> Self {
BusinessConnectionId(business_connection_id)
}
}
impl From<BusinessConnectionId> for BusinessConnectionIdRaw {
fn from(BusinessConnectionId(business_connection_id): BusinessConnectionId) -> Self {
BusinessConnectionIdRaw { business_connection_id }
}
}
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use crate::types::BusinessConnectionId; use crate::types::BusinessConnectionId;
#[test] #[test]
fn business_connection_id_deser() { fn business_connection_id_deser() {
let json = r#"{"business_connection_id": "abcd1234"}"#; let json = r#""abcd1234""#;
let bcid: BusinessConnectionId = serde_json::from_str(json).unwrap(); let bcid: BusinessConnectionId = serde_json::from_str(json).unwrap();
assert_eq!(bcid, BusinessConnectionId(String::from("abcd1234"))); assert_eq!(bcid, BusinessConnectionId(String::from("abcd1234")));
} }
@ -37,6 +19,6 @@ mod tests {
fn business_connection_id_ser() { fn business_connection_id_ser() {
let bcid: BusinessConnectionId = BusinessConnectionId(String::from("abcd1234")); let bcid: BusinessConnectionId = BusinessConnectionId(String::from("abcd1234"));
let json = serde_json::to_string(&bcid).unwrap(); let json = serde_json::to_string(&bcid).unwrap();
assert_eq!(json, r#"{"business_connection_id":"abcd1234"}"#); assert_eq!(json, r#""abcd1234""#);
} }
} }

View file

@ -7,6 +7,7 @@ use crate::types::{BusinessConnectionId, Chat, MessageId};
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] #[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct BusinessMessagesDeleted { pub struct BusinessMessagesDeleted {
/// Unique identifier of the business connection. /// Unique identifier of the business connection.
#[serde(flatten)]
pub business_connection_id: BusinessConnectionId, pub business_connection_id: BusinessConnectionId,
/// Information about a chat in the business account. The bot may not have /// Information about a chat in the business account. The bot may not have

View file

@ -169,6 +169,7 @@ pub struct MessageCommon {
/// received. If non-empty, the message belongs to a chat of the /// received. If non-empty, the message belongs to a chat of the
/// corresponding business account that is independent from any potential /// corresponding business account that is independent from any potential
/// bot chat which might share the same identifier. /// bot chat which might share the same identifier.
#[serde(flatten)]
pub business_connection_id: Option<BusinessConnectionId>, pub business_connection_id: Option<BusinessConnectionId>,
} }

View file

@ -1007,7 +1007,7 @@ mod test {
"#; "#;
let chat = Chat { let chat = Chat {
id: ChatId(-1002199793788), id: ChatId(-1002199793788),
kind: ChatKind::Public(ChatPublic { kind: ChatKind::Public(Box::new(ChatPublic {
title: Some("тест".to_owned()), title: Some("тест".to_owned()),
kind: PublicChatKind::Supergroup(PublicChatSupergroup { kind: PublicChatKind::Supergroup(PublicChatSupergroup {
username: None, username: None,
@ -1027,7 +1027,7 @@ mod test {
description: None, description: None,
invite_link: None, invite_link: None,
has_protected_content: None, has_protected_content: None,
}), })),
photo: None, photo: None,
available_reactions: None, available_reactions: None,
pinned_message: None, pinned_message: None,