use crate::models;
use serde::{Deserialize, Serialize};
#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
pub struct CallRecord {
#[serde(rename = "_id", skip_serializing_if = "Option::is_none")]
pub _id: Option<String>,
#[serde(rename = "accountId", skip_serializing_if = "Option::is_none")]
pub account_id: Option<String>,
#[serde(
rename = "conversationId",
default,
with = "::serde_with::rust::double_option",
skip_serializing_if = "Option::is_none"
)]
pub conversation_id: Option<Option<String>>,
#[serde(
rename = "contactId",
default,
with = "::serde_with::rust::double_option",
skip_serializing_if = "Option::is_none"
)]
pub contact_id: Option<Option<String>>,
#[serde(rename = "channel", skip_serializing_if = "Option::is_none")]
pub channel: Option<Channel>,
#[serde(rename = "direction", skip_serializing_if = "Option::is_none")]
pub direction: Option<Direction>,
#[serde(rename = "from", skip_serializing_if = "Option::is_none")]
pub from: Option<String>,
#[serde(rename = "to", skip_serializing_if = "Option::is_none")]
pub to: Option<String>,
#[serde(
rename = "forwardTo",
default,
with = "::serde_with::rust::double_option",
skip_serializing_if = "Option::is_none"
)]
pub forward_to: Option<Option<String>>,
#[serde(
rename = "greeting",
default,
with = "::serde_with::rust::double_option",
skip_serializing_if = "Option::is_none"
)]
pub greeting: Option<Option<String>>,
#[serde(rename = "status", skip_serializing_if = "Option::is_none")]
pub status: Option<Status>,
#[serde(rename = "isVoicemail", skip_serializing_if = "Option::is_none")]
pub is_voicemail: Option<bool>,
#[serde(rename = "amd", skip_serializing_if = "Option::is_none")]
pub amd: Option<bool>,
#[serde(
rename = "answeredMachine",
default,
with = "::serde_with::rust::double_option",
skip_serializing_if = "Option::is_none"
)]
pub answered_machine: Option<Option<bool>>,
#[serde(rename = "forwardCallerId", skip_serializing_if = "Option::is_none")]
pub forward_caller_id: Option<ForwardCallerId>,
#[serde(rename = "recordingEnabled", skip_serializing_if = "Option::is_none")]
pub recording_enabled: Option<bool>,
#[serde(
rename = "transcriptionEnabled",
skip_serializing_if = "Option::is_none"
)]
pub transcription_enabled: Option<bool>,
#[serde(
rename = "transcriptionLanguage",
skip_serializing_if = "Option::is_none"
)]
pub transcription_language: Option<TranscriptionLanguage>,
#[serde(rename = "startedAt", skip_serializing_if = "Option::is_none")]
pub started_at: Option<String>,
#[serde(
rename = "answeredAt",
default,
with = "::serde_with::rust::double_option",
skip_serializing_if = "Option::is_none"
)]
pub answered_at: Option<Option<String>>,
#[serde(
rename = "endedAt",
default,
with = "::serde_with::rust::double_option",
skip_serializing_if = "Option::is_none"
)]
pub ended_at: Option<Option<String>>,
#[serde(
rename = "transferredAt",
default,
with = "::serde_with::rust::double_option",
skip_serializing_if = "Option::is_none"
)]
pub transferred_at: Option<Option<String>>,
#[serde(rename = "durationSeconds", skip_serializing_if = "Option::is_none")]
pub duration_seconds: Option<i32>,
#[serde(rename = "endReason", skip_serializing_if = "Option::is_none")]
pub end_reason: Option<EndReason>,
#[serde(
rename = "hangupCause",
default,
with = "::serde_with::rust::double_option",
skip_serializing_if = "Option::is_none"
)]
pub hangup_cause: Option<Option<String>>,
#[serde(
rename = "sipHangupCause",
default,
with = "::serde_with::rust::double_option",
skip_serializing_if = "Option::is_none"
)]
pub sip_hangup_cause: Option<Option<String>>,
#[serde(rename = "callErrors", skip_serializing_if = "Option::is_none")]
pub call_errors: Option<Vec<models::CallRecordCallErrorsInner>>,
#[serde(
rename = "recordingUrl",
default,
with = "::serde_with::rust::double_option",
skip_serializing_if = "Option::is_none"
)]
pub recording_url: Option<Option<String>>,
#[serde(
rename = "lastTranscriptSnippet",
default,
with = "::serde_with::rust::double_option",
skip_serializing_if = "Option::is_none"
)]
pub last_transcript_snippet: Option<Option<String>>,
#[serde(rename = "transcript", skip_serializing_if = "Option::is_none")]
pub transcript: Option<Vec<models::CallRecordTranscriptInner>>,
#[serde(rename = "billing", skip_serializing_if = "Option::is_none")]
pub billing: Option<Box<models::CallRecordBilling>>,
#[serde(rename = "createdAt", skip_serializing_if = "Option::is_none")]
pub created_at: Option<String>,
#[serde(rename = "updatedAt", skip_serializing_if = "Option::is_none")]
pub updated_at: Option<String>,
}
impl CallRecord {
pub fn new() -> CallRecord {
CallRecord {
_id: None,
account_id: None,
conversation_id: None,
contact_id: None,
channel: None,
direction: None,
from: None,
to: None,
forward_to: None,
greeting: None,
status: None,
is_voicemail: None,
amd: None,
answered_machine: None,
forward_caller_id: None,
recording_enabled: None,
transcription_enabled: None,
transcription_language: None,
started_at: None,
answered_at: None,
ended_at: None,
transferred_at: None,
duration_seconds: None,
end_reason: None,
hangup_cause: None,
sip_hangup_cause: None,
call_errors: None,
recording_url: None,
last_transcript_snippet: None,
transcript: None,
billing: None,
created_at: None,
updated_at: None,
}
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
pub enum Channel {
#[serde(rename = "whatsapp")]
Whatsapp,
#[serde(rename = "pstn")]
Pstn,
}
impl Default for Channel {
fn default() -> Channel {
Self::Whatsapp
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
pub enum Direction {
#[serde(rename = "inbound")]
Inbound,
#[serde(rename = "outbound")]
Outbound,
}
impl Default for Direction {
fn default() -> Direction {
Self::Inbound
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
pub enum Status {
#[serde(rename = "ringing")]
Ringing,
#[serde(rename = "answered")]
Answered,
#[serde(rename = "ended")]
Ended,
#[serde(rename = "failed")]
Failed,
}
impl Default for Status {
fn default() -> Status {
Self::Ringing
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
pub enum ForwardCallerId {
#[serde(rename = "business")]
Business,
#[serde(rename = "caller")]
Caller,
}
impl Default for ForwardCallerId {
fn default() -> ForwardCallerId {
Self::Business
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
pub enum TranscriptionLanguage {
#[serde(rename = "auto")]
Auto,
#[serde(rename = "en")]
En,
#[serde(rename = "es")]
Es,
}
impl Default for TranscriptionLanguage {
fn default() -> TranscriptionLanguage {
Self::Auto
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
pub enum EndReason {
#[serde(rename = "hangup")]
Hangup,
#[serde(rename = "no_answer")]
NoAnswer,
#[serde(rename = "rejected")]
Rejected,
#[serde(rename = "error")]
Error,
}
impl Default for EndReason {
fn default() -> EndReason {
Self::Hangup
}
}