use std::fmt::{Debug, Formatter};
use crate::{AsrVendor, NumberFormat, DEFAULT_CALL_TIME, DEFAULT_COUNTRY_CODE, DEFAULT_DIGITS_FINISH_KEY, DEFAULT_DIGIT_TIMEOUT, DEFAULT_ENDPOINT_PRESENT, DEFAULT_MAX_DIGITS, DEFAULT_RECORDING_RETENTION, DEFAULT_REMOTE_DESTINATION, DEFAULT_RING_TIME, DEFAULT_TIMEZONE, DEFAULT_TTS_VOICE, DEFAULT_VM_FINISH_KEY, DEFAULT_VM_MAX_LENGTH, DEFAULT_VM_TIMEOUT, HANG_UP_CONNECT};
use cal_jambonz::listen::{MixType, SampleRate};
use cal_jambonz::recognizer::Recognizer;
use serde::{Deserialize, Serialize};
use crate::client::ClientProfile;
#[derive(Serialize, Deserialize, Clone)]
pub struct TranscribeOptions {
pub enabled: bool,
pub language: AsrVendor,
}
impl Default for TranscribeOptions {
fn default() -> Self {
Self {
enabled: false,
language: AsrVendor::Google,
}
}
}
#[derive(Serialize, Deserialize, Clone)]
#[serde(rename_all = "camelCase")]
pub struct RecordOptions {
#[serde(default = "build_record")]
pub enabled: bool,
#[serde(default = "build_record_retention")]
pub retention: String,
#[serde(default = "build_mix_type")]
pub mix_type: MixType,
#[serde(default = "build_sample_rate")]
pub sample_rate: SampleRate,
}
impl Default for RecordOptions {
fn default() -> Self {
Self {
enabled: false,
retention: String::from(DEFAULT_RECORDING_RETENTION),
mix_type: MixType::Stereo,
sample_rate: SampleRate::SR8000,
}
}
}
#[derive(Serialize, Deserialize, Clone)]
pub struct AiOptions {
pub transcribe: bool,
pub summary: bool,
pub recognizer: Option<Recognizer>,
}
impl Default for AiOptions {
fn default() -> Self {
Self {
transcribe: false,
summary: false,
recognizer: None,
}
}
}
#[derive(Serialize, Deserialize, Clone)]
pub struct CallControl {
enabled: bool,
channels: u8,
stats: bool,
action: CacAction,
}
impl Default for CallControl {
fn default() -> Self {
CallControl {
enabled: false,
channels: 0,
stats: false,
action: CacAction::Warn,
}
}
}
#[derive(Serialize, Deserialize, Clone)]
#[serde(rename_all = "camelCase")]
pub enum CacAction {
Warn,
Deny,
}
impl Debug for AiOptions {
fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), std::fmt::Error> {
f.debug_struct("AiOptions")
.field("transcribe", &self.transcribe)
.field("summary", &self.summary)
.field("recognizer", &self.recognizer)
.finish()
}
}
impl Debug for CallControl {
fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), std::fmt::Error> {
f.debug_struct("CallControl")
.field("enabled", &self.enabled)
.field("channels", &self.channels)
.field("stats", &self.stats)
.field("action", &self.action)
.finish()
}
}
impl Debug for CacAction {
fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), std::fmt::Error> {
match self {
CacAction::Warn => write!(f, "Warn"),
CacAction::Deny => write!(f, "Deny"),
}
}
}
pub fn build_record() -> bool {
false
}
pub fn build_record_retention() -> String {
String::from(DEFAULT_RECORDING_RETENTION)
}
pub fn build_mix_type() -> MixType {
MixType::Stereo
}
pub fn build_sample_rate() -> SampleRate {
SampleRate::SR8000
}
pub fn build_connect_to() -> String {
String::from(HANG_UP_CONNECT)
}
pub fn build_tts_voice() -> String {
String::from(DEFAULT_TTS_VOICE)
}
pub fn build_vm_finish_key() -> String {
String::from(DEFAULT_VM_FINISH_KEY)
}
pub fn build_default_timezone() -> String {
String::from(DEFAULT_TIMEZONE)
}
pub fn build_vm_timeout() -> u8 {
DEFAULT_VM_TIMEOUT
}
pub fn build_vm_max_length() -> u8 {
DEFAULT_VM_MAX_LENGTH
}
pub fn build_present() -> String {
String::from(DEFAULT_ENDPOINT_PRESENT)
}
pub fn build_destination() -> String {
String::from(DEFAULT_REMOTE_DESTINATION)
}
pub fn build_format() -> NumberFormat {
NumberFormat::National
}
pub fn build_client_profile() -> ClientProfile {
ClientProfile::GenericE164Plus
}
pub fn build_country_code() -> String {
String::from(DEFAULT_COUNTRY_CODE)
}
pub fn build_finish_key() -> String {
String::from(DEFAULT_DIGITS_FINISH_KEY)
}
pub fn build_call_time() -> u16 {
DEFAULT_CALL_TIME
}
pub fn build_ring_time() -> u8 {
DEFAULT_RING_TIME
}
pub fn build_digit_timeout() -> u8 {
DEFAULT_DIGIT_TIMEOUT
}
pub fn build_max_digits() -> u8 {
DEFAULT_MAX_DIGITS
}