use crate::api::handle::CallId;
use crate::errors::{Result, SessionError};
use crate::session_registry::SessionRegistryHandle;
#[derive(Clone)]
pub(crate) enum InDialogRequestAuthority {
CaptureCurrent,
Captured(Option<SessionRegistryHandle>),
}
impl InDialogRequestAuthority {
pub(crate) fn captured(handle: Option<SessionRegistryHandle>) -> Self {
Self::Captured(handle)
}
pub(crate) fn exact_handle(
&self,
session_id: &CallId,
) -> Result<Option<SessionRegistryHandle>> {
match self {
Self::CaptureCurrent => Ok(None),
Self::Captured(Some(handle)) if handle.session_id() == session_id => {
Ok(Some(handle.clone()))
}
Self::Captured(Some(_)) => Err(SessionError::InvalidTransition(
"captured builder authority does not match its session".to_string(),
)),
Self::Captured(None) => Err(SessionError::SessionNotFound(format!(
"Session {} has no exact builder authority",
session_id
))),
}
}
}
pub mod bye;
pub mod cancel;
pub mod info;
pub mod message;
pub mod notify;
pub mod options;
pub mod outbound_call;
pub mod refer;
pub mod register;
pub mod reinvite;
pub mod subscribe;
pub mod surface;
pub mod update;
pub use bye::ByeBuilder;
pub use cancel::CancelBuilder;
pub use info::InfoBuilder;
pub use message::MessageBuilder;
pub use notify::NotifyBuilder;
pub use options::OptionsBuilder;
pub use outbound_call::{OutboundCallBuilder, PaiOverride, ProxyOverride};
pub use refer::ReferBuilder;
pub use register::{RegisterBuilder, RegisterRefreshBuilder};
pub use reinvite::ReInviteBuilder;
pub use subscribe::{SubscribeBuilder, SubscribeRefreshBuilder};
pub use surface::{Surface, SurfaceBuilder};
pub use update::UpdateBuilder;