use crate::{
api::{DataTrackInfo, DataTrackOptions, LocalDataTrack, PublishError},
packet::Handle,
};
use bytes::Bytes;
use from_variants::FromVariants;
use std::sync::Arc;
use tokio::sync::oneshot;
#[derive(Debug, FromVariants)]
pub enum InputEvent {
PublishRequest(PublishRequest),
PublishCancelled(PublishCancelled),
QueryPublished(QueryPublished),
UnpublishRequest(UnpublishRequest),
SfuPublishResponse(SfuPublishResponse),
SfuUnpublishResponse(SfuUnpublishResponse),
RepublishTracks,
Shutdown,
}
#[derive(Debug, FromVariants)]
pub enum OutputEvent {
SfuPublishRequest(SfuPublishRequest),
SfuUnpublishRequest(SfuUnpublishRequest),
PacketsAvailable(Vec<Bytes>),
}
#[derive(Debug)]
pub struct PublishRequest {
pub(super) options: DataTrackOptions,
pub(super) result_tx: oneshot::Sender<Result<LocalDataTrack, PublishError>>,
}
#[derive(Debug)]
pub struct PublishCancelled {
pub(super) handle: Handle,
}
#[derive(Debug)]
pub struct UnpublishRequest {
pub(super) handle: Handle,
}
#[derive(Debug)]
pub struct QueryPublished {
pub(super) result_tx: oneshot::Sender<Vec<Arc<DataTrackInfo>>>,
}
#[derive(Debug)]
pub struct SfuPublishResponse {
pub handle: Handle,
pub result: Result<DataTrackInfo, PublishError>,
}
#[derive(Debug)]
pub struct SfuUnpublishResponse {
pub handle: Handle,
}
#[derive(Debug)]
pub struct SfuPublishRequest {
pub handle: Handle,
pub name: String,
pub uses_e2ee: bool,
}
#[derive(Debug)]
pub struct SfuUnpublishRequest {
pub handle: Handle,
}