#[derive(Clone, PartialEq, ::prost::Message)]
pub struct CreateRequest {
#[prost(string, tag="1")]
pub parent_fid: std::string::String,
#[prost(oneof="create_request::El", tags="2, 3, 4, 5")]
pub el: ::std::option::Option<create_request::El>,
}
pub mod create_request {
#[derive(Clone, PartialEq, ::prost::Oneof)]
pub enum El {
#[prost(message, tag="2")]
Member(super::Member),
#[prost(message, tag="3")]
Room(super::Room),
#[prost(message, tag="4")]
WebrtcPlay(super::WebRtcPlayEndpoint),
#[prost(message, tag="5")]
WebrtcPub(super::WebRtcPublishEndpoint),
}
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct IdRequest {
#[prost(string, repeated, tag="1")]
pub fid: ::std::vec::Vec<std::string::String>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ApplyRequest {
#[prost(string, tag="1")]
pub parent_fid: std::string::String,
#[prost(oneof="apply_request::El", tags="2, 3, 4, 5")]
pub el: ::std::option::Option<apply_request::El>,
}
pub mod apply_request {
#[derive(Clone, PartialEq, ::prost::Oneof)]
pub enum El {
#[prost(message, tag="2")]
Member(super::Member),
#[prost(message, tag="3")]
Room(super::Room),
#[prost(message, tag="4")]
WebrtcPlay(super::WebRtcPlayEndpoint),
#[prost(message, tag="5")]
WebrtcPub(super::WebRtcPublishEndpoint),
}
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Response {
#[prost(message, optional, tag="1")]
pub error: ::std::option::Option<Error>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct CreateResponse {
#[prost(map="string, string", tag="1")]
pub sid: ::std::collections::HashMap<std::string::String, std::string::String>,
#[prost(message, optional, tag="2")]
pub error: ::std::option::Option<Error>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct GetResponse {
#[prost(map="string, message", tag="1")]
pub elements: ::std::collections::HashMap<std::string::String, Element>,
#[prost(message, optional, tag="2")]
pub error: ::std::option::Option<Error>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Error {
#[prost(uint32, tag="1")]
pub code: u32,
#[prost(string, tag="2")]
pub text: std::string::String,
#[prost(string, tag="3")]
pub doc: std::string::String,
#[prost(string, tag="4")]
pub element: std::string::String,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Element {
#[prost(oneof="element::El", tags="1, 2, 3, 4")]
pub el: ::std::option::Option<element::El>,
}
pub mod element {
#[derive(Clone, PartialEq, ::prost::Oneof)]
pub enum El {
#[prost(message, tag="1")]
Member(super::Member),
#[prost(message, tag="2")]
Room(super::Room),
#[prost(message, tag="3")]
WebrtcPlay(super::WebRtcPlayEndpoint),
#[prost(message, tag="4")]
WebrtcPub(super::WebRtcPublishEndpoint),
}
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Room {
#[prost(string, tag="1")]
pub id: std::string::String,
#[prost(map="string, message", tag="2")]
pub pipeline: ::std::collections::HashMap<std::string::String, room::Element>,
}
pub mod room {
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Element {
#[prost(oneof="element::El", tags="1, 2, 3")]
pub el: ::std::option::Option<element::El>,
}
pub mod element {
#[derive(Clone, PartialEq, ::prost::Oneof)]
pub enum El {
#[prost(message, tag="1")]
Member(super::super::Member),
#[prost(message, tag="2")]
WebrtcPlay(super::super::WebRtcPlayEndpoint),
#[prost(message, tag="3")]
WebrtcPub(super::super::WebRtcPublishEndpoint),
}
}
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Member {
#[prost(string, tag="1")]
pub id: std::string::String,
#[prost(string, tag="2")]
pub on_join: std::string::String,
#[prost(string, tag="3")]
pub on_leave: std::string::String,
#[prost(message, optional, tag="6")]
pub idle_timeout: ::std::option::Option<::prost_types::Duration>,
#[prost(message, optional, tag="7")]
pub reconnect_timeout: ::std::option::Option<::prost_types::Duration>,
#[prost(message, optional, tag="8")]
pub ping_interval: ::std::option::Option<::prost_types::Duration>,
#[prost(map="string, message", tag="9")]
pub pipeline: ::std::collections::HashMap<std::string::String, member::Element>,
#[prost(oneof="member::Credentials", tags="4, 5")]
pub credentials: ::std::option::Option<member::Credentials>,
}
pub mod member {
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Element {
#[prost(oneof="element::El", tags="1, 2")]
pub el: ::std::option::Option<element::El>,
}
pub mod element {
#[derive(Clone, PartialEq, ::prost::Oneof)]
pub enum El {
#[prost(message, tag="1")]
WebrtcPlay(super::super::WebRtcPlayEndpoint),
#[prost(message, tag="2")]
WebrtcPub(super::super::WebRtcPublishEndpoint),
}
}
#[derive(Clone, PartialEq, ::prost::Oneof)]
pub enum Credentials {
#[prost(string, tag="4")]
Hash(std::string::String),
#[prost(string, tag="5")]
Plain(std::string::String),
}
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct WebRtcPublishEndpoint {
#[prost(string, tag="1")]
pub id: std::string::String,
#[prost(enumeration="web_rtc_publish_endpoint::P2p", tag="2")]
pub p2p: i32,
#[prost(string, tag="3")]
pub on_start: std::string::String,
#[prost(string, tag="4")]
pub on_stop: std::string::String,
#[prost(bool, tag="5")]
pub force_relay: bool,
#[prost(message, optional, tag="6")]
pub audio_settings: ::std::option::Option<web_rtc_publish_endpoint::AudioSettings>,
#[prost(message, optional, tag="7")]
pub video_settings: ::std::option::Option<web_rtc_publish_endpoint::VideoSettings>,
}
pub mod web_rtc_publish_endpoint {
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct AudioSettings {
#[prost(enumeration="PublishPolicy", tag="1")]
pub publish_policy: i32,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct VideoSettings {
#[prost(enumeration="PublishPolicy", tag="1")]
pub publish_policy: i32,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
#[repr(i32)]
pub enum PublishPolicy {
Optional = 0,
Required = 1,
Disabled = 2,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
#[repr(i32)]
pub enum P2p {
Never = 0,
IfPossible = 1,
Always = 2,
}
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct WebRtcPlayEndpoint {
#[prost(string, tag="1")]
pub id: std::string::String,
#[prost(string, tag="2")]
pub src: std::string::String,
#[prost(string, tag="3")]
pub on_start: std::string::String,
#[prost(string, tag="4")]
pub on_stop: std::string::String,
#[prost(bool, tag="5")]
pub force_relay: bool,
}
# [doc = r" Generated client implementations."] pub mod control_api_client { # ! [allow (unused_variables , dead_code , missing_docs)] use tonic :: codegen :: * ; # [doc = " Media server's Control API service."] pub struct ControlApiClient < T > { inner : tonic :: client :: Grpc < T > , } impl ControlApiClient < tonic :: transport :: Channel > { # [doc = r" Attempt to create a new client by connecting to a given endpoint."] pub async fn connect < D > (dst : D) -> Result < Self , tonic :: transport :: Error > where D : std :: convert :: TryInto < tonic :: transport :: Endpoint > , D :: Error : Into < StdError > , { let conn = tonic :: transport :: Endpoint :: new (dst) ? . connect () . await ? ; Ok (Self :: new (conn)) } } impl < T > ControlApiClient < T > where T : tonic :: client :: GrpcService < tonic :: body :: BoxBody > , T :: ResponseBody : Body + HttpBody + Send + 'static , T :: Error : Into < StdError > , < T :: ResponseBody as HttpBody > :: Error : Into < StdError > + Send , { pub fn new (inner : T) -> Self { let inner = tonic :: client :: Grpc :: new (inner) ; Self { inner } } pub fn with_interceptor (inner : T , interceptor : impl Into < tonic :: Interceptor >) -> Self { let inner = tonic :: client :: Grpc :: with_interceptor (inner , interceptor) ; Self { inner } } # [doc = " Creates new Element with a given ID."] # [doc = ""] # [doc = " Not idempotent. Errors if an Element with the same ID already exists."] pub async fn create (& mut self , request : impl tonic :: IntoRequest < super :: CreateRequest > ,) -> Result < tonic :: Response < super :: CreateResponse > , tonic :: Status > { self . inner . ready () . await . map_err (| e | { tonic :: Status :: new (tonic :: Code :: Unknown , format ! ("Service was not ready: {}" , e . into ())) }) ? ; let codec = tonic :: codec :: ProstCodec :: default () ; let path = http :: uri :: PathAndQuery :: from_static ("/api.ControlApi/Create") ; self . inner . unary (request . into_request () , path , codec) . await } # [doc = " Removes Element by its ID."] # [doc = " Allows referring multiple Elements on the last two levels."] # [doc = ""] # [doc = " Idempotent. If no Elements with such IDs exist, then succeeds."] pub async fn delete (& mut self , request : impl tonic :: IntoRequest < super :: IdRequest > ,) -> Result < tonic :: Response < super :: Response > , tonic :: Status > { self . inner . ready () . await . map_err (| e | { tonic :: Status :: new (tonic :: Code :: Unknown , format ! ("Service was not ready: {}" , e . into ())) }) ? ; let codec = tonic :: codec :: ProstCodec :: default () ; let path = http :: uri :: PathAndQuery :: from_static ("/api.ControlApi/Delete") ; self . inner . unary (request . into_request () , path , codec) . await } # [doc = " Returns Element by its ID."] # [doc = " Allows referring multiple Elements."] # [doc = " If no ID specified, returns all Elements declared."] pub async fn get (& mut self , request : impl tonic :: IntoRequest < super :: IdRequest > ,) -> Result < tonic :: Response < super :: GetResponse > , tonic :: Status > { self . inner . ready () . await . map_err (| e | { tonic :: Status :: new (tonic :: Code :: Unknown , format ! ("Service was not ready: {}" , e . into ())) }) ? ; let codec = tonic :: codec :: ProstCodec :: default () ; let path = http :: uri :: PathAndQuery :: from_static ("/api.ControlApi/Get") ; self . inner . unary (request . into_request () , path , codec) . await } # [doc = " Applies the given spec to Element by its ID."] # [doc = ""] # [doc = " Idempotent. If no Element with such ID exists, then it will be created,"] # [doc = " otherwise it will be reconfigured. Elements that exist, but are not"] # [doc = " specified in the provided spec will be removed."] pub async fn apply (& mut self , request : impl tonic :: IntoRequest < super :: ApplyRequest > ,) -> Result < tonic :: Response < super :: CreateResponse > , tonic :: Status > { self . inner . ready () . await . map_err (| e | { tonic :: Status :: new (tonic :: Code :: Unknown , format ! ("Service was not ready: {}" , e . into ())) }) ? ; let codec = tonic :: codec :: ProstCodec :: default () ; let path = http :: uri :: PathAndQuery :: from_static ("/api.ControlApi/Apply") ; self . inner . unary (request . into_request () , path , codec) . await } } impl < T : Clone > Clone for ControlApiClient < T > { fn clone (& self) -> Self { Self { inner : self . inner . clone () , } } } impl < T > std :: fmt :: Debug for ControlApiClient < T > { fn fmt (& self , f : & mut std :: fmt :: Formatter < '_ >) -> std :: fmt :: Result { write ! (f , "ControlApiClient {{ ... }}") } } }# [doc = r" Generated server implementations."] pub mod control_api_server { # ! [allow (unused_variables , dead_code , missing_docs)] use tonic :: codegen :: * ; # [doc = "Generated trait containing gRPC methods that should be implemented for use with ControlApiServer."] # [async_trait] pub trait ControlApi : Send + Sync + 'static { # [doc = " Creates new Element with a given ID."] # [doc = ""] # [doc = " Not idempotent. Errors if an Element with the same ID already exists."] async fn create (& self , request : tonic :: Request < super :: CreateRequest >) -> Result < tonic :: Response < super :: CreateResponse > , tonic :: Status > ; # [doc = " Removes Element by its ID."] # [doc = " Allows referring multiple Elements on the last two levels."] # [doc = ""] # [doc = " Idempotent. If no Elements with such IDs exist, then succeeds."] async fn delete (& self , request : tonic :: Request < super :: IdRequest >) -> Result < tonic :: Response < super :: Response > , tonic :: Status > ; # [doc = " Returns Element by its ID."] # [doc = " Allows referring multiple Elements."] # [doc = " If no ID specified, returns all Elements declared."] async fn get (& self , request : tonic :: Request < super :: IdRequest >) -> Result < tonic :: Response < super :: GetResponse > , tonic :: Status > ; # [doc = " Applies the given spec to Element by its ID."] # [doc = ""] # [doc = " Idempotent. If no Element with such ID exists, then it will be created,"] # [doc = " otherwise it will be reconfigured. Elements that exist, but are not"] # [doc = " specified in the provided spec will be removed."] async fn apply (& self , request : tonic :: Request < super :: ApplyRequest >) -> Result < tonic :: Response < super :: CreateResponse > , tonic :: Status > ; } # [doc = " Media server's Control API service."] # [derive (Debug)] pub struct ControlApiServer < T : ControlApi > { inner : _Inner < T > , } struct _Inner < T > (Arc < T > , Option < tonic :: Interceptor >) ; impl < T : ControlApi > ControlApiServer < T > { pub fn new (inner : T) -> Self { let inner = Arc :: new (inner) ; let inner = _Inner (inner , None) ; Self { inner } } pub fn with_interceptor (inner : T , interceptor : impl Into < tonic :: Interceptor >) -> Self { let inner = Arc :: new (inner) ; let inner = _Inner (inner , Some (interceptor . into ())) ; Self { inner } } } impl < T , B > Service < http :: Request < B >> for ControlApiServer < T > where T : ControlApi , B : HttpBody + Send + Sync + 'static , B :: Error : Into < StdError > + Send + 'static , { type Response = http :: Response < tonic :: body :: BoxBody > ; type Error = Never ; type Future = BoxFuture < Self :: Response , Self :: Error > ; fn poll_ready (& mut self , _cx : & mut Context < '_ >) -> Poll < Result < () , Self :: Error >> { Poll :: Ready (Ok (())) } fn call (& mut self , req : http :: Request < B >) -> Self :: Future { let inner = self . inner . clone () ; match req . uri () . path () { "/api.ControlApi/Create" => { # [allow (non_camel_case_types)] struct CreateSvc < T : ControlApi > (pub Arc < T >) ; impl < T : ControlApi > tonic :: server :: UnaryService < super :: CreateRequest > for CreateSvc < T > { type Response = super :: CreateResponse ; type Future = BoxFuture < tonic :: Response < Self :: Response > , tonic :: Status > ; fn call (& mut self , request : tonic :: Request < super :: CreateRequest >) -> Self :: Future { let inner = self . 0 . clone () ; let fut = async move { (* inner) . create (request) . await } ; Box :: pin (fut) } } let inner = self . inner . clone () ; let fut = async move { let interceptor = inner . 1 . clone () ; let inner = inner . 0 ; let method = CreateSvc (inner) ; let codec = tonic :: codec :: ProstCodec :: default () ; let mut grpc = if let Some (interceptor) = interceptor { tonic :: server :: Grpc :: with_interceptor (codec , interceptor) } else { tonic :: server :: Grpc :: new (codec) } ; let res = grpc . unary (method , req) . await ; Ok (res) } ; Box :: pin (fut) } "/api.ControlApi/Delete" => { # [allow (non_camel_case_types)] struct DeleteSvc < T : ControlApi > (pub Arc < T >) ; impl < T : ControlApi > tonic :: server :: UnaryService < super :: IdRequest > for DeleteSvc < T > { type Response = super :: Response ; type Future = BoxFuture < tonic :: Response < Self :: Response > , tonic :: Status > ; fn call (& mut self , request : tonic :: Request < super :: IdRequest >) -> Self :: Future { let inner = self . 0 . clone () ; let fut = async move { (* inner) . delete (request) . await } ; Box :: pin (fut) } } let inner = self . inner . clone () ; let fut = async move { let interceptor = inner . 1 . clone () ; let inner = inner . 0 ; let method = DeleteSvc (inner) ; let codec = tonic :: codec :: ProstCodec :: default () ; let mut grpc = if let Some (interceptor) = interceptor { tonic :: server :: Grpc :: with_interceptor (codec , interceptor) } else { tonic :: server :: Grpc :: new (codec) } ; let res = grpc . unary (method , req) . await ; Ok (res) } ; Box :: pin (fut) } "/api.ControlApi/Get" => { # [allow (non_camel_case_types)] struct GetSvc < T : ControlApi > (pub Arc < T >) ; impl < T : ControlApi > tonic :: server :: UnaryService < super :: IdRequest > for GetSvc < T > { type Response = super :: GetResponse ; type Future = BoxFuture < tonic :: Response < Self :: Response > , tonic :: Status > ; fn call (& mut self , request : tonic :: Request < super :: IdRequest >) -> Self :: Future { let inner = self . 0 . clone () ; let fut = async move { (* inner) . get (request) . await } ; Box :: pin (fut) } } let inner = self . inner . clone () ; let fut = async move { let interceptor = inner . 1 . clone () ; let inner = inner . 0 ; let method = GetSvc (inner) ; let codec = tonic :: codec :: ProstCodec :: default () ; let mut grpc = if let Some (interceptor) = interceptor { tonic :: server :: Grpc :: with_interceptor (codec , interceptor) } else { tonic :: server :: Grpc :: new (codec) } ; let res = grpc . unary (method , req) . await ; Ok (res) } ; Box :: pin (fut) } "/api.ControlApi/Apply" => { # [allow (non_camel_case_types)] struct ApplySvc < T : ControlApi > (pub Arc < T >) ; impl < T : ControlApi > tonic :: server :: UnaryService < super :: ApplyRequest > for ApplySvc < T > { type Response = super :: CreateResponse ; type Future = BoxFuture < tonic :: Response < Self :: Response > , tonic :: Status > ; fn call (& mut self , request : tonic :: Request < super :: ApplyRequest >) -> Self :: Future { let inner = self . 0 . clone () ; let fut = async move { (* inner) . apply (request) . await } ; Box :: pin (fut) } } let inner = self . inner . clone () ; let fut = async move { let interceptor = inner . 1 . clone () ; let inner = inner . 0 ; let method = ApplySvc (inner) ; let codec = tonic :: codec :: ProstCodec :: default () ; let mut grpc = if let Some (interceptor) = interceptor { tonic :: server :: Grpc :: with_interceptor (codec , interceptor) } else { tonic :: server :: Grpc :: new (codec) } ; let res = grpc . unary (method , req) . await ; Ok (res) } ; Box :: pin (fut) } _ => Box :: pin (async move { Ok (http :: Response :: builder () . status (200) . header ("grpc-status" , "12") . body (tonic :: body :: BoxBody :: empty ()) . unwrap ()) }) , } } } impl < T : ControlApi > Clone for ControlApiServer < T > { fn clone (& self) -> Self { let inner = self . inner . clone () ; Self { inner } } } impl < T : ControlApi > Clone for _Inner < T > { fn clone (& self) -> Self { Self (self . 0 . clone () , self . 1 . clone ()) } } impl < T : std :: fmt :: Debug > std :: fmt :: Debug for _Inner < T > { fn fmt (& self , f : & mut std :: fmt :: Formatter < '_ >) -> std :: fmt :: Result { write ! (f , "{:?}" , self . 0) } } impl < T : ControlApi > tonic :: transport :: NamedService for ControlApiServer < T > { const NAME : & 'static str = "api.ControlApi" ; } }