#![allow(dead_code)]
use serde::{Deserialize, Deserializer, Serialize, Serializer, de::DeserializeOwned};
pub const MILKY_VERSION: &str = "1.2";
pub const MILKY_PACKAGE_VERSION: &str = "1.2.2";
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(bound(serialize = "T: Serialize", deserialize = "T: Deserialize<'de>",))]
pub struct ApiGeneralResponse<T> {
#[serde(rename = "status")]
pub status: String,
#[serde(rename = "retcode")]
pub retcode: i32,
#[serde(rename = "data", default, skip_serializing_if = "Option::is_none")]
pub data: Option<T>,
#[serde(rename = "message", default, skip_serializing_if = "Option::is_none")]
pub message: Option<String>,
}
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Serialize, Deserialize)]
pub struct ApiEmptyStruct {}
impl From<()> for ApiEmptyStruct {
fn from(_: ()) -> Self {
Self {}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(tag = "event_type")]
pub enum Event {
#[serde(rename = "bot_offline")]
BotOffline {
#[serde(rename = "time")]
time: i64,
#[serde(rename = "self_id")]
self_id: i64,
#[serde(rename = "data")]
data: EventBotOfflineData,
},
#[serde(rename = "message_receive")]
MessageReceive {
#[serde(rename = "time")]
time: i64,
#[serde(rename = "self_id")]
self_id: i64,
#[serde(rename = "data")]
data: IncomingMessage,
},
#[serde(rename = "message_recall")]
MessageRecall {
#[serde(rename = "time")]
time: i64,
#[serde(rename = "self_id")]
self_id: i64,
#[serde(rename = "data")]
data: EventMessageRecallData,
},
#[serde(rename = "peer_pin_change")]
PeerPinChange {
#[serde(rename = "time")]
time: i64,
#[serde(rename = "self_id")]
self_id: i64,
#[serde(rename = "data")]
data: EventPeerPinChangeData,
},
#[serde(rename = "friend_request")]
FriendRequest {
#[serde(rename = "time")]
time: i64,
#[serde(rename = "self_id")]
self_id: i64,
#[serde(rename = "data")]
data: EventFriendRequestData,
},
#[serde(rename = "group_join_request")]
GroupJoinRequest {
#[serde(rename = "time")]
time: i64,
#[serde(rename = "self_id")]
self_id: i64,
#[serde(rename = "data")]
data: EventGroupJoinRequestData,
},
#[serde(rename = "group_invited_join_request")]
GroupInvitedJoinRequest {
#[serde(rename = "time")]
time: i64,
#[serde(rename = "self_id")]
self_id: i64,
#[serde(rename = "data")]
data: EventGroupInvitedJoinRequestData,
},
#[serde(rename = "group_invitation")]
GroupInvitation {
#[serde(rename = "time")]
time: i64,
#[serde(rename = "self_id")]
self_id: i64,
#[serde(rename = "data")]
data: EventGroupInvitationData,
},
#[serde(rename = "friend_nudge")]
FriendNudge {
#[serde(rename = "time")]
time: i64,
#[serde(rename = "self_id")]
self_id: i64,
#[serde(rename = "data")]
data: EventFriendNudgeData,
},
#[serde(rename = "friend_file_upload")]
FriendFileUpload {
#[serde(rename = "time")]
time: i64,
#[serde(rename = "self_id")]
self_id: i64,
#[serde(rename = "data")]
data: EventFriendFileUploadData,
},
#[serde(rename = "group_admin_change")]
GroupAdminChange {
#[serde(rename = "time")]
time: i64,
#[serde(rename = "self_id")]
self_id: i64,
#[serde(rename = "data")]
data: EventGroupAdminChangeData,
},
#[serde(rename = "group_essence_message_change")]
GroupEssenceMessageChange {
#[serde(rename = "time")]
time: i64,
#[serde(rename = "self_id")]
self_id: i64,
#[serde(rename = "data")]
data: EventGroupEssenceMessageChangeData,
},
#[serde(rename = "group_member_increase")]
GroupMemberIncrease {
#[serde(rename = "time")]
time: i64,
#[serde(rename = "self_id")]
self_id: i64,
#[serde(rename = "data")]
data: EventGroupMemberIncreaseData,
},
#[serde(rename = "group_member_decrease")]
GroupMemberDecrease {
#[serde(rename = "time")]
time: i64,
#[serde(rename = "self_id")]
self_id: i64,
#[serde(rename = "data")]
data: EventGroupMemberDecreaseData,
},
#[serde(rename = "group_name_change")]
GroupNameChange {
#[serde(rename = "time")]
time: i64,
#[serde(rename = "self_id")]
self_id: i64,
#[serde(rename = "data")]
data: EventGroupNameChangeData,
},
#[serde(rename = "group_message_reaction")]
GroupMessageReaction {
#[serde(rename = "time")]
time: i64,
#[serde(rename = "self_id")]
self_id: i64,
#[serde(rename = "data")]
data: EventGroupMessageReactionData,
},
#[serde(rename = "group_mute")]
GroupMute {
#[serde(rename = "time")]
time: i64,
#[serde(rename = "self_id")]
self_id: i64,
#[serde(rename = "data")]
data: EventGroupMuteData,
},
#[serde(rename = "group_whole_mute")]
GroupWholeMute {
#[serde(rename = "time")]
time: i64,
#[serde(rename = "self_id")]
self_id: i64,
#[serde(rename = "data")]
data: EventGroupWholeMuteData,
},
#[serde(rename = "group_nudge")]
GroupNudge {
#[serde(rename = "time")]
time: i64,
#[serde(rename = "self_id")]
self_id: i64,
#[serde(rename = "data")]
data: EventGroupNudgeData,
},
#[serde(rename = "group_file_upload")]
GroupFileUpload {
#[serde(rename = "time")]
time: i64,
#[serde(rename = "self_id")]
self_id: i64,
#[serde(rename = "data")]
data: EventGroupFileUploadData,
},
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct EventBotOfflineData {
#[serde(rename = "reason")]
pub reason: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct EventMessageRecallData {
#[serde(rename = "message_scene")]
pub message_scene: String,
#[serde(rename = "peer_id")]
pub peer_id: i64,
#[serde(rename = "message_seq")]
pub message_seq: i64,
#[serde(rename = "sender_id")]
pub sender_id: i64,
#[serde(rename = "operator_id")]
pub operator_id: i64,
#[serde(rename = "display_suffix")]
pub display_suffix: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct EventPeerPinChangeData {
#[serde(rename = "message_scene")]
pub message_scene: String,
#[serde(rename = "peer_id")]
pub peer_id: i64,
#[serde(rename = "is_pinned")]
pub is_pinned: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct EventFriendRequestData {
#[serde(rename = "initiator_id")]
pub initiator_id: i64,
#[serde(rename = "initiator_uid")]
pub initiator_uid: String,
#[serde(rename = "comment")]
pub comment: String,
#[serde(rename = "via")]
pub via: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct EventGroupJoinRequestData {
#[serde(rename = "group_id")]
pub group_id: i64,
#[serde(rename = "notification_seq")]
pub notification_seq: i64,
#[serde(rename = "is_filtered")]
pub is_filtered: bool,
#[serde(rename = "initiator_id")]
pub initiator_id: i64,
#[serde(rename = "comment")]
pub comment: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct EventGroupInvitedJoinRequestData {
#[serde(rename = "group_id")]
pub group_id: i64,
#[serde(rename = "notification_seq")]
pub notification_seq: i64,
#[serde(rename = "initiator_id")]
pub initiator_id: i64,
#[serde(rename = "target_user_id")]
pub target_user_id: i64,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct EventGroupInvitationData {
#[serde(rename = "group_id")]
pub group_id: i64,
#[serde(rename = "invitation_seq")]
pub invitation_seq: i64,
#[serde(rename = "initiator_id")]
pub initiator_id: i64,
#[serde(
rename = "source_group_id",
default,
skip_serializing_if = "Option::is_none"
)]
pub source_group_id: Option<i64>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct EventFriendNudgeData {
#[serde(rename = "user_id")]
pub user_id: i64,
#[serde(rename = "is_self_send")]
pub is_self_send: bool,
#[serde(rename = "is_self_receive")]
pub is_self_receive: bool,
#[serde(rename = "display_action")]
pub display_action: String,
#[serde(rename = "display_suffix")]
pub display_suffix: String,
#[serde(rename = "display_action_img_url")]
pub display_action_img_url: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct EventFriendFileUploadData {
#[serde(rename = "user_id")]
pub user_id: i64,
#[serde(rename = "file_id")]
pub file_id: String,
#[serde(rename = "file_name")]
pub file_name: String,
#[serde(rename = "file_size")]
pub file_size: i64,
#[serde(rename = "file_hash")]
pub file_hash: String,
#[serde(rename = "is_self")]
pub is_self: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct EventGroupAdminChangeData {
#[serde(rename = "group_id")]
pub group_id: i64,
#[serde(rename = "user_id")]
pub user_id: i64,
#[serde(rename = "operator_id")]
pub operator_id: i64,
#[serde(rename = "is_set")]
pub is_set: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct EventGroupEssenceMessageChangeData {
#[serde(rename = "group_id")]
pub group_id: i64,
#[serde(rename = "message_seq")]
pub message_seq: i64,
#[serde(rename = "operator_id")]
pub operator_id: i64,
#[serde(rename = "is_set")]
pub is_set: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct EventGroupMemberIncreaseData {
#[serde(rename = "group_id")]
pub group_id: i64,
#[serde(rename = "user_id")]
pub user_id: i64,
#[serde(
rename = "operator_id",
default,
skip_serializing_if = "Option::is_none"
)]
pub operator_id: Option<i64>,
#[serde(
rename = "invitor_id",
default,
skip_serializing_if = "Option::is_none"
)]
pub invitor_id: Option<i64>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct EventGroupMemberDecreaseData {
#[serde(rename = "group_id")]
pub group_id: i64,
#[serde(rename = "user_id")]
pub user_id: i64,
#[serde(
rename = "operator_id",
default,
skip_serializing_if = "Option::is_none"
)]
pub operator_id: Option<i64>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct EventGroupNameChangeData {
#[serde(rename = "group_id")]
pub group_id: i64,
#[serde(rename = "new_group_name")]
pub new_group_name: String,
#[serde(rename = "operator_id")]
pub operator_id: i64,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct EventGroupMessageReactionData {
#[serde(rename = "group_id")]
pub group_id: i64,
#[serde(rename = "user_id")]
pub user_id: i64,
#[serde(rename = "message_seq")]
pub message_seq: i64,
#[serde(rename = "face_id")]
pub face_id: String,
#[serde(rename = "reaction_type")]
pub reaction_type: String,
#[serde(rename = "is_add")]
pub is_add: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct EventGroupMuteData {
#[serde(rename = "group_id")]
pub group_id: i64,
#[serde(rename = "user_id")]
pub user_id: i64,
#[serde(rename = "operator_id")]
pub operator_id: i64,
#[serde(rename = "duration")]
pub duration: i32,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct EventGroupWholeMuteData {
#[serde(rename = "group_id")]
pub group_id: i64,
#[serde(rename = "operator_id")]
pub operator_id: i64,
#[serde(rename = "is_mute")]
pub is_mute: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct EventGroupNudgeData {
#[serde(rename = "group_id")]
pub group_id: i64,
#[serde(rename = "sender_id")]
pub sender_id: i64,
#[serde(rename = "receiver_id")]
pub receiver_id: i64,
#[serde(rename = "display_action")]
pub display_action: String,
#[serde(rename = "display_suffix")]
pub display_suffix: String,
#[serde(rename = "display_action_img_url")]
pub display_action_img_url: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct EventGroupFileUploadData {
#[serde(rename = "group_id")]
pub group_id: i64,
#[serde(rename = "user_id")]
pub user_id: i64,
#[serde(rename = "file_id")]
pub file_id: String,
#[serde(rename = "file_name")]
pub file_name: String,
#[serde(rename = "file_size")]
pub file_size: i64,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct FriendEntity {
#[serde(rename = "user_id")]
pub user_id: i64,
#[serde(rename = "nickname")]
pub nickname: String,
#[serde(rename = "sex")]
pub sex: String,
#[serde(rename = "qid")]
pub qid: String,
#[serde(rename = "remark")]
pub remark: String,
#[serde(rename = "category")]
pub category: FriendCategoryEntity,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct FriendCategoryEntity {
#[serde(rename = "category_id")]
pub category_id: i32,
#[serde(rename = "category_name")]
pub category_name: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GroupEntity {
#[serde(rename = "group_id")]
pub group_id: i64,
#[serde(rename = "group_name")]
pub group_name: String,
#[serde(rename = "member_count")]
pub member_count: i32,
#[serde(rename = "max_member_count")]
pub max_member_count: i32,
#[serde(rename = "remark")]
pub remark: String,
#[serde(rename = "created_time")]
pub created_time: i64,
#[serde(rename = "description")]
pub description: String,
#[serde(rename = "question")]
pub question: String,
#[serde(rename = "announcement")]
pub announcement: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GroupMemberEntity {
#[serde(rename = "user_id")]
pub user_id: i64,
#[serde(rename = "nickname")]
pub nickname: String,
#[serde(rename = "sex")]
pub sex: String,
#[serde(rename = "group_id")]
pub group_id: i64,
#[serde(rename = "card")]
pub card: String,
#[serde(rename = "title")]
pub title: String,
#[serde(rename = "level")]
pub level: i32,
#[serde(rename = "role")]
pub role: String,
#[serde(rename = "join_time")]
pub join_time: i64,
#[serde(rename = "last_sent_time")]
pub last_sent_time: i64,
#[serde(
rename = "shut_up_end_time",
default,
skip_serializing_if = "Option::is_none"
)]
pub shut_up_end_time: Option<i64>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GroupAnnouncementEntity {
#[serde(rename = "group_id")]
pub group_id: i64,
#[serde(rename = "announcement_id")]
pub announcement_id: String,
#[serde(rename = "user_id")]
pub user_id: i64,
#[serde(rename = "time")]
pub time: i64,
#[serde(rename = "content")]
pub content: String,
#[serde(rename = "image_url", default, skip_serializing_if = "Option::is_none")]
pub image_url: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GroupFileEntity {
#[serde(rename = "group_id")]
pub group_id: i64,
#[serde(rename = "file_id")]
pub file_id: String,
#[serde(rename = "file_name")]
pub file_name: String,
#[serde(rename = "parent_folder_id")]
pub parent_folder_id: String,
#[serde(rename = "file_size")]
pub file_size: i64,
#[serde(rename = "uploaded_time")]
pub uploaded_time: i64,
#[serde(
rename = "expire_time",
default,
skip_serializing_if = "Option::is_none"
)]
pub expire_time: Option<i64>,
#[serde(rename = "uploader_id")]
pub uploader_id: i64,
#[serde(rename = "downloaded_times")]
pub downloaded_times: i32,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GroupFolderEntity {
#[serde(rename = "group_id")]
pub group_id: i64,
#[serde(rename = "folder_id")]
pub folder_id: String,
#[serde(rename = "parent_folder_id")]
pub parent_folder_id: String,
#[serde(rename = "folder_name")]
pub folder_name: String,
#[serde(rename = "created_time")]
pub created_time: i64,
#[serde(rename = "last_modified_time")]
pub last_modified_time: i64,
#[serde(rename = "creator_id")]
pub creator_id: i64,
#[serde(rename = "file_count")]
pub file_count: i32,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct FriendRequest {
#[serde(rename = "time")]
pub time: i64,
#[serde(rename = "initiator_id")]
pub initiator_id: i64,
#[serde(rename = "initiator_uid")]
pub initiator_uid: String,
#[serde(rename = "target_user_id")]
pub target_user_id: i64,
#[serde(rename = "target_user_uid")]
pub target_user_uid: String,
#[serde(rename = "state")]
pub state: String,
#[serde(rename = "comment")]
pub comment: String,
#[serde(rename = "via")]
pub via: String,
#[serde(rename = "is_filtered")]
pub is_filtered: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(tag = "type")]
pub enum GroupNotification {
#[serde(rename = "join_request")]
JoinRequest {
#[serde(rename = "group_id")]
group_id: i64,
#[serde(rename = "notification_seq")]
notification_seq: i64,
#[serde(rename = "is_filtered")]
is_filtered: bool,
#[serde(rename = "initiator_id")]
initiator_id: i64,
#[serde(rename = "state")]
state: String,
#[serde(
rename = "operator_id",
default,
skip_serializing_if = "Option::is_none"
)]
operator_id: Option<i64>,
#[serde(rename = "comment")]
comment: String,
},
#[serde(rename = "admin_change")]
AdminChange {
#[serde(rename = "group_id")]
group_id: i64,
#[serde(rename = "notification_seq")]
notification_seq: i64,
#[serde(rename = "target_user_id")]
target_user_id: i64,
#[serde(rename = "is_set")]
is_set: bool,
#[serde(rename = "operator_id")]
operator_id: i64,
},
#[serde(rename = "kick")]
Kick {
#[serde(rename = "group_id")]
group_id: i64,
#[serde(rename = "notification_seq")]
notification_seq: i64,
#[serde(rename = "target_user_id")]
target_user_id: i64,
#[serde(rename = "operator_id")]
operator_id: i64,
},
#[serde(rename = "quit")]
Quit {
#[serde(rename = "group_id")]
group_id: i64,
#[serde(rename = "notification_seq")]
notification_seq: i64,
#[serde(rename = "target_user_id")]
target_user_id: i64,
},
#[serde(rename = "invited_join_request")]
InvitedJoinRequest {
#[serde(rename = "group_id")]
group_id: i64,
#[serde(rename = "notification_seq")]
notification_seq: i64,
#[serde(rename = "initiator_id")]
initiator_id: i64,
#[serde(rename = "target_user_id")]
target_user_id: i64,
#[serde(rename = "state")]
state: String,
#[serde(
rename = "operator_id",
default,
skip_serializing_if = "Option::is_none"
)]
operator_id: Option<i64>,
},
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(tag = "message_scene")]
pub enum IncomingMessage {
#[serde(rename = "friend")]
Friend {
#[serde(rename = "peer_id")]
peer_id: i64,
#[serde(rename = "message_seq")]
message_seq: i64,
#[serde(rename = "sender_id")]
sender_id: i64,
#[serde(rename = "time")]
time: i64,
#[serde(
rename = "segments",
deserialize_with = "deserialize_incoming_segment_list"
)]
segments: Vec<IncomingSegment>,
#[serde(rename = "friend")]
friend: FriendEntity,
},
#[serde(rename = "group")]
Group {
#[serde(rename = "peer_id")]
peer_id: i64,
#[serde(rename = "message_seq")]
message_seq: i64,
#[serde(rename = "sender_id")]
sender_id: i64,
#[serde(rename = "time")]
time: i64,
#[serde(
rename = "segments",
deserialize_with = "deserialize_incoming_segment_list"
)]
segments: Vec<IncomingSegment>,
#[serde(rename = "group")]
group: GroupEntity,
#[serde(rename = "group_member")]
group_member: GroupMemberEntity,
},
#[serde(rename = "temp")]
Temp {
#[serde(rename = "peer_id")]
peer_id: i64,
#[serde(rename = "message_seq")]
message_seq: i64,
#[serde(rename = "sender_id")]
sender_id: i64,
#[serde(rename = "time")]
time: i64,
#[serde(
rename = "segments",
deserialize_with = "deserialize_incoming_segment_list"
)]
segments: Vec<IncomingSegment>,
#[serde(rename = "group", default, skip_serializing_if = "Option::is_none")]
group: Option<GroupEntity>,
},
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct IncomingForwardedMessage {
#[serde(rename = "message_seq")]
pub message_seq: i64,
#[serde(rename = "sender_name")]
pub sender_name: String,
#[serde(rename = "avatar_url")]
pub avatar_url: String,
#[serde(rename = "time")]
pub time: i64,
#[serde(
rename = "segments",
deserialize_with = "deserialize_incoming_segment_list"
)]
pub segments: Vec<IncomingSegment>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GroupEssenceMessage {
#[serde(rename = "group_id")]
pub group_id: i64,
#[serde(rename = "message_seq")]
pub message_seq: i64,
#[serde(rename = "message_time")]
pub message_time: i64,
#[serde(rename = "sender_id")]
pub sender_id: i64,
#[serde(rename = "sender_name")]
pub sender_name: String,
#[serde(rename = "operator_id")]
pub operator_id: i64,
#[serde(rename = "operator_name")]
pub operator_name: String,
#[serde(rename = "operation_time")]
pub operation_time: i64,
#[serde(
rename = "segments",
deserialize_with = "deserialize_incoming_segment_list"
)]
pub segments: Vec<IncomingSegment>,
}
#[derive(Debug, Clone, PartialEq)]
pub enum IncomingSegment {
Text(String),
Mention(IncomingSegmentMentionData),
MentionAll,
Face(IncomingSegmentFaceData),
Reply(IncomingSegmentReplyData),
Image(IncomingSegmentImageData),
Record(IncomingSegmentRecordData),
Video(IncomingSegmentVideoData),
File(IncomingSegmentFileData),
Forward(IncomingSegmentForwardData),
MarketFace(IncomingSegmentMarketFaceData),
LightApp(IncomingSegmentLightAppData),
Xml(IncomingSegmentXmlData),
}
impl Serialize for IncomingSegment {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
match self {
IncomingSegment::Text(text) => serialize_segment_with_data(
serializer,
"text",
&IncomingSegmentTextData { text: text.clone() },
),
IncomingSegment::Mention(data) => serialize_segment_with_data(serializer, "mention", data),
IncomingSegment::MentionAll => {
serialize_segment_with_data(serializer, "mention_all", &IncomingSegmentMentionAllData {})
}
IncomingSegment::Face(data) => serialize_segment_with_data(serializer, "face", data),
IncomingSegment::Reply(data) => serialize_segment_with_data(serializer, "reply", data),
IncomingSegment::Image(data) => serialize_segment_with_data(serializer, "image", data),
IncomingSegment::Record(data) => serialize_segment_with_data(serializer, "record", data),
IncomingSegment::Video(data) => serialize_segment_with_data(serializer, "video", data),
IncomingSegment::File(data) => serialize_segment_with_data(serializer, "file", data),
IncomingSegment::Forward(data) => serialize_segment_with_data(serializer, "forward", data),
IncomingSegment::MarketFace(data) => {
serialize_segment_with_data(serializer, "market_face", data)
}
IncomingSegment::LightApp(data) => serialize_segment_with_data(serializer, "light_app", data),
IncomingSegment::Xml(data) => serialize_segment_with_data(serializer, "xml", data),
}
}
}
impl<'de> Deserialize<'de> for IncomingSegment {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: Deserializer<'de>,
{
let value = serde_json::Value::deserialize(deserializer)?;
match deserialize_segment_type::<D::Error>(&value)? {
"text" => Ok(Self::Text(
deserialize_segment_data::<D::Error, IncomingSegmentTextData>(&value)?.text,
)),
"mention" => Ok(Self::Mention(deserialize_segment_data(&value)?)),
"mention_all" => {
let _: IncomingSegmentMentionAllData = deserialize_segment_data(&value)?;
Ok(Self::MentionAll)
}
"face" => Ok(Self::Face(deserialize_segment_data(&value)?)),
"reply" => Ok(Self::Reply(deserialize_segment_data(&value)?)),
"image" => Ok(Self::Image(deserialize_segment_data(&value)?)),
"record" => Ok(Self::Record(deserialize_segment_data(&value)?)),
"video" => Ok(Self::Video(deserialize_segment_data(&value)?)),
"file" => Ok(Self::File(deserialize_segment_data(&value)?)),
"forward" => Ok(Self::Forward(deserialize_segment_data(&value)?)),
"market_face" => Ok(Self::MarketFace(deserialize_segment_data(&value)?)),
"light_app" => Ok(Self::LightApp(deserialize_segment_data(&value)?)),
"xml" => Ok(Self::Xml(deserialize_segment_data(&value)?)),
other => Err(serde::de::Error::unknown_variant(
other,
&[
"text",
"mention",
"mention_all",
"face",
"reply",
"image",
"record",
"video",
"file",
"forward",
"market_face",
"light_app",
"xml",
],
)),
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct IncomingSegmentTextData {
#[serde(rename = "text")]
pub text: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct IncomingSegmentMentionData {
#[serde(rename = "user_id")]
pub user_id: i64,
#[serde(rename = "name")]
pub name: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct IncomingSegmentMentionAllData {}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct IncomingSegmentFaceData {
#[serde(rename = "face_id")]
pub face_id: String,
#[serde(rename = "is_large")]
pub is_large: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct IncomingSegmentReplyData {
#[serde(rename = "message_seq")]
pub message_seq: i64,
#[serde(rename = "sender_id")]
pub sender_id: i64,
#[serde(
rename = "sender_name",
default,
skip_serializing_if = "Option::is_none"
)]
pub sender_name: Option<String>,
#[serde(rename = "time")]
pub time: i64,
#[serde(
rename = "segments",
deserialize_with = "deserialize_incoming_segment_list"
)]
pub segments: Vec<IncomingSegment>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct IncomingSegmentImageData {
#[serde(rename = "resource_id")]
pub resource_id: String,
#[serde(rename = "temp_url")]
pub temp_url: String,
#[serde(rename = "width")]
pub width: i32,
#[serde(rename = "height")]
pub height: i32,
#[serde(rename = "summary")]
pub summary: String,
#[serde(rename = "sub_type")]
pub sub_type: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct IncomingSegmentRecordData {
#[serde(rename = "resource_id")]
pub resource_id: String,
#[serde(rename = "temp_url")]
pub temp_url: String,
#[serde(rename = "duration")]
pub duration: i32,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct IncomingSegmentVideoData {
#[serde(rename = "resource_id")]
pub resource_id: String,
#[serde(rename = "temp_url")]
pub temp_url: String,
#[serde(rename = "width")]
pub width: i32,
#[serde(rename = "height")]
pub height: i32,
#[serde(rename = "duration")]
pub duration: i32,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct IncomingSegmentFileData {
#[serde(rename = "file_id")]
pub file_id: String,
#[serde(rename = "file_name")]
pub file_name: String,
#[serde(rename = "file_size")]
pub file_size: i64,
#[serde(rename = "file_hash", default, skip_serializing_if = "Option::is_none")]
pub file_hash: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct IncomingSegmentForwardData {
#[serde(rename = "forward_id")]
pub forward_id: String,
#[serde(rename = "title")]
pub title: String,
#[serde(rename = "preview")]
pub preview: Vec<String>,
#[serde(rename = "summary")]
pub summary: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct IncomingSegmentMarketFaceData {
#[serde(rename = "emoji_package_id")]
pub emoji_package_id: i32,
#[serde(rename = "emoji_id")]
pub emoji_id: String,
#[serde(rename = "key")]
pub key: String,
#[serde(rename = "summary")]
pub summary: String,
#[serde(rename = "url")]
pub url: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct IncomingSegmentLightAppData {
#[serde(rename = "app_name")]
pub app_name: String,
#[serde(rename = "json_payload")]
pub json_payload: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct IncomingSegmentXmlData {
#[serde(rename = "service_id")]
pub service_id: i32,
#[serde(rename = "xml_payload")]
pub xml_payload: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct OutgoingForwardedMessage {
#[serde(rename = "user_id")]
pub user_id: i64,
#[serde(rename = "sender_name")]
pub sender_name: String,
#[serde(
rename = "segments",
deserialize_with = "deserialize_drop_bad_outgoing_segment_list"
)]
pub segments: Vec<OutgoingSegment>,
}
#[derive(Debug, Clone, PartialEq)]
pub enum OutgoingSegment {
Text(String),
Mention(i64),
MentionAll,
Face(OutgoingSegmentFaceData),
Reply(i64),
Image(OutgoingSegmentImageData),
Record(String),
Video(OutgoingSegmentVideoData),
Forward(OutgoingSegmentForwardData),
LightApp(String),
}
impl Serialize for OutgoingSegment {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
match self {
OutgoingSegment::Text(text) => serialize_segment_with_data(
serializer,
"text",
&OutgoingSegmentTextData { text: text.clone() },
),
OutgoingSegment::Mention(user_id) => serialize_segment_with_data(
serializer,
"mention",
&OutgoingSegmentMentionData { user_id: *user_id },
),
OutgoingSegment::MentionAll => {
serialize_segment_with_data(serializer, "mention_all", &OutgoingSegmentMentionAllData {})
}
OutgoingSegment::Face(data) => serialize_segment_with_data(serializer, "face", data),
OutgoingSegment::Reply(message_seq) => serialize_segment_with_data(
serializer,
"reply",
&OutgoingSegmentReplyData {
message_seq: *message_seq,
},
),
OutgoingSegment::Image(data) => serialize_segment_with_data(serializer, "image", data),
OutgoingSegment::Record(uri) => serialize_segment_with_data(
serializer,
"record",
&OutgoingSegmentRecordData { uri: uri.clone() },
),
OutgoingSegment::Video(data) => serialize_segment_with_data(serializer, "video", data),
OutgoingSegment::Forward(data) => serialize_segment_with_data(serializer, "forward", data),
OutgoingSegment::LightApp(json_payload) => serialize_segment_with_data(
serializer,
"light_app",
&OutgoingSegmentLightAppData {
json_payload: json_payload.clone(),
},
),
}
}
}
impl<'de> Deserialize<'de> for OutgoingSegment {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: Deserializer<'de>,
{
let value = serde_json::Value::deserialize(deserializer)?;
match deserialize_segment_type::<D::Error>(&value)? {
"text" => Ok(Self::Text(
deserialize_segment_data::<D::Error, OutgoingSegmentTextData>(&value)?.text,
)),
"mention" => Ok(Self::Mention(
deserialize_segment_data::<D::Error, OutgoingSegmentMentionData>(&value)?.user_id,
)),
"mention_all" => {
let _: OutgoingSegmentMentionAllData = deserialize_segment_data(&value)?;
Ok(Self::MentionAll)
}
"face" => Ok(Self::Face(deserialize_segment_data(&value)?)),
"reply" => Ok(Self::Reply(
deserialize_segment_data::<D::Error, OutgoingSegmentReplyData>(&value)?.message_seq,
)),
"image" => Ok(Self::Image(deserialize_segment_data(&value)?)),
"record" => Ok(Self::Record(
deserialize_segment_data::<D::Error, OutgoingSegmentRecordData>(&value)?.uri,
)),
"video" => Ok(Self::Video(deserialize_segment_data(&value)?)),
"forward" => Ok(Self::Forward(deserialize_segment_data(&value)?)),
"light_app" => Ok(Self::LightApp(
deserialize_segment_data::<D::Error, OutgoingSegmentLightAppData>(&value)?.json_payload,
)),
other => Err(serde::de::Error::unknown_variant(
other,
&[
"text",
"mention",
"mention_all",
"face",
"reply",
"image",
"record",
"video",
"forward",
"light_app",
],
)),
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct OutgoingSegmentTextData {
#[serde(rename = "text")]
pub text: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct OutgoingSegmentMentionData {
#[serde(rename = "user_id")]
pub user_id: i64,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct OutgoingSegmentMentionAllData {}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct OutgoingSegmentFaceData {
#[serde(rename = "face_id")]
pub face_id: String,
#[serde(
rename = "is_large",
default = "default_outgoing_segment_face_data_is_large",
deserialize_with = "deserialize_outgoing_segment_face_data_is_large"
)]
pub is_large: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct OutgoingSegmentReplyData {
#[serde(rename = "message_seq")]
pub message_seq: i64,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct OutgoingSegmentImageData {
#[serde(rename = "uri")]
pub uri: String,
#[serde(
rename = "sub_type",
default = "default_outgoing_segment_image_data_sub_type",
deserialize_with = "deserialize_outgoing_segment_image_data_sub_type"
)]
pub sub_type: String,
#[serde(rename = "summary", default, skip_serializing_if = "Option::is_none")]
pub summary: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct OutgoingSegmentRecordData {
#[serde(rename = "uri")]
pub uri: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct OutgoingSegmentVideoData {
#[serde(rename = "uri")]
pub uri: String,
#[serde(rename = "thumb_uri", default, skip_serializing_if = "Option::is_none")]
pub thumb_uri: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct OutgoingSegmentForwardData {
#[serde(rename = "messages")]
pub messages: Vec<OutgoingForwardedMessage>,
#[serde(rename = "title", default, skip_serializing_if = "Option::is_none")]
pub title: Option<String>,
#[serde(rename = "preview", default, skip_serializing_if = "Option::is_none")]
pub preview: Option<Vec<String>>,
#[serde(rename = "summary", default, skip_serializing_if = "Option::is_none")]
pub summary: Option<String>,
#[serde(rename = "prompt", default, skip_serializing_if = "Option::is_none")]
pub prompt: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct OutgoingSegmentLightAppData {
#[serde(rename = "json_payload")]
pub json_payload: String,
}
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Serialize, Deserialize)]
pub struct GetLoginInfoInput {}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GetLoginInfoOutput {
#[serde(rename = "uin")]
pub uin: i64,
#[serde(rename = "nickname")]
pub nickname: String,
}
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Serialize, Deserialize)]
pub struct GetImplInfoInput {}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GetImplInfoOutput {
#[serde(rename = "impl_name")]
pub impl_name: String,
#[serde(rename = "impl_version")]
pub impl_version: String,
#[serde(rename = "qq_protocol_version")]
pub qq_protocol_version: String,
#[serde(rename = "qq_protocol_type")]
pub qq_protocol_type: String,
#[serde(rename = "milky_version")]
pub milky_version: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GetUserProfileInput {
#[serde(rename = "user_id")]
pub user_id: i64,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GetUserProfileOutput {
#[serde(rename = "nickname")]
pub nickname: String,
#[serde(rename = "qid")]
pub qid: String,
#[serde(rename = "age")]
pub age: i32,
#[serde(rename = "sex")]
pub sex: String,
#[serde(rename = "remark")]
pub remark: String,
#[serde(rename = "bio")]
pub bio: String,
#[serde(rename = "level")]
pub level: i32,
#[serde(rename = "country")]
pub country: String,
#[serde(rename = "city")]
pub city: String,
#[serde(rename = "school")]
pub school: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GetFriendListInput {
#[serde(
rename = "no_cache",
default = "default_get_friend_list_input_no_cache",
deserialize_with = "deserialize_get_friend_list_input_no_cache"
)]
pub no_cache: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GetFriendListOutput {
#[serde(rename = "friends")]
pub friends: Vec<FriendEntity>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GetFriendInfoInput {
#[serde(rename = "user_id")]
pub user_id: i64,
#[serde(
rename = "no_cache",
default = "default_get_friend_info_input_no_cache",
deserialize_with = "deserialize_get_friend_info_input_no_cache"
)]
pub no_cache: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GetFriendInfoOutput {
#[serde(rename = "friend")]
pub friend: FriendEntity,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GetGroupListInput {
#[serde(
rename = "no_cache",
default = "default_get_group_list_input_no_cache",
deserialize_with = "deserialize_get_group_list_input_no_cache"
)]
pub no_cache: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GetGroupListOutput {
#[serde(rename = "groups")]
pub groups: Vec<GroupEntity>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GetGroupInfoInput {
#[serde(rename = "group_id")]
pub group_id: i64,
#[serde(
rename = "no_cache",
default = "default_get_group_info_input_no_cache",
deserialize_with = "deserialize_get_group_info_input_no_cache"
)]
pub no_cache: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GetGroupInfoOutput {
#[serde(rename = "group")]
pub group: GroupEntity,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GetGroupMemberListInput {
#[serde(rename = "group_id")]
pub group_id: i64,
#[serde(
rename = "no_cache",
default = "default_get_group_member_list_input_no_cache",
deserialize_with = "deserialize_get_group_member_list_input_no_cache"
)]
pub no_cache: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GetGroupMemberListOutput {
#[serde(rename = "members")]
pub members: Vec<GroupMemberEntity>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GetGroupMemberInfoInput {
#[serde(rename = "group_id")]
pub group_id: i64,
#[serde(rename = "user_id")]
pub user_id: i64,
#[serde(
rename = "no_cache",
default = "default_get_group_member_info_input_no_cache",
deserialize_with = "deserialize_get_group_member_info_input_no_cache"
)]
pub no_cache: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GetGroupMemberInfoOutput {
#[serde(rename = "member")]
pub member: GroupMemberEntity,
}
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Serialize, Deserialize)]
pub struct GetPeerPinsInput {}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GetPeerPinsOutput {
#[serde(rename = "friends")]
pub friends: Vec<FriendEntity>,
#[serde(rename = "groups")]
pub groups: Vec<GroupEntity>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct SetPeerPinInput {
#[serde(rename = "message_scene")]
pub message_scene: String,
#[serde(rename = "peer_id")]
pub peer_id: i64,
#[serde(
rename = "is_pinned",
default = "default_set_peer_pin_input_is_pinned",
deserialize_with = "deserialize_set_peer_pin_input_is_pinned"
)]
pub is_pinned: bool,
}
pub type SetPeerPinOutput = ApiEmptyStruct;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct SetAvatarInput {
#[serde(rename = "uri")]
pub uri: String,
}
pub type SetAvatarOutput = ApiEmptyStruct;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct SetNicknameInput {
#[serde(rename = "new_nickname")]
pub new_nickname: String,
}
pub type SetNicknameOutput = ApiEmptyStruct;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct SetBioInput {
#[serde(rename = "new_bio")]
pub new_bio: String,
}
pub type SetBioOutput = ApiEmptyStruct;
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Serialize, Deserialize)]
pub struct GetCustomFaceUrlListInput {}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GetCustomFaceUrlListOutput {
#[serde(rename = "urls")]
pub urls: Vec<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GetCookiesInput {
#[serde(rename = "domain")]
pub domain: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GetCookiesOutput {
#[serde(rename = "cookies")]
pub cookies: String,
}
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Serialize, Deserialize)]
pub struct GetCsrfTokenInput {}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GetCsrfTokenOutput {
#[serde(rename = "csrf_token")]
pub csrf_token: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct SendPrivateMessageInput {
#[serde(rename = "user_id")]
pub user_id: i64,
#[serde(
rename = "message",
deserialize_with = "deserialize_drop_bad_outgoing_segment_list"
)]
pub message: Vec<OutgoingSegment>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct SendPrivateMessageOutput {
#[serde(rename = "message_seq")]
pub message_seq: i64,
#[serde(rename = "time")]
pub time: i64,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct SendGroupMessageInput {
#[serde(rename = "group_id")]
pub group_id: i64,
#[serde(
rename = "message",
deserialize_with = "deserialize_drop_bad_outgoing_segment_list"
)]
pub message: Vec<OutgoingSegment>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct SendGroupMessageOutput {
#[serde(rename = "message_seq")]
pub message_seq: i64,
#[serde(rename = "time")]
pub time: i64,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct RecallPrivateMessageInput {
#[serde(rename = "user_id")]
pub user_id: i64,
#[serde(rename = "message_seq")]
pub message_seq: i64,
}
pub type RecallPrivateMessageOutput = ApiEmptyStruct;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct RecallGroupMessageInput {
#[serde(rename = "group_id")]
pub group_id: i64,
#[serde(rename = "message_seq")]
pub message_seq: i64,
}
pub type RecallGroupMessageOutput = ApiEmptyStruct;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GetMessageInput {
#[serde(rename = "message_scene")]
pub message_scene: String,
#[serde(rename = "peer_id")]
pub peer_id: i64,
#[serde(rename = "message_seq")]
pub message_seq: i64,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GetMessageOutput {
#[serde(rename = "message")]
pub message: IncomingMessage,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GetHistoryMessagesInput {
#[serde(rename = "message_scene")]
pub message_scene: String,
#[serde(rename = "peer_id")]
pub peer_id: i64,
#[serde(
rename = "start_message_seq",
default,
skip_serializing_if = "Option::is_none"
)]
pub start_message_seq: Option<i64>,
#[serde(
rename = "limit",
default = "default_get_history_messages_input_limit",
deserialize_with = "deserialize_get_history_messages_input_limit"
)]
pub limit: i32,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GetHistoryMessagesOutput {
#[serde(
rename = "messages",
deserialize_with = "deserialize_drop_bad_incoming_message_list"
)]
pub messages: Vec<IncomingMessage>,
#[serde(
rename = "next_message_seq",
default,
skip_serializing_if = "Option::is_none"
)]
pub next_message_seq: Option<i64>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GetResourceTempUrlInput {
#[serde(rename = "resource_id")]
pub resource_id: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GetResourceTempUrlOutput {
#[serde(rename = "url")]
pub url: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GetForwardedMessagesInput {
#[serde(rename = "forward_id")]
pub forward_id: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GetForwardedMessagesOutput {
#[serde(rename = "messages")]
pub messages: Vec<IncomingForwardedMessage>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct MarkMessageAsReadInput {
#[serde(rename = "message_scene")]
pub message_scene: String,
#[serde(rename = "peer_id")]
pub peer_id: i64,
#[serde(rename = "message_seq")]
pub message_seq: i64,
}
pub type MarkMessageAsReadOutput = ApiEmptyStruct;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct SendFriendNudgeInput {
#[serde(rename = "user_id")]
pub user_id: i64,
#[serde(
rename = "is_self",
default = "default_send_friend_nudge_input_is_self",
deserialize_with = "deserialize_send_friend_nudge_input_is_self"
)]
pub is_self: bool,
}
pub type SendFriendNudgeOutput = ApiEmptyStruct;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct SendProfileLikeInput {
#[serde(rename = "user_id")]
pub user_id: i64,
#[serde(
rename = "count",
default = "default_send_profile_like_input_count",
deserialize_with = "deserialize_send_profile_like_input_count"
)]
pub count: i32,
}
pub type SendProfileLikeOutput = ApiEmptyStruct;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct DeleteFriendInput {
#[serde(rename = "user_id")]
pub user_id: i64,
}
pub type DeleteFriendOutput = ApiEmptyStruct;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GetFriendRequestsInput {
#[serde(
rename = "limit",
default = "default_get_friend_requests_input_limit",
deserialize_with = "deserialize_get_friend_requests_input_limit"
)]
pub limit: i32,
#[serde(
rename = "is_filtered",
default = "default_get_friend_requests_input_is_filtered",
deserialize_with = "deserialize_get_friend_requests_input_is_filtered"
)]
pub is_filtered: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GetFriendRequestsOutput {
#[serde(rename = "requests")]
pub requests: Vec<FriendRequest>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct AcceptFriendRequestInput {
#[serde(rename = "initiator_uid")]
pub initiator_uid: String,
#[serde(
rename = "is_filtered",
default = "default_accept_friend_request_input_is_filtered",
deserialize_with = "deserialize_accept_friend_request_input_is_filtered"
)]
pub is_filtered: bool,
}
pub type AcceptFriendRequestOutput = ApiEmptyStruct;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct RejectFriendRequestInput {
#[serde(rename = "initiator_uid")]
pub initiator_uid: String,
#[serde(
rename = "is_filtered",
default = "default_reject_friend_request_input_is_filtered",
deserialize_with = "deserialize_reject_friend_request_input_is_filtered"
)]
pub is_filtered: bool,
#[serde(rename = "reason", default, skip_serializing_if = "Option::is_none")]
pub reason: Option<String>,
}
pub type RejectFriendRequestOutput = ApiEmptyStruct;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct SetGroupNameInput {
#[serde(rename = "group_id")]
pub group_id: i64,
#[serde(rename = "new_group_name")]
pub new_group_name: String,
}
pub type SetGroupNameOutput = ApiEmptyStruct;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct SetGroupAvatarInput {
#[serde(rename = "group_id")]
pub group_id: i64,
#[serde(rename = "image_uri")]
pub image_uri: String,
}
pub type SetGroupAvatarOutput = ApiEmptyStruct;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct SetGroupMemberCardInput {
#[serde(rename = "group_id")]
pub group_id: i64,
#[serde(rename = "user_id")]
pub user_id: i64,
#[serde(rename = "card")]
pub card: String,
}
pub type SetGroupMemberCardOutput = ApiEmptyStruct;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct SetGroupMemberSpecialTitleInput {
#[serde(rename = "group_id")]
pub group_id: i64,
#[serde(rename = "user_id")]
pub user_id: i64,
#[serde(rename = "special_title")]
pub special_title: String,
}
pub type SetGroupMemberSpecialTitleOutput = ApiEmptyStruct;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct SetGroupMemberAdminInput {
#[serde(rename = "group_id")]
pub group_id: i64,
#[serde(rename = "user_id")]
pub user_id: i64,
#[serde(
rename = "is_set",
default = "default_set_group_member_admin_input_is_set",
deserialize_with = "deserialize_set_group_member_admin_input_is_set"
)]
pub is_set: bool,
}
pub type SetGroupMemberAdminOutput = ApiEmptyStruct;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct SetGroupMemberMuteInput {
#[serde(rename = "group_id")]
pub group_id: i64,
#[serde(rename = "user_id")]
pub user_id: i64,
#[serde(
rename = "duration",
default = "default_set_group_member_mute_input_duration",
deserialize_with = "deserialize_set_group_member_mute_input_duration"
)]
pub duration: i32,
}
pub type SetGroupMemberMuteOutput = ApiEmptyStruct;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct SetGroupWholeMuteInput {
#[serde(rename = "group_id")]
pub group_id: i64,
#[serde(
rename = "is_mute",
default = "default_set_group_whole_mute_input_is_mute",
deserialize_with = "deserialize_set_group_whole_mute_input_is_mute"
)]
pub is_mute: bool,
}
pub type SetGroupWholeMuteOutput = ApiEmptyStruct;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct KickGroupMemberInput {
#[serde(rename = "group_id")]
pub group_id: i64,
#[serde(rename = "user_id")]
pub user_id: i64,
#[serde(
rename = "reject_add_request",
default = "default_kick_group_member_input_reject_add_request",
deserialize_with = "deserialize_kick_group_member_input_reject_add_request"
)]
pub reject_add_request: bool,
}
pub type KickGroupMemberOutput = ApiEmptyStruct;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GetGroupAnnouncementsInput {
#[serde(rename = "group_id")]
pub group_id: i64,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GetGroupAnnouncementsOutput {
#[serde(rename = "announcements")]
pub announcements: Vec<GroupAnnouncementEntity>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct SendGroupAnnouncementInput {
#[serde(rename = "group_id")]
pub group_id: i64,
#[serde(rename = "content")]
pub content: String,
#[serde(rename = "image_uri", default, skip_serializing_if = "Option::is_none")]
pub image_uri: Option<String>,
}
pub type SendGroupAnnouncementOutput = ApiEmptyStruct;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct DeleteGroupAnnouncementInput {
#[serde(rename = "group_id")]
pub group_id: i64,
#[serde(rename = "announcement_id")]
pub announcement_id: String,
}
pub type DeleteGroupAnnouncementOutput = ApiEmptyStruct;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GetGroupEssenceMessagesInput {
#[serde(rename = "group_id")]
pub group_id: i64,
#[serde(rename = "page_index")]
pub page_index: i32,
#[serde(rename = "page_size")]
pub page_size: i32,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GetGroupEssenceMessagesOutput {
#[serde(rename = "messages")]
pub messages: Vec<GroupEssenceMessage>,
#[serde(rename = "is_end")]
pub is_end: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct SetGroupEssenceMessageInput {
#[serde(rename = "group_id")]
pub group_id: i64,
#[serde(rename = "message_seq")]
pub message_seq: i64,
#[serde(
rename = "is_set",
default = "default_set_group_essence_message_input_is_set",
deserialize_with = "deserialize_set_group_essence_message_input_is_set"
)]
pub is_set: bool,
}
pub type SetGroupEssenceMessageOutput = ApiEmptyStruct;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct QuitGroupInput {
#[serde(rename = "group_id")]
pub group_id: i64,
}
pub type QuitGroupOutput = ApiEmptyStruct;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct SendGroupMessageReactionInput {
#[serde(rename = "group_id")]
pub group_id: i64,
#[serde(rename = "message_seq")]
pub message_seq: i64,
#[serde(rename = "reaction")]
pub reaction: String,
#[serde(
rename = "reaction_type",
default = "default_send_group_message_reaction_input_reaction_type",
deserialize_with = "deserialize_send_group_message_reaction_input_reaction_type"
)]
pub reaction_type: String,
#[serde(
rename = "is_add",
default = "default_send_group_message_reaction_input_is_add",
deserialize_with = "deserialize_send_group_message_reaction_input_is_add"
)]
pub is_add: bool,
}
pub type SendGroupMessageReactionOutput = ApiEmptyStruct;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct SendGroupNudgeInput {
#[serde(rename = "group_id")]
pub group_id: i64,
#[serde(rename = "user_id")]
pub user_id: i64,
}
pub type SendGroupNudgeOutput = ApiEmptyStruct;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GetGroupNotificationsInput {
#[serde(
rename = "start_notification_seq",
default,
skip_serializing_if = "Option::is_none"
)]
pub start_notification_seq: Option<i64>,
#[serde(
rename = "is_filtered",
default = "default_get_group_notifications_input_is_filtered",
deserialize_with = "deserialize_get_group_notifications_input_is_filtered"
)]
pub is_filtered: bool,
#[serde(
rename = "limit",
default = "default_get_group_notifications_input_limit",
deserialize_with = "deserialize_get_group_notifications_input_limit"
)]
pub limit: i32,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GetGroupNotificationsOutput {
#[serde(
rename = "notifications",
deserialize_with = "deserialize_drop_bad_group_notification_list"
)]
pub notifications: Vec<GroupNotification>,
#[serde(
rename = "next_notification_seq",
default,
skip_serializing_if = "Option::is_none"
)]
pub next_notification_seq: Option<i64>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct AcceptGroupRequestInput {
#[serde(rename = "notification_seq")]
pub notification_seq: i64,
#[serde(rename = "notification_type")]
pub notification_type: String,
#[serde(rename = "group_id")]
pub group_id: i64,
#[serde(
rename = "is_filtered",
default = "default_accept_group_request_input_is_filtered",
deserialize_with = "deserialize_accept_group_request_input_is_filtered"
)]
pub is_filtered: bool,
}
pub type AcceptGroupRequestOutput = ApiEmptyStruct;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct RejectGroupRequestInput {
#[serde(rename = "notification_seq")]
pub notification_seq: i64,
#[serde(rename = "notification_type")]
pub notification_type: String,
#[serde(rename = "group_id")]
pub group_id: i64,
#[serde(
rename = "is_filtered",
default = "default_reject_group_request_input_is_filtered",
deserialize_with = "deserialize_reject_group_request_input_is_filtered"
)]
pub is_filtered: bool,
#[serde(rename = "reason", default, skip_serializing_if = "Option::is_none")]
pub reason: Option<String>,
}
pub type RejectGroupRequestOutput = ApiEmptyStruct;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct AcceptGroupInvitationInput {
#[serde(rename = "group_id")]
pub group_id: i64,
#[serde(rename = "invitation_seq")]
pub invitation_seq: i64,
}
pub type AcceptGroupInvitationOutput = ApiEmptyStruct;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct RejectGroupInvitationInput {
#[serde(rename = "group_id")]
pub group_id: i64,
#[serde(rename = "invitation_seq")]
pub invitation_seq: i64,
}
pub type RejectGroupInvitationOutput = ApiEmptyStruct;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct UploadPrivateFileInput {
#[serde(rename = "user_id")]
pub user_id: i64,
#[serde(rename = "file_uri")]
pub file_uri: String,
#[serde(rename = "file_name")]
pub file_name: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct UploadPrivateFileOutput {
#[serde(rename = "file_id")]
pub file_id: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct UploadGroupFileInput {
#[serde(rename = "group_id")]
pub group_id: i64,
#[serde(
rename = "parent_folder_id",
default = "default_upload_group_file_input_parent_folder_id",
deserialize_with = "deserialize_upload_group_file_input_parent_folder_id"
)]
pub parent_folder_id: String,
#[serde(rename = "file_uri")]
pub file_uri: String,
#[serde(rename = "file_name")]
pub file_name: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct UploadGroupFileOutput {
#[serde(rename = "file_id")]
pub file_id: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GetPrivateFileDownloadUrlInput {
#[serde(rename = "user_id")]
pub user_id: i64,
#[serde(rename = "file_id")]
pub file_id: String,
#[serde(rename = "file_hash")]
pub file_hash: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GetPrivateFileDownloadUrlOutput {
#[serde(rename = "download_url")]
pub download_url: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GetGroupFileDownloadUrlInput {
#[serde(rename = "group_id")]
pub group_id: i64,
#[serde(rename = "file_id")]
pub file_id: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GetGroupFileDownloadUrlOutput {
#[serde(rename = "download_url")]
pub download_url: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GetGroupFilesInput {
#[serde(rename = "group_id")]
pub group_id: i64,
#[serde(
rename = "parent_folder_id",
default = "default_get_group_files_input_parent_folder_id",
deserialize_with = "deserialize_get_group_files_input_parent_folder_id"
)]
pub parent_folder_id: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GetGroupFilesOutput {
#[serde(rename = "files")]
pub files: Vec<GroupFileEntity>,
#[serde(rename = "folders")]
pub folders: Vec<GroupFolderEntity>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct MoveGroupFileInput {
#[serde(rename = "group_id")]
pub group_id: i64,
#[serde(rename = "file_id")]
pub file_id: String,
#[serde(
rename = "parent_folder_id",
default = "default_move_group_file_input_parent_folder_id",
deserialize_with = "deserialize_move_group_file_input_parent_folder_id"
)]
pub parent_folder_id: String,
#[serde(
rename = "target_folder_id",
default = "default_move_group_file_input_target_folder_id",
deserialize_with = "deserialize_move_group_file_input_target_folder_id"
)]
pub target_folder_id: String,
}
pub type MoveGroupFileOutput = ApiEmptyStruct;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct RenameGroupFileInput {
#[serde(rename = "group_id")]
pub group_id: i64,
#[serde(rename = "file_id")]
pub file_id: String,
#[serde(
rename = "parent_folder_id",
default = "default_rename_group_file_input_parent_folder_id",
deserialize_with = "deserialize_rename_group_file_input_parent_folder_id"
)]
pub parent_folder_id: String,
#[serde(rename = "new_file_name")]
pub new_file_name: String,
}
pub type RenameGroupFileOutput = ApiEmptyStruct;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct DeleteGroupFileInput {
#[serde(rename = "group_id")]
pub group_id: i64,
#[serde(rename = "file_id")]
pub file_id: String,
}
pub type DeleteGroupFileOutput = ApiEmptyStruct;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct CreateGroupFolderInput {
#[serde(rename = "group_id")]
pub group_id: i64,
#[serde(rename = "folder_name")]
pub folder_name: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct CreateGroupFolderOutput {
#[serde(rename = "folder_id")]
pub folder_id: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct RenameGroupFolderInput {
#[serde(rename = "group_id")]
pub group_id: i64,
#[serde(rename = "folder_id")]
pub folder_id: String,
#[serde(rename = "new_folder_name")]
pub new_folder_name: String,
}
pub type RenameGroupFolderOutput = ApiEmptyStruct;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct DeleteGroupFolderInput {
#[serde(rename = "group_id")]
pub group_id: i64,
#[serde(rename = "folder_id")]
pub folder_id: String,
}
pub type DeleteGroupFolderOutput = ApiEmptyStruct;
fn serialize_segment_with_data<S, T>(
serializer: S,
segment_type: &str,
data: &T,
) -> Result<S::Ok, S::Error>
where
S: Serializer,
T: Serialize,
{
serde_json::json!({
"type": segment_type,
"data": data,
})
.serialize(serializer)
}
fn serialize_segment_with_field<S, T>(
serializer: S,
segment_type: &str,
field_name: &str,
value: &T,
) -> Result<S::Ok, S::Error>
where
S: Serializer,
T: Serialize,
{
let mut object = serde_json::Map::with_capacity(2);
object.insert(
"type".to_string(),
serde_json::Value::String(segment_type.to_string()),
);
object.insert(
field_name.to_string(),
serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
);
serde_json::Value::Object(object).serialize(serializer)
}
fn deserialize_segment_type<E>(value: &serde_json::Value) -> Result<&str, E>
where
E: serde::de::Error,
{
value
.get("type")
.and_then(serde_json::Value::as_str)
.ok_or_else(|| E::missing_field("type"))
}
fn deserialize_segment_data<E, T>(value: &serde_json::Value) -> Result<T, E>
where
E: serde::de::Error,
T: DeserializeOwned,
{
let data = value
.get("data")
.cloned()
.ok_or_else(|| E::missing_field("data"))?;
serde_json::from_value(data).map_err(E::custom)
}
fn deserialize_segment_field<E, T>(
value: &serde_json::Value,
field_name: &'static str,
) -> Result<T, E>
where
E: serde::de::Error,
T: DeserializeOwned,
{
let field_value = value
.get(field_name)
.cloned()
.ok_or_else(|| E::missing_field(field_name))?;
serde_json::from_value(field_value).map_err(E::custom)
}
fn deserialize_drop_bad_element_list<'de, D, T>(deserializer: D) -> Result<Vec<T>, D::Error>
where
D: Deserializer<'de>,
T: serde::de::DeserializeOwned,
{
let values = Option::<Vec<serde_json::Value>>::deserialize(deserializer)?.unwrap_or_default();
let mut out = Vec::with_capacity(values.len());
for value in values {
if let Ok(item) = serde_json::from_value::<T>(value) {
out.push(item);
}
}
Ok(out)
}
fn deserialize_optional_drop_bad_element_list<'de, D, T>(
deserializer: D,
) -> Result<Option<Vec<T>>, D::Error>
where
D: Deserializer<'de>,
T: serde::de::DeserializeOwned,
{
let values = Option::<Vec<serde_json::Value>>::deserialize(deserializer)?;
let Some(values) = values else {
return Ok(None);
};
let mut out = Vec::with_capacity(values.len());
for value in values {
if let Ok(item) = serde_json::from_value::<T>(value) {
out.push(item);
}
}
Ok(Some(out))
}
fn unknown_incoming_segment(value: serde_json::Value) -> IncomingSegment {
let type_value = value
.as_object()
.and_then(|object| object.get("type"))
.and_then(serde_json::Value::as_str)
.unwrap_or("unknown");
IncomingSegment::Text(format!("[{}]", type_value))
}
fn deserialize_incoming_segment_list<'de, D>(
deserializer: D,
) -> Result<Vec<IncomingSegment>, D::Error>
where
D: Deserializer<'de>,
{
let values = Option::<Vec<serde_json::Value>>::deserialize(deserializer)?.unwrap_or_default();
let mut out = Vec::with_capacity(values.len());
for value in values {
match serde_json::from_value::<IncomingSegment>(value.clone()) {
Ok(item) => out.push(item),
Err(_) => out.push(unknown_incoming_segment(value)),
}
}
Ok(out)
}
fn deserialize_optional_incoming_segment_list<'de, D>(
deserializer: D,
) -> Result<Option<Vec<IncomingSegment>>, D::Error>
where
D: Deserializer<'de>,
{
let values = Option::<Vec<serde_json::Value>>::deserialize(deserializer)?;
let Some(values) = values else {
return Ok(None);
};
let mut out = Vec::with_capacity(values.len());
for value in values {
match serde_json::from_value::<IncomingSegment>(value.clone()) {
Ok(item) => out.push(item),
Err(_) => out.push(unknown_incoming_segment(value)),
}
}
Ok(Some(out))
}
fn deserialize_drop_bad_outgoing_segment_list<'de, D>(
deserializer: D,
) -> Result<Vec<OutgoingSegment>, D::Error>
where
D: Deserializer<'de>,
{
deserialize_drop_bad_element_list::<D, OutgoingSegment>(deserializer)
}
fn deserialize_optional_drop_bad_outgoing_segment_list<'de, D>(
deserializer: D,
) -> Result<Option<Vec<OutgoingSegment>>, D::Error>
where
D: Deserializer<'de>,
{
deserialize_optional_drop_bad_element_list::<D, OutgoingSegment>(deserializer)
}
fn deserialize_drop_bad_incoming_message_list<'de, D>(
deserializer: D,
) -> Result<Vec<IncomingMessage>, D::Error>
where
D: Deserializer<'de>,
{
deserialize_drop_bad_element_list::<D, IncomingMessage>(deserializer)
}
fn deserialize_optional_drop_bad_incoming_message_list<'de, D>(
deserializer: D,
) -> Result<Option<Vec<IncomingMessage>>, D::Error>
where
D: Deserializer<'de>,
{
deserialize_optional_drop_bad_element_list::<D, IncomingMessage>(deserializer)
}
fn deserialize_drop_bad_group_notification_list<'de, D>(
deserializer: D,
) -> Result<Vec<GroupNotification>, D::Error>
where
D: Deserializer<'de>,
{
deserialize_drop_bad_element_list::<D, GroupNotification>(deserializer)
}
fn deserialize_optional_drop_bad_group_notification_list<'de, D>(
deserializer: D,
) -> Result<Option<Vec<GroupNotification>>, D::Error>
where
D: Deserializer<'de>,
{
deserialize_optional_drop_bad_element_list::<D, GroupNotification>(deserializer)
}
fn deserialize_default_on_null<'de, D, T, F>(deserializer: D, default: F) -> Result<T, D::Error>
where
D: Deserializer<'de>,
T: Deserialize<'de>,
F: FnOnce() -> T,
{
Ok(Option::<T>::deserialize(deserializer)?.unwrap_or_else(default))
}
fn default_outgoing_segment_face_data_is_large() -> bool {
false
}
fn deserialize_outgoing_segment_face_data_is_large<'de, D>(
deserializer: D,
) -> Result<bool, D::Error>
where
D: Deserializer<'de>,
{
deserialize_default_on_null(deserializer, default_outgoing_segment_face_data_is_large)
}
fn default_outgoing_segment_image_data_sub_type() -> String {
"normal".to_string()
}
fn deserialize_outgoing_segment_image_data_sub_type<'de, D>(
deserializer: D,
) -> Result<String, D::Error>
where
D: Deserializer<'de>,
{
deserialize_default_on_null(deserializer, default_outgoing_segment_image_data_sub_type)
}
fn default_get_friend_list_input_no_cache() -> bool {
false
}
fn deserialize_get_friend_list_input_no_cache<'de, D>(deserializer: D) -> Result<bool, D::Error>
where
D: Deserializer<'de>,
{
deserialize_default_on_null(deserializer, default_get_friend_list_input_no_cache)
}
fn default_get_friend_info_input_no_cache() -> bool {
false
}
fn deserialize_get_friend_info_input_no_cache<'de, D>(deserializer: D) -> Result<bool, D::Error>
where
D: Deserializer<'de>,
{
deserialize_default_on_null(deserializer, default_get_friend_info_input_no_cache)
}
fn default_get_group_list_input_no_cache() -> bool {
false
}
fn deserialize_get_group_list_input_no_cache<'de, D>(deserializer: D) -> Result<bool, D::Error>
where
D: Deserializer<'de>,
{
deserialize_default_on_null(deserializer, default_get_group_list_input_no_cache)
}
fn default_get_group_info_input_no_cache() -> bool {
false
}
fn deserialize_get_group_info_input_no_cache<'de, D>(deserializer: D) -> Result<bool, D::Error>
where
D: Deserializer<'de>,
{
deserialize_default_on_null(deserializer, default_get_group_info_input_no_cache)
}
fn default_get_group_member_list_input_no_cache() -> bool {
false
}
fn deserialize_get_group_member_list_input_no_cache<'de, D>(
deserializer: D,
) -> Result<bool, D::Error>
where
D: Deserializer<'de>,
{
deserialize_default_on_null(deserializer, default_get_group_member_list_input_no_cache)
}
fn default_get_group_member_info_input_no_cache() -> bool {
false
}
fn deserialize_get_group_member_info_input_no_cache<'de, D>(
deserializer: D,
) -> Result<bool, D::Error>
where
D: Deserializer<'de>,
{
deserialize_default_on_null(deserializer, default_get_group_member_info_input_no_cache)
}
fn default_set_peer_pin_input_is_pinned() -> bool {
true
}
fn deserialize_set_peer_pin_input_is_pinned<'de, D>(deserializer: D) -> Result<bool, D::Error>
where
D: Deserializer<'de>,
{
deserialize_default_on_null(deserializer, default_set_peer_pin_input_is_pinned)
}
fn default_get_history_messages_input_limit() -> i32 {
20
}
fn deserialize_get_history_messages_input_limit<'de, D>(deserializer: D) -> Result<i32, D::Error>
where
D: Deserializer<'de>,
{
deserialize_default_on_null(deserializer, default_get_history_messages_input_limit)
}
fn default_send_friend_nudge_input_is_self() -> bool {
false
}
fn deserialize_send_friend_nudge_input_is_self<'de, D>(deserializer: D) -> Result<bool, D::Error>
where
D: Deserializer<'de>,
{
deserialize_default_on_null(deserializer, default_send_friend_nudge_input_is_self)
}
fn default_send_profile_like_input_count() -> i32 {
1
}
fn deserialize_send_profile_like_input_count<'de, D>(deserializer: D) -> Result<i32, D::Error>
where
D: Deserializer<'de>,
{
deserialize_default_on_null(deserializer, default_send_profile_like_input_count)
}
fn default_get_friend_requests_input_limit() -> i32 {
20
}
fn deserialize_get_friend_requests_input_limit<'de, D>(deserializer: D) -> Result<i32, D::Error>
where
D: Deserializer<'de>,
{
deserialize_default_on_null(deserializer, default_get_friend_requests_input_limit)
}
fn default_get_friend_requests_input_is_filtered() -> bool {
false
}
fn deserialize_get_friend_requests_input_is_filtered<'de, D>(
deserializer: D,
) -> Result<bool, D::Error>
where
D: Deserializer<'de>,
{
deserialize_default_on_null(deserializer, default_get_friend_requests_input_is_filtered)
}
fn default_accept_friend_request_input_is_filtered() -> bool {
false
}
fn deserialize_accept_friend_request_input_is_filtered<'de, D>(
deserializer: D,
) -> Result<bool, D::Error>
where
D: Deserializer<'de>,
{
deserialize_default_on_null(
deserializer,
default_accept_friend_request_input_is_filtered,
)
}
fn default_reject_friend_request_input_is_filtered() -> bool {
false
}
fn deserialize_reject_friend_request_input_is_filtered<'de, D>(
deserializer: D,
) -> Result<bool, D::Error>
where
D: Deserializer<'de>,
{
deserialize_default_on_null(
deserializer,
default_reject_friend_request_input_is_filtered,
)
}
fn default_set_group_member_admin_input_is_set() -> bool {
true
}
fn deserialize_set_group_member_admin_input_is_set<'de, D>(
deserializer: D,
) -> Result<bool, D::Error>
where
D: Deserializer<'de>,
{
deserialize_default_on_null(deserializer, default_set_group_member_admin_input_is_set)
}
fn default_set_group_member_mute_input_duration() -> i32 {
0
}
fn deserialize_set_group_member_mute_input_duration<'de, D>(
deserializer: D,
) -> Result<i32, D::Error>
where
D: Deserializer<'de>,
{
deserialize_default_on_null(deserializer, default_set_group_member_mute_input_duration)
}
fn default_set_group_whole_mute_input_is_mute() -> bool {
true
}
fn deserialize_set_group_whole_mute_input_is_mute<'de, D>(deserializer: D) -> Result<bool, D::Error>
where
D: Deserializer<'de>,
{
deserialize_default_on_null(deserializer, default_set_group_whole_mute_input_is_mute)
}
fn default_kick_group_member_input_reject_add_request() -> bool {
false
}
fn deserialize_kick_group_member_input_reject_add_request<'de, D>(
deserializer: D,
) -> Result<bool, D::Error>
where
D: Deserializer<'de>,
{
deserialize_default_on_null(
deserializer,
default_kick_group_member_input_reject_add_request,
)
}
fn default_set_group_essence_message_input_is_set() -> bool {
true
}
fn deserialize_set_group_essence_message_input_is_set<'de, D>(
deserializer: D,
) -> Result<bool, D::Error>
where
D: Deserializer<'de>,
{
deserialize_default_on_null(deserializer, default_set_group_essence_message_input_is_set)
}
fn default_send_group_message_reaction_input_reaction_type() -> String {
"face".to_string()
}
fn deserialize_send_group_message_reaction_input_reaction_type<'de, D>(
deserializer: D,
) -> Result<String, D::Error>
where
D: Deserializer<'de>,
{
deserialize_default_on_null(
deserializer,
default_send_group_message_reaction_input_reaction_type,
)
}
fn default_send_group_message_reaction_input_is_add() -> bool {
true
}
fn deserialize_send_group_message_reaction_input_is_add<'de, D>(
deserializer: D,
) -> Result<bool, D::Error>
where
D: Deserializer<'de>,
{
deserialize_default_on_null(
deserializer,
default_send_group_message_reaction_input_is_add,
)
}
fn default_get_group_notifications_input_is_filtered() -> bool {
false
}
fn deserialize_get_group_notifications_input_is_filtered<'de, D>(
deserializer: D,
) -> Result<bool, D::Error>
where
D: Deserializer<'de>,
{
deserialize_default_on_null(
deserializer,
default_get_group_notifications_input_is_filtered,
)
}
fn default_get_group_notifications_input_limit() -> i32 {
20
}
fn deserialize_get_group_notifications_input_limit<'de, D>(deserializer: D) -> Result<i32, D::Error>
where
D: Deserializer<'de>,
{
deserialize_default_on_null(deserializer, default_get_group_notifications_input_limit)
}
fn default_accept_group_request_input_is_filtered() -> bool {
false
}
fn deserialize_accept_group_request_input_is_filtered<'de, D>(
deserializer: D,
) -> Result<bool, D::Error>
where
D: Deserializer<'de>,
{
deserialize_default_on_null(deserializer, default_accept_group_request_input_is_filtered)
}
fn default_reject_group_request_input_is_filtered() -> bool {
false
}
fn deserialize_reject_group_request_input_is_filtered<'de, D>(
deserializer: D,
) -> Result<bool, D::Error>
where
D: Deserializer<'de>,
{
deserialize_default_on_null(deserializer, default_reject_group_request_input_is_filtered)
}
fn default_upload_group_file_input_parent_folder_id() -> String {
"/".to_string()
}
fn deserialize_upload_group_file_input_parent_folder_id<'de, D>(
deserializer: D,
) -> Result<String, D::Error>
where
D: Deserializer<'de>,
{
deserialize_default_on_null(
deserializer,
default_upload_group_file_input_parent_folder_id,
)
}
fn default_get_group_files_input_parent_folder_id() -> String {
"/".to_string()
}
fn deserialize_get_group_files_input_parent_folder_id<'de, D>(
deserializer: D,
) -> Result<String, D::Error>
where
D: Deserializer<'de>,
{
deserialize_default_on_null(deserializer, default_get_group_files_input_parent_folder_id)
}
fn default_move_group_file_input_parent_folder_id() -> String {
"/".to_string()
}
fn deserialize_move_group_file_input_parent_folder_id<'de, D>(
deserializer: D,
) -> Result<String, D::Error>
where
D: Deserializer<'de>,
{
deserialize_default_on_null(deserializer, default_move_group_file_input_parent_folder_id)
}
fn default_move_group_file_input_target_folder_id() -> String {
"/".to_string()
}
fn deserialize_move_group_file_input_target_folder_id<'de, D>(
deserializer: D,
) -> Result<String, D::Error>
where
D: Deserializer<'de>,
{
deserialize_default_on_null(deserializer, default_move_group_file_input_target_folder_id)
}
fn default_rename_group_file_input_parent_folder_id() -> String {
"/".to_string()
}
fn deserialize_rename_group_file_input_parent_folder_id<'de, D>(
deserializer: D,
) -> Result<String, D::Error>
where
D: Deserializer<'de>,
{
deserialize_default_on_null(
deserializer,
default_rename_group_file_input_parent_folder_id,
)
}
pub trait ApiEndpoint: Serialize {
type Output: DeserializeOwned;
const NAME: &'static str;
}
impl ApiEndpoint for GetLoginInfoInput {
type Output = GetLoginInfoOutput;
const NAME: &'static str = "get_login_info";
}
impl ApiEndpoint for GetImplInfoInput {
type Output = GetImplInfoOutput;
const NAME: &'static str = "get_impl_info";
}
impl ApiEndpoint for GetUserProfileInput {
type Output = GetUserProfileOutput;
const NAME: &'static str = "get_user_profile";
}
impl ApiEndpoint for GetFriendListInput {
type Output = GetFriendListOutput;
const NAME: &'static str = "get_friend_list";
}
impl ApiEndpoint for GetFriendInfoInput {
type Output = GetFriendInfoOutput;
const NAME: &'static str = "get_friend_info";
}
impl ApiEndpoint for GetGroupListInput {
type Output = GetGroupListOutput;
const NAME: &'static str = "get_group_list";
}
impl ApiEndpoint for GetGroupInfoInput {
type Output = GetGroupInfoOutput;
const NAME: &'static str = "get_group_info";
}
impl ApiEndpoint for GetGroupMemberListInput {
type Output = GetGroupMemberListOutput;
const NAME: &'static str = "get_group_member_list";
}
impl ApiEndpoint for GetGroupMemberInfoInput {
type Output = GetGroupMemberInfoOutput;
const NAME: &'static str = "get_group_member_info";
}
impl ApiEndpoint for GetPeerPinsInput {
type Output = GetPeerPinsOutput;
const NAME: &'static str = "get_peer_pins";
}
impl ApiEndpoint for SetPeerPinInput {
type Output = SetPeerPinOutput;
const NAME: &'static str = "set_peer_pin";
}
impl ApiEndpoint for SetAvatarInput {
type Output = SetAvatarOutput;
const NAME: &'static str = "set_avatar";
}
impl ApiEndpoint for SetNicknameInput {
type Output = SetNicknameOutput;
const NAME: &'static str = "set_nickname";
}
impl ApiEndpoint for SetBioInput {
type Output = SetBioOutput;
const NAME: &'static str = "set_bio";
}
impl ApiEndpoint for GetCustomFaceUrlListInput {
type Output = GetCustomFaceUrlListOutput;
const NAME: &'static str = "get_custom_face_url_list";
}
impl ApiEndpoint for GetCookiesInput {
type Output = GetCookiesOutput;
const NAME: &'static str = "get_cookies";
}
impl ApiEndpoint for GetCsrfTokenInput {
type Output = GetCsrfTokenOutput;
const NAME: &'static str = "get_csrf_token";
}
impl ApiEndpoint for SendPrivateMessageInput {
type Output = SendPrivateMessageOutput;
const NAME: &'static str = "send_private_message";
}
impl ApiEndpoint for SendGroupMessageInput {
type Output = SendGroupMessageOutput;
const NAME: &'static str = "send_group_message";
}
impl ApiEndpoint for RecallPrivateMessageInput {
type Output = RecallPrivateMessageOutput;
const NAME: &'static str = "recall_private_message";
}
impl ApiEndpoint for RecallGroupMessageInput {
type Output = RecallGroupMessageOutput;
const NAME: &'static str = "recall_group_message";
}
impl ApiEndpoint for GetMessageInput {
type Output = GetMessageOutput;
const NAME: &'static str = "get_message";
}
impl ApiEndpoint for GetHistoryMessagesInput {
type Output = GetHistoryMessagesOutput;
const NAME: &'static str = "get_history_messages";
}
impl ApiEndpoint for GetResourceTempUrlInput {
type Output = GetResourceTempUrlOutput;
const NAME: &'static str = "get_resource_temp_url";
}
impl ApiEndpoint for GetForwardedMessagesInput {
type Output = GetForwardedMessagesOutput;
const NAME: &'static str = "get_forwarded_messages";
}
impl ApiEndpoint for MarkMessageAsReadInput {
type Output = MarkMessageAsReadOutput;
const NAME: &'static str = "mark_message_as_read";
}
impl ApiEndpoint for SendFriendNudgeInput {
type Output = SendFriendNudgeOutput;
const NAME: &'static str = "send_friend_nudge";
}
impl ApiEndpoint for SendProfileLikeInput {
type Output = SendProfileLikeOutput;
const NAME: &'static str = "send_profile_like";
}
impl ApiEndpoint for DeleteFriendInput {
type Output = DeleteFriendOutput;
const NAME: &'static str = "delete_friend";
}
impl ApiEndpoint for GetFriendRequestsInput {
type Output = GetFriendRequestsOutput;
const NAME: &'static str = "get_friend_requests";
}
impl ApiEndpoint for AcceptFriendRequestInput {
type Output = AcceptFriendRequestOutput;
const NAME: &'static str = "accept_friend_request";
}
impl ApiEndpoint for RejectFriendRequestInput {
type Output = RejectFriendRequestOutput;
const NAME: &'static str = "reject_friend_request";
}
impl ApiEndpoint for SetGroupNameInput {
type Output = SetGroupNameOutput;
const NAME: &'static str = "set_group_name";
}
impl ApiEndpoint for SetGroupAvatarInput {
type Output = SetGroupAvatarOutput;
const NAME: &'static str = "set_group_avatar";
}
impl ApiEndpoint for SetGroupMemberCardInput {
type Output = SetGroupMemberCardOutput;
const NAME: &'static str = "set_group_member_card";
}
impl ApiEndpoint for SetGroupMemberSpecialTitleInput {
type Output = SetGroupMemberSpecialTitleOutput;
const NAME: &'static str = "set_group_member_special_title";
}
impl ApiEndpoint for SetGroupMemberAdminInput {
type Output = SetGroupMemberAdminOutput;
const NAME: &'static str = "set_group_member_admin";
}
impl ApiEndpoint for SetGroupMemberMuteInput {
type Output = SetGroupMemberMuteOutput;
const NAME: &'static str = "set_group_member_mute";
}
impl ApiEndpoint for SetGroupWholeMuteInput {
type Output = SetGroupWholeMuteOutput;
const NAME: &'static str = "set_group_whole_mute";
}
impl ApiEndpoint for KickGroupMemberInput {
type Output = KickGroupMemberOutput;
const NAME: &'static str = "kick_group_member";
}
impl ApiEndpoint for GetGroupAnnouncementsInput {
type Output = GetGroupAnnouncementsOutput;
const NAME: &'static str = "get_group_announcements";
}
impl ApiEndpoint for SendGroupAnnouncementInput {
type Output = SendGroupAnnouncementOutput;
const NAME: &'static str = "send_group_announcement";
}
impl ApiEndpoint for DeleteGroupAnnouncementInput {
type Output = DeleteGroupAnnouncementOutput;
const NAME: &'static str = "delete_group_announcement";
}
impl ApiEndpoint for GetGroupEssenceMessagesInput {
type Output = GetGroupEssenceMessagesOutput;
const NAME: &'static str = "get_group_essence_messages";
}
impl ApiEndpoint for SetGroupEssenceMessageInput {
type Output = SetGroupEssenceMessageOutput;
const NAME: &'static str = "set_group_essence_message";
}
impl ApiEndpoint for QuitGroupInput {
type Output = QuitGroupOutput;
const NAME: &'static str = "quit_group";
}
impl ApiEndpoint for SendGroupMessageReactionInput {
type Output = SendGroupMessageReactionOutput;
const NAME: &'static str = "send_group_message_reaction";
}
impl ApiEndpoint for SendGroupNudgeInput {
type Output = SendGroupNudgeOutput;
const NAME: &'static str = "send_group_nudge";
}
impl ApiEndpoint for GetGroupNotificationsInput {
type Output = GetGroupNotificationsOutput;
const NAME: &'static str = "get_group_notifications";
}
impl ApiEndpoint for AcceptGroupRequestInput {
type Output = AcceptGroupRequestOutput;
const NAME: &'static str = "accept_group_request";
}
impl ApiEndpoint for RejectGroupRequestInput {
type Output = RejectGroupRequestOutput;
const NAME: &'static str = "reject_group_request";
}
impl ApiEndpoint for AcceptGroupInvitationInput {
type Output = AcceptGroupInvitationOutput;
const NAME: &'static str = "accept_group_invitation";
}
impl ApiEndpoint for RejectGroupInvitationInput {
type Output = RejectGroupInvitationOutput;
const NAME: &'static str = "reject_group_invitation";
}
impl ApiEndpoint for UploadPrivateFileInput {
type Output = UploadPrivateFileOutput;
const NAME: &'static str = "upload_private_file";
}
impl ApiEndpoint for UploadGroupFileInput {
type Output = UploadGroupFileOutput;
const NAME: &'static str = "upload_group_file";
}
impl ApiEndpoint for GetPrivateFileDownloadUrlInput {
type Output = GetPrivateFileDownloadUrlOutput;
const NAME: &'static str = "get_private_file_download_url";
}
impl ApiEndpoint for GetGroupFileDownloadUrlInput {
type Output = GetGroupFileDownloadUrlOutput;
const NAME: &'static str = "get_group_file_download_url";
}
impl ApiEndpoint for GetGroupFilesInput {
type Output = GetGroupFilesOutput;
const NAME: &'static str = "get_group_files";
}
impl ApiEndpoint for MoveGroupFileInput {
type Output = MoveGroupFileOutput;
const NAME: &'static str = "move_group_file";
}
impl ApiEndpoint for RenameGroupFileInput {
type Output = RenameGroupFileOutput;
const NAME: &'static str = "rename_group_file";
}
impl ApiEndpoint for DeleteGroupFileInput {
type Output = DeleteGroupFileOutput;
const NAME: &'static str = "delete_group_file";
}
impl ApiEndpoint for CreateGroupFolderInput {
type Output = CreateGroupFolderOutput;
const NAME: &'static str = "create_group_folder";
}
impl ApiEndpoint for RenameGroupFolderInput {
type Output = RenameGroupFolderOutput;
const NAME: &'static str = "rename_group_folder";
}
impl ApiEndpoint for DeleteGroupFolderInput {
type Output = DeleteGroupFolderOutput;
const NAME: &'static str = "delete_group_folder";
}