use serde::{Deserialize, Serialize};
use serde_json::Value;
#[derive(Clone, Debug, Deserialize, Serialize, PartialEq)]
#[serde(tag = "type", content = "data", rename_all = "snake_case")]
pub enum MessageSegment {
Text {
text: String,
},
At {
qq: String,
},
Reply {
id: String,
},
Face {
id: String,
#[serde(skip_serializing_if = "Option::is_none")]
raw: Option<Value>,
#[serde(rename = "resultId", skip_serializing_if = "Option::is_none")]
result_id: Option<String>,
#[serde(rename = "chainCount", skip_serializing_if = "Option::is_none")]
chain_count: Option<u64>,
},
Mface {
emoji_id: String,
emoji_package_id: String,
#[serde(skip_serializing_if = "Option::is_none")]
key: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
summary: Option<String>,
},
Dice {
#[serde(skip_serializing_if = "Option::is_none")]
result: Option<String>,
},
Rps {
#[serde(skip_serializing_if = "Option::is_none")]
result: Option<String>,
},
Poke {
#[serde(rename = "type")]
poke_type: String,
id: String,
},
Image {
file: String,
url: Option<String>,
summary: Option<String>,
sub_type: Option<u64>,
file_size: Option<String>,
key: Option<String>,
emoji_id: Option<String>,
emoji_package_id: Option<String>,
},
Record {
file: String,
file_size: Option<String>,
path: Option<String>,
},
Video {
file: String,
url: Option<String>,
file_size: Option<String>,
thumb: Option<String>,
},
File {
file: String,
file_id: Option<String>,
file_size: Option<String>,
},
Json {
data: Value,
},
Music {
#[serde(rename = "type")]
platform: String,
id: Option<String>,
url: Option<String>,
image: Option<String>,
singer: Option<String>,
title: Option<String>,
content: Option<String>,
},
Forward,
}