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: StringDaemon-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: boolWhether 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: boolRecord-disclosure beep toggle — a column on the account row, so it rides along for free (the account-portable taxonomy in doc 40).
updated_at: StringRFC 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: SyncEnvelopeVersion + forward-compat fields shared by every sync record.
Trait Implementations§
Source§impl Clone for VoiceAccountRecord
impl Clone for VoiceAccountRecord
Source§fn clone(&self) -> VoiceAccountRecord
fn clone(&self) -> VoiceAccountRecord
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more