pub enum StructureResult {
Show 16 variants
WouldChange {
sheet: Option<Box<SheetSnapshot>>,
sheet_count: usize,
},
RefusedNotASpreadsheet {
mime_type: String,
},
RefusedShortcut,
RefusedNoVisibleParents,
RefusedSheetNotFound {
title: String,
available: Vec<String>,
},
RefusedSheetExists {
title: String,
},
RefusedInvalidRange {
detail: String,
},
Blocked {
decided_by: Option<DecidingRule>,
},
RefusedNoLease,
RefusedLeaseExpired,
RefusedLeaseWrongFile,
RefusedLeaseStale,
Unchanged {
detail: String,
},
Changed {
sheet: Option<Box<SheetSnapshot>>,
sheet_id: Option<i64>,
backup: Option<Box<LeaseBackup>>,
},
AppliedReplyUnreadable {
summary: String,
detail: String,
sheet: Option<Box<SheetSnapshot>>,
sheet_id: Option<i64>,
backup: Option<Box<LeaseBackup>>,
},
Failed {
detail: String,
},
}Expand description
What happened (or, under --dry-run, would happen).
Variants§
WouldChange
--dry-run, and the gate would allow it.
Fields
sheet: Option<Box<SheetSnapshot>>The target sheet as it stands now. None for an add-sheet,
which has no existing sheet to snapshot.
Boxed (issue #1835): SheetSnapshot grew enough with
update-sheet-properties’s frozen-row/column and layout fields
that this enum otherwise trips clippy::result_large_err, the
same reasoning Changed’s own backup field is already boxed
for.
RefusedNotASpreadsheet
The target is not a Google Sheet. Checked client-side before the gate: restructuring a PDF isn’t disallowed, it’s meaningless.
RefusedShortcut
The target is a shortcut, which we do not follow.
RefusedNoVisibleParents
The target has no parents this account can see, so the folder gate
has no ancestor chain to evaluate. Distinct from Blocked; see
write.rs’s variant of the same name.
RefusedSheetNotFound
The named sheet does not exist in this workbook.
Not the client-side validation ADR-0073 §7 rejects: §7 is about A1
grammar, where a naive validator rejects legal forms. Here the
server’s own authoritative sheet list is already in hand, and without
this check a --dry-run would promise a change the real run fails.
Fields
RefusedSheetExists
add-sheet was given a title the workbook already uses, or
rename-sheet’s new title collides with a different existing
sheet. Sheets rejects a duplicate title, and catching it here keeps
the dry run truthful.
RefusedInvalidRange
A numeric argument (--at, --count, --rows, --columns,
--index) is out of range for what the workbook actually contains —
checked against the same spreadsheets.get response already fetched
for the dry run, so this costs nothing extra and is exactly as
correct as the server’s own eventual rejection would be (ADR-0075
§6’s reasoning for the sheet-existence/duplicate-title checks,
applied to a numeric bound instead of a title). Also reused for
update-workbook-properties’ argument-combination checks (issue
#1836, e.g. “needs at least one property to set”), which need no
workbook state at all — format.rs::FormatResult::RefusedInvalidRange
is the same broadening for format-cells’ “at least one property”
check.
Blocked
The folder write-permission gate refused it.
Fields
decided_by: Option<DecidingRule>The rule that decided the refusal, if any (None means the bare
default policy — every write defaults deny).
RefusedNoLease
No --lease was presented, and the deciding rule requires one
(ADR-0080 §9).
RefusedLeaseExpired
The presented lease has expired, or was never a token this ledger knows about.
RefusedLeaseWrongFile
The presented lease is bound to a different file id.
RefusedLeaseStale
The file has moved since the lease’s recorded version — the
staleness check (ADR-0080 §6).
Unchanged
The workbook is already in the requested state (hide-sheet on a
hidden sheet, show-sheet on a visible one), so no request is
sent. Reported identically by a dry run and a real run, and
distinct from Changed so a script can tell a no-op from a change.
Changed
The mutation succeeded.
Fields
sheet: Option<Box<SheetSnapshot>>The sheet acted on, as it stood before the change.
Boxed for the same clippy::result_large_err reason as
WouldChange’s own sheet field (issue #1835).
sheet_id: Option<i64>The sheet id, which for add-sheet the server assigns and is
only knowable from the reply.
backup: Option<Box<LeaseBackup>>Where the lease this write presented backed the file up at
drive lease acquire time — the copy to restore from after a
destructive verb. None when the deciding write-permission
rule set require_lease: false, in which case no backup was
taken (ADR-0080 §13) and the outcome must not claim one.
Read straight off the ledger record the write was checked
against (drive::lease::check::LeaseGrant), never
assumed, so the recovery message a real-run delete prints is
only ever true. Boxed only to keep the enum under clippy’s
result_large_err threshold — LeaseBackup::Bytes carries a
path plus a hash, and this enum is a Result error type inside
the engine.
AppliedReplyUnreadable
The API answered 2xx — the mutation was applied — but its reply
could not be read (issue #2021). Distinct from Self::Failed: no
structural verb is safe to re-run blind (a second add-sheet or
delete-rows compounds). The server-assigned id of an added or
duplicated sheet was in that reply, so it is unknown.
Fields
sheet: Option<Box<SheetSnapshot>>The sheet acted on, as it stood before the change — plan-time
data, so it survives the lost reply exactly as Self::Changed
carries it.
sheet_id: Option<i64>The target sheet’s id, from the pre-resolved snapshot. None for
add-sheet/duplicate-sheet, whose id Self::Changed reads
from the reply — the one thing lost here.
backup: Option<Box<LeaseBackup>>The lease backup, exactly as Self::Changed’s own backup
field: a destructive verb’s recovery note names it, since the
delete happened whether or not its reply was readable.
Failed
An API or validation error.
Trait Implementations§
Source§impl Clone for StructureResult
impl Clone for StructureResult
Source§impl Debug for StructureResult
impl Debug for StructureResult
impl Eq for StructureResult
Source§impl PartialEq for StructureResult
impl PartialEq for StructureResult
Source§impl Serialize for StructureResult
impl Serialize for StructureResult
impl StructuralPartialEq for StructureResult
Auto Trait Implementations§
impl Freeze for StructureResult
impl RefUnwindSafe for StructureResult
impl Send for StructureResult
impl Sync for StructureResult
impl Unpin for StructureResult
impl UnsafeUnpin for StructureResult
impl UnwindSafe for StructureResult
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<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
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