Skip to main content

onebot_api/
event.rs

1use crate::event::{meta::MetaEvent, notice::NoticeEvent, request::RequestEvent};
2use async_trait::async_trait;
3// use flume::Receiver;
4use message::MessageEvent;
5use serde::Deserialize;
6use tokio::sync::broadcast;
7pub mod message;
8pub mod meta;
9pub mod notice;
10pub mod request;
11
12#[derive(Deserialize, Debug, Clone)]
13#[serde(tag = "post_type")]
14pub enum Event {
15	#[serde(rename = "message")]
16	Message {
17		time: i64,
18		self_id: i64,
19		#[serde(flatten)]
20		data: Box<MessageEvent>,
21	},
22
23	#[serde(rename = "notice")]
24	Notice {
25		time: i64,
26		self_id: i64,
27		#[serde(flatten)]
28		data: NoticeEvent,
29	},
30
31	#[serde(rename = "request")]
32	Request {
33		time: i64,
34		self_id: i64,
35		#[serde(flatten)]
36		data: RequestEvent,
37	},
38
39	#[serde(rename = "meta_event")]
40	MetaEvent {
41		time: i64,
42		self_id: i64,
43		#[serde(flatten)]
44		data: MetaEvent,
45	},
46}
47
48// pub struct EventStream {}
49//
50// impl Stream for EventStream {
51// 	type Item = ();
52//
53// 	fn poll_next(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Option<Self::Item>> {
54// 		todo!()
55// 	}
56// }
57
58pub trait EventTrait {}
59
60impl EventTrait for Event {}
61
62#[async_trait]
63pub trait EventReceiver<T: EventTrait> {
64	// async fn wait_event(&self) -> anyhow::Result<EventStream>; TODO
65	// async fn listen(&mut self, listener: T) -> anyhow::Result<()>; TODO
66
67	fn get_receiver(&self) -> broadcast::Receiver<T>;
68}