Skip to main content

VoiceAccountRecord

Struct VoiceAccountRecord 

Source
pub struct VoiceAccountRecord {
Show 15 fields pub source_id: String, pub enabled: bool, pub display_name: String, pub username: String, pub domain: String, pub auth_username: Option<String>, pub server: Option<String>, pub port: Option<u16>, pub transport: VoiceTransport, pub register_expires: u32, pub keepalive_secs: Option<u32>, pub disclosure_enabled: bool, pub updated_at: String, pub deleted_at: Option<String>, pub envelope: SyncEnvelope,
}
Expand description

One SIP account line’s configuration as it crosses the wire from a device up to the platform and back down to another device (wavekat-voice/docs/40-account-config-sync.md).

Unlike calls / recordings / transcripts — which are immutable, one-way pushes — account config is mutable and bidirectional: a line is edited, toggled, renamed, and deleted, and those changes must restore onto a second device. The same idempotent (user_id, source_id) upsert that Client::sync performs carries every kind of change here; a delete is a soft-delete that rides as an upsert with deleted_at set, because a hard DELETE can’t sync under a “push the row” model — once the row is gone there’s nothing left to push.

No secret field, by construction. The SIP password never appears on this wire. Config sync (policy levels 1–2) keeps the credential device-local, and the end-to-end-encrypted secret path (level 3) ships its ciphertext through a separate opaque resource, never as a field here. Omitting it means level 3 can’t be populated by accident before it exists.

Fields§

§source_id: String

Daemon-side account UUID (accounts.id). The platform’s (user_id, source_id) upsert key — re-syncing the same id updates the row in place (mutable), unlike the immutable resources where a re-sync is a no-op.

§enabled: bool

Whether the line registers on daemon boot. Pausing a line is a portable preference, so it rides along.

§display_name: String§username: String§domain: String§auth_username: Option<String>§server: Option<String>§port: Option<u16>§transport: VoiceTransport§register_expires: u32§keepalive_secs: Option<u32>§disclosure_enabled: bool

Record-disclosure beep toggle — a column on the account row, so it rides along for free (the account-portable taxonomy in doc 40).

§updated_at: String

RFC 3339 last-modification time — the last-write-wins key. On conflict the platform (and a pulling client) keep the copy with the later updated_at. Whole-row LWW for v1; per-field merge is deferred until users actually report lost edits (doc 40).

§deleted_at: Option<String>

RFC 3339 soft-delete tombstone. None = live; Some = the line was deleted on some device at that time. A tombstone syncs like any other mutation so the delete propagates to other devices, then is reaped locally once confirmed. The platform retains tombstones so a late-syncing device still learns about the delete.

§envelope: SyncEnvelope

Version + forward-compat fields shared by every sync record.

Trait Implementations§

Source§

impl Clone for VoiceAccountRecord

Source§

fn clone(&self) -> VoiceAccountRecord

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for VoiceAccountRecord

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for VoiceAccountRecord

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl HasSyncEnvelope for VoiceAccountRecord

Source§

fn envelope_mut(&mut self) -> &mut SyncEnvelope

Source§

impl Serialize for VoiceAccountRecord

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more