pub struct AuditOutcome {Show 16 fields
pub command: Vec<String>,
pub integration: &'static str,
pub file_id: String,
pub lease_id: Option<String>,
pub verdict: String,
pub version_before: Option<String>,
pub version_after: Option<String>,
pub modified_time_before: Option<String>,
pub modified_time_after: Option<String>,
pub backup_location: Option<String>,
pub backup_sha256: Option<String>,
pub backup_size: Option<u64>,
pub auth_policy: Option<String>,
pub restored_from_lease_id: Option<String>,
pub superseded_lease_id: Option<String>,
pub error: Option<String>,
}Expand description
One event for the Drive write-lease audit trail (ADR-0080 §11).
Covers drive lease acquire succeeding or refusing, or a leased write’s
own intent/outcome pair — a single shape for all of them, the same way
DriveMutationOutcome is one shape for every mutating verb. The
verdict field (kebab-case, mirroring every other *Result::log_status
in this codebase) is what distinguishes them, not a separate Rust type
per event kind.
Fields§
§command: Vec<String>The audited command, e.g. ["drive", "lease-acquire"] or ["drive", "edit"] — becomes the record’s command, mirroring
DriveMutationOutcome::operation.
integration: &'static strWhich integration this event belongs to ("drive" today; ADR-0080
§11 names Gmail/Atlassian as later, additive extensions).
file_id: StringThe Drive file id the lease/write concerns.
lease_id: Option<String>The lease token, once one exists. Absent for an acquire attempt that never reached minting one (denied/unavailable/refused before a token was created).
verdict: StringWhat happened, kebab-case: "acquired", "refused-native-document",
"denied", "unavailable", "failed" for an acquire attempt;
"pending" (the write-ahead intent), then "allowed" or "failed"
(the outcome), or a single "refused-no-lease",
"refused-lease-expired", "refused-lease-wrong-file",
"refused-lease-stale" / "failed" for a leased write that never
reached its mutating call (crate::drive::lease::check::verdict).
Free-form rather than a closed enum, like every other
*Result::log_status in this codebase — a later integration’s
verdict vocabulary doesn’t need a schema change here.
version_before: Option<String>The file’s Drive version before the event, when relevant.
version_after: Option<String>The file’s Drive version after, when relevant (e.g. the version an
acquire recorded into the ledger, or a leased write’s post-write
version).
modified_time_before: Option<String>modifiedTime paired with Self::version_before.
modified_time_after: Option<String>modifiedTime paired with Self::version_after.
backup_location: Option<String>Where an acquire’s backup landed: a local path for a byte backup, or the backup copy’s own file id for a native-document backup.
backup_sha256: Option<String>SHA-256 of a byte backup, for later integrity verification. None
for a native-document backup (verified by Drive’s own copy
semantics instead) and for anything that isn’t an acquire.
backup_size: Option<u64>Size in bytes of a byte backup.
auth_policy: Option<String>Which authentication policy (ADR-0080 §7) an acquire satisfied —
"device-owner" or "biometrics-only".
restored_from_lease_id: Option<String>drive lease restore only: the backup lease’s token the restore
read from — distinct from Self::lease_id, the fresh token the
restore itself minted before writing (ADR-0080 §10/§11: “the restore
is audit-logged carrying both tokens”). None for every other
event.
superseded_lease_id: Option<String>The lease this event ended early, when it ended one as a side effect
of doing something else: drive lease acquire’s supersede, set only
by drive lease restore naming the backup token it restores from
(issue #1685). Distinct from Self::lease_id, the token the
acquire itself minted, and from a drive lease release record, whose
released token is its lease_id. None for every other event.
A field rather than a verdict — unlike the headless waiver, which is
a flag and so became acquired-headless-waiver — because this
carries an identifier, exactly as Self::restored_from_lease_id
does, and a third verdict axis would multiply combinatorially with
the existing -headless-waiver/-backup-orphaned suffixes.
error: Option<String>The error, when the event itself failed (an API/filesystem/ledger
error — distinct from an ordinary refusal, which is a verdict, not
an error).
Trait Implementations§
Source§impl Clone for AuditOutcome
impl Clone for AuditOutcome
Source§impl Debug for AuditOutcome
impl Debug for AuditOutcome
Auto Trait Implementations§
impl Freeze for AuditOutcome
impl RefUnwindSafe for AuditOutcome
impl Send for AuditOutcome
impl Sync for AuditOutcome
impl Unpin for AuditOutcome
impl UnsafeUnpin for AuditOutcome
impl UnwindSafe for AuditOutcome
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more