use crate::apis::concat_option_str;
use crate::apis::params::{Direction, IfExists, TerminateOn};
use derive_new::new;
use derive_setters::Setters;
use serde::Serialize;
#[derive(Clone, Debug, Default, PartialEq, Serialize, new, Setters)]
#[setters(prefix = "with_")]
#[setters(into, strip_option)]
#[serde(rename_all = "camelCase")]
pub struct OriginateRequest {
#[setters(skip)]
#[new(into)]
endpoint: String,
#[serde(flatten, skip_serializing_if = "Option::is_none")]
#[new(default)]
extension: Option<Extension>,
#[serde(flatten, skip_serializing_if = "Option::is_none")]
#[new(default)]
app: Option<App>,
#[serde(skip_serializing_if = "Option::is_none")]
#[new(default)]
caller_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[new(value = "Some(30)")]
timeout: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
#[new(default)]
channel_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[new(default)]
other_channel_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[new(default)]
originator: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[new(default)]
#[serde(serialize_with = "concat_option_str")]
formats: Option<Vec<String>>,
#[serde(skip_serializing)]
#[new(default)]
pub(crate) variables: Option<serde_json::Value>,
}
#[derive(Clone, Debug, PartialEq, Serialize, new, Setters)]
#[setters(prefix = "with_")]
#[setters(into, strip_option)]
pub struct Extension {
#[setters(skip)]
extension: String,
#[serde(skip_serializing_if = "Option::is_none")]
#[new(default)]
context: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[new(default)]
priority: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[new(default)]
label: Option<String>,
}
#[derive(Clone, Debug, Default, PartialEq, Serialize, new, Setters)]
#[setters(prefix = "with_")]
#[setters(into, strip_option)]
pub struct App {
#[serde(rename = "app")]
#[setters(skip)]
#[new(into)]
name: String,
#[serde(rename = "appArgs", skip_serializing_if = "Option::is_none")]
#[new(default)]
args: Option<String>,
}
#[derive(Clone, Debug, Default, PartialEq, Serialize, new, Setters)]
#[setters(prefix = "with_")]
#[setters(into, strip_option)]
#[serde(rename_all = "camelCase")]
pub struct CreateRequest {
#[setters(skip)]
#[new(into)]
endpoint: String,
#[serde(flatten)]
#[setters(skip)]
app: App,
#[serde(skip_serializing_if = "Option::is_none")]
#[new(default)]
channel_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[new(default)]
other_channel_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[new(default)]
originator: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(serialize_with = "concat_option_str")]
#[new(default)]
formats: Option<Vec<String>>,
#[serde(skip_serializing)]
#[new(default)]
pub(crate) variables: Option<serde_json::Value>,
}
#[derive(Clone, Debug, Default, PartialEq, Serialize, new, Setters)]
#[setters(prefix = "with_")]
#[setters(into, strip_option)]
#[serde(rename_all = "camelCase")]
pub struct OriginateWithIdRequest {
#[serde(skip_serializing)]
#[setters(skip)]
#[new(into)]
pub(crate) channel_id: String,
#[setters(skip)]
#[new(into)]
endpoint: String,
#[serde(flatten, skip_serializing_if = "Option::is_none")]
#[new(default)]
extension: Option<Extension>,
#[serde(flatten, skip_serializing_if = "Option::is_none")]
#[new(default)]
app: Option<App>,
#[serde(skip_serializing_if = "Option::is_none")]
#[new(default)]
caller_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[new(value = "Some(30)")]
timeout: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
#[new(default)]
other_channel_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[new(default)]
originator: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[new(default)]
#[serde(serialize_with = "concat_option_str")]
formats: Option<Vec<String>>,
#[serde(skip_serializing)]
#[new(default)]
pub(crate) variables: Option<serde_json::Value>,
}
#[derive(Clone, Debug, PartialEq, Serialize, Default)]
pub enum CancelReason {
#[serde(rename = "normal")]
#[default]
Normal,
#[serde(rename = "busy")]
Busy,
#[serde(rename = "congestion")]
Congestion,
#[serde(rename = "no_answer")]
NoAnswer,
#[serde(rename = "timeout")]
Timeout,
#[serde(rename = "rejected")]
Rejected,
#[serde(rename = "unallocated")]
Unallocated,
#[serde(rename = "normal_unspecified")]
NormalUnspecified,
#[serde(rename = "number_incomplete")]
NumberIncomplete,
#[serde(rename = "codec_mismatch")]
CodecMismatch,
#[serde(rename = "interworking")]
Interworking,
#[serde(rename = "failure")]
Failure,
#[serde(rename = "answered_elsewhere")]
AnsweredElsewhere,
}
#[derive(Clone, Debug, Serialize, new, Setters)]
#[setters(prefix = "with_")]
#[setters(into, strip_option)]
pub struct DeleteRequest {
#[serde(skip_serializing)]
#[setters(skip)]
#[new(into)]
pub(crate) channel_id: String,
#[serde(rename = "reason_code", skip_serializing_if = "Option::is_none")]
#[new(default)]
reason_code: Option<String>,
#[serde(rename = "reason", skip_serializing_if = "Option::is_none")]
#[new(default)]
reason: Option<CancelReason>,
}
#[derive(Clone, Debug, Serialize, new, Setters)]
#[setters(prefix = "with_")]
#[setters(into, strip_option)]
pub struct ContinueRequest {
#[serde(skip_serializing)]
#[setters(skip)]
#[new(into)]
pub(crate) channel_id: String,
#[serde(flatten, skip_serializing_if = "Option::is_none")]
#[new(default)]
extension: Option<Extension>,
}
#[derive(Clone, Debug, Serialize, new, Setters)]
#[setters(prefix = "with_")]
#[setters(into, strip_option)]
pub struct MoveRequest {
#[serde(skip_serializing)]
#[setters(skip)]
#[new(into)]
pub(crate) channel_id: String,
#[serde(flatten, skip_serializing_if = "Option::is_none")]
#[new(default)]
app: Option<App>,
}
#[derive(Clone, Debug, Serialize, new, Setters)]
#[setters(prefix = "with_")]
#[setters(into, strip_option)]
pub struct DtmfRequest {
#[serde(skip_serializing)]
#[setters(skip)]
#[new(into)]
pub(crate) channel_id: String,
#[setters(skip)]
#[new(into)]
dtmf: String,
#[serde(rename = "before", skip_serializing_if = "Option::is_none")]
#[new(default)]
before: Option<u32>,
#[serde(rename = "between", skip_serializing_if = "Option::is_none")]
#[new(value = "Some(100)")]
between: Option<u32>,
#[serde(rename = "duration", skip_serializing_if = "Option::is_none")]
#[new(value = "Some(100)")]
duration: Option<u32>,
#[serde(rename = "after", skip_serializing_if = "Option::is_none")]
#[new(default)]
after: Option<u32>,
}
#[derive(Clone, Debug, Serialize, new, Setters)]
#[setters(prefix = "with_")]
#[setters(into, strip_option)]
pub struct MohRequest {
#[serde(skip_serializing)]
#[setters(skip)]
#[new(into)]
pub(crate) channel_id: String,
#[serde(rename = "mohClass", skip_serializing_if = "Option::is_none")]
#[new(default)]
moh_class: Option<String>,
}
#[derive(Clone, Debug, Serialize, new, Setters)]
#[setters(prefix = "with_")]
#[setters(into, strip_option)]
pub struct PlayRequest {
#[serde(skip_serializing)]
#[setters(skip)]
#[new(into)]
pub(crate) channel_id: String,
#[setters(skip)]
#[new(into)]
pub(crate) media: String,
#[serde(rename = "lang", skip_serializing_if = "Option::is_none")]
#[new(default)]
lang: Option<String>,
#[serde(rename = "offsetms", skip_serializing_if = "Option::is_none")]
#[new(default)]
offset_ms: Option<u32>,
#[serde(rename = "skipms", skip_serializing_if = "Option::is_none")]
#[new(default)]
skip_ms: Option<u32>,
}
#[derive(Clone, Debug, Serialize, new, Setters)]
#[setters(prefix = "with_")]
#[setters(into, strip_option)]
pub struct PlayWithPlaybackIdRequest {
#[serde(skip_serializing)]
#[setters(skip)]
#[new(into)]
pub(crate) channel_id: String,
#[serde(skip_serializing)]
#[setters(skip)]
#[new(into)]
pub(crate) playback_id: String,
#[setters(skip)]
#[new(into)]
pub(crate) media: String,
#[serde(rename = "lang", skip_serializing_if = "Option::is_none")]
#[new(default)]
lang: Option<String>,
#[serde(rename = "offsetms", skip_serializing_if = "Option::is_none")]
#[new(default)]
offset_ms: Option<u32>,
#[serde(rename = "skipms", skip_serializing_if = "Option::is_none")]
#[new(default)]
skip_ms: Option<u32>,
}
#[derive(Clone, Debug, Serialize, new, Setters)]
#[setters(prefix = "with_")]
#[setters(into, strip_option)]
pub struct RecordRequest {
#[serde(skip_serializing)]
#[setters(skip)]
#[new(into)]
pub(crate) channel_id: String,
#[setters(skip)]
#[new(into)]
pub(crate) name: String,
#[setters(skip)]
#[new(into)]
pub(crate) format: String,
#[serde(rename = "maxDurationSeconds", skip_serializing_if = "Option::is_none")]
#[new(default)]
max_duration_seconds: Option<u32>,
#[serde(rename = "maxSilenceSeconds", skip_serializing_if = "Option::is_none")]
#[new(default)]
max_silence_seconds: Option<u32>,
#[serde(rename = "ifExists", skip_serializing_if = "Option::is_none")]
#[new(default)]
if_exists: Option<IfExists>,
#[serde(rename = "beep", skip_serializing_if = "Option::is_none")]
#[new(default)]
beep: Option<bool>,
#[serde(rename = "terminateOn", skip_serializing_if = "Option::is_none")]
#[new(default)]
terminate_on: Option<TerminateOn>,
}
#[derive(Clone, Debug, Serialize, new, Setters)]
#[setters(prefix = "with_")]
#[setters(into, strip_option)]
pub struct SnoopRequest {
#[serde(skip_serializing)]
#[setters(skip)]
#[new(into)]
pub(crate) channel_id: String,
#[serde(flatten, skip_serializing_if = "Option::is_none")]
#[new(default)]
app: Option<App>,
#[serde(rename = "spy", skip_serializing_if = "Option::is_none")]
#[new(default)]
spy: Option<Direction>,
#[serde(rename = "whisper", skip_serializing_if = "Option::is_none")]
#[new(default)]
whisper: Option<Direction>,
}
#[derive(Clone, Debug, Serialize, new, Setters)]
#[setters(prefix = "with_")]
#[setters(into, strip_option)]
pub struct SnoopWithIdRequest {
#[serde(skip_serializing)]
#[setters(skip)]
#[new(into)]
pub(crate) channel_id: String,
#[serde(skip_serializing)]
#[setters(skip)]
#[new(into)]
pub(crate) snoop_id: String,
#[serde(flatten, skip_serializing_if = "Option::is_none")]
#[new(default)]
app: Option<App>,
#[serde(rename = "spy", skip_serializing_if = "Option::is_none")]
#[new(default)]
spy: Option<Direction>,
#[serde(rename = "whisper", skip_serializing_if = "Option::is_none")]
#[new(default)]
whisper: Option<Direction>,
}
#[derive(Clone, Debug, Serialize, new, Setters)]
#[setters(prefix = "with_")]
#[setters(into, strip_option)]
pub struct DialRequest {
#[serde(skip_serializing)]
#[setters(skip)]
#[new(into)]
pub(crate) channel_id: String,
#[serde(rename = "caller", skip_serializing_if = "Option::is_none")]
#[new(default)]
caller: Option<String>,
#[serde(rename = "timeout", skip_serializing_if = "Option::is_none")]
#[new(default)]
timeout: Option<u32>,
}
#[derive(Clone, Debug, Default, PartialEq, Serialize, new, Setters)]
#[setters(prefix = "with_")]
#[setters(into, strip_option)]
pub struct ExternalMediaRequest {
#[setters(skip)]
#[new(into)]
app: String,
#[setters(skip)]
#[new(into)]
external_host: String,
#[setters(skip)]
#[new(into)]
format: String,
#[serde(skip_serializing_if = "Option::is_none")]
#[new(default)]
channel_id: Option<String>,
#[serde(skip_serializing)]
#[new(default)]
pub(crate) variables: Option<serde_json::Value>,
#[new(default)]
encapsulation: Encapsulation,
#[new(default)]
transport: Transport,
#[new(default)]
connection_type: ConnectionType,
#[new(default)]
direction: Direction,
#[serde(skip_serializing_if = "Option::is_none")]
#[new(default)]
data: Option<String>,
}
#[derive(Clone, Debug, Serialize, Default, PartialEq)]
pub enum ConnectionType {
#[default]
#[serde(rename = "client")]
Client,
#[serde(rename = "server")]
Server,
}
#[derive(Clone, Debug, Serialize, Default, PartialEq)]
pub enum Transport {
#[serde(rename = "udp")]
#[default]
Udp,
#[serde(rename = "tcp")]
Tcp,
}
#[derive(Clone, Debug, Serialize, Default, PartialEq)]
pub enum Encapsulation {
#[serde(rename = "rtp")]
#[default]
Rtp,
#[serde(rename = "audiosocket")]
AudioSocket,
}