1use crate::agent::AgentState;
2use serde::{Deserialize, Serialize};
3
4#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
6pub enum StreamType {
7 MessageStream, DataStream, EventStream, CommandStream, }
12
13#[derive(Debug, Serialize, Deserialize, Clone)]
15pub enum AgentMessage {
16 TaskRequest {
17 task_id: String,
18 content: String,
19 },
20 TaskResponse {
21 task_id: String,
22 result: String,
23 status: TaskStatus,
24 },
25 StateSync {
26 agent_id: String,
27 state: AgentState,
28 },
29 Event(AgentEvent),
30
31 StreamMessage {
33 stream_id: String,
34 message: Vec<u8>,
35 sequence: u64,
36 }, StreamControl {
39 stream_id: String,
40 command: StreamControlCommand,
41 metadata: std::collections::HashMap<String, String>,
42 }, }
44
45#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
47pub enum TaskStatus {
48 Success,
49 Failed,
50 Pending,
51}
52
53#[derive(Debug, Clone, Serialize, Deserialize)]
55pub enum AgentEvent {
56 TaskReceived(TaskRequest), TaskPreempted(String), Shutdown, Custom(String, Vec<u8>), StreamMessage {
63 stream_id: String,
64 message: Vec<u8>,
65 sequence: u64,
66 }, StreamCreated {
69 stream_id: String,
70 stream_type: StreamType,
71 metadata: std::collections::HashMap<String, String>,
72 }, StreamClosed {
75 stream_id: String,
76 reason: String,
77 }, StreamSubscription {
80 stream_id: String,
81 subscriber_id: String,
82 }, StreamUnsubscription {
85 stream_id: String,
86 subscriber_id: String,
87 }, }
89
90#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq)]
92pub struct TaskRequest {
93 pub task_id: String,
94 pub content: String,
95 pub priority: TaskPriority,
96 pub deadline: Option<std::time::Duration>, pub metadata: std::collections::HashMap<String, String>,
98}
99
100#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq)]
102pub enum TaskPriority {
103 Critical = 0,
104 Highest = 1,
105 High = 2,
106 Medium = 3,
107 Normal = 4,
108 Low = 5,
109}
110
111impl PartialOrd for TaskPriority {
113 fn partial_cmp(&self, other: &Self) -> Option<std::cmp::Ordering> {
114 Some(self.cmp(other))
115 }
116}
117
118impl Ord for TaskPriority {
119 fn cmp(&self, other: &Self) -> std::cmp::Ordering {
120 match (self, other) {
121 (TaskPriority::Critical, _) => std::cmp::Ordering::Greater,
122 (_, TaskPriority::Critical) => std::cmp::Ordering::Less,
123 (TaskPriority::High, TaskPriority::Medium | TaskPriority::Low) => {
124 std::cmp::Ordering::Greater
125 }
126 (TaskPriority::Medium, TaskPriority::Low) => std::cmp::Ordering::Greater,
127 (TaskPriority::Low, TaskPriority::Medium | TaskPriority::High) => {
128 std::cmp::Ordering::Less
129 }
130 (TaskPriority::Medium, TaskPriority::High) => std::cmp::Ordering::Less,
131 (a, b) if a == b => std::cmp::Ordering::Equal,
132 _ => unreachable!("All cases should be covered"),
133 }
134 }
135}
136
137#[derive(Debug, Serialize, Deserialize, Clone)]
139pub enum StreamControlCommand {
140 Create(StreamType), Close(String), Subscribe, Unsubscribe, Pause, Resume, Seek(u64), }
148
149#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
151pub enum SchedulingStatus {
152 Pending,
153 Running,
154 Preempted, Completed,
156 Failed,
157}