use moqtap_codec::dispatch::{
AnyControlMessage, AnyDatagramHeader, AnyFetchHeader, AnySubgroupHeader,
};
use moqtap_codec::draft08::data_stream::{FetchObjectHeader, ObjectHeader};
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Direction {
Send,
Receive,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum StreamKind {
Subgroup,
Fetch,
Datagram,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct SubgroupObject {
pub header: ObjectHeader,
pub payload: Vec<u8>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct FetchObject {
pub header: FetchObjectHeader,
pub payload: Vec<u8>,
}
#[non_exhaustive]
#[derive(Debug, Clone)]
pub enum ClientEvent {
SetupComplete {
negotiated_version: u64,
},
ControlMessage {
direction: Direction,
message: AnyControlMessage,
raw: Option<Vec<u8>>,
},
StreamOpened {
direction: Direction,
stream_kind: StreamKind,
stream_id: u64,
},
DataStreamHeader {
stream_id: u64,
direction: Direction,
header: AnySubgroupHeader,
},
FetchStreamHeader {
stream_id: u64,
direction: Direction,
header: AnyFetchHeader,
},
SubgroupObjectReceived {
stream_id: u64,
direction: Direction,
object: SubgroupObject,
},
FetchObjectReceived {
stream_id: u64,
direction: Direction,
object: FetchObject,
},
DatagramReceived {
direction: Direction,
header: AnyDatagramHeader,
payload_len: usize,
},
StreamClosed {
stream_id: u64,
error_code: u64,
},
Draining {
new_session_uri: Vec<u8>,
},
Closed {
code: u32,
reason: Vec<u8>,
},
Error {
error: String,
},
}