systemprompt_models/a2a/
message.rs1use serde::{Deserialize, Serialize};
2use systemprompt_identifiers::{ContextId, MessageId, TaskId};
3
4#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
5pub struct Message {
6 pub role: String,
7 pub parts: Vec<Part>,
8 #[serde(rename = "messageId")]
9 pub id: MessageId,
10 #[serde(rename = "taskId")]
11 pub task_id: Option<TaskId>,
12 #[serde(rename = "contextId")]
13 pub context_id: ContextId,
14 #[serde(rename = "kind")]
15 pub kind: String,
16 pub metadata: Option<serde_json::Value>,
17 pub extensions: Option<Vec<String>>,
18 #[serde(rename = "referenceTaskIds")]
19 pub reference_task_ids: Option<Vec<TaskId>>,
20}
21
22#[derive(Debug, Serialize, Deserialize, Clone, Copy, PartialEq, Eq)]
23#[serde(rename_all = "lowercase")]
24pub enum MessageRole {
25 User,
26 Agent,
27}
28
29#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq)]
30#[serde(tag = "kind")]
31pub enum Part {
32 #[serde(rename = "text")]
33 Text(TextPart),
34 #[serde(rename = "data")]
35 Data(DataPart),
36 #[serde(rename = "file")]
37 File(FilePart),
38}
39
40#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq)]
41pub struct TextPart {
42 pub text: String,
43}
44
45#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq)]
46pub struct DataPart {
47 pub data: serde_json::Map<String, serde_json::Value>,
48}
49
50#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq)]
51pub struct FilePart {
52 pub file: FileWithBytes,
53}
54
55#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq)]
56pub struct FileWithBytes {
57 pub name: Option<String>,
58 #[serde(rename = "mimeType")]
59 pub mime_type: Option<String>,
60 pub bytes: String,
61}