Skip to main content

StructureResult

Enum StructureResult 

Source
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.

§sheet_count: usize

How many sheets the workbook currently has.

§

RefusedNotASpreadsheet

The target is not a Google Sheet. Checked client-side before the gate: restructuring a PDF isn’t disallowed, it’s meaningless.

Fields

§mime_type: String

The target’s actual MIME type.

§

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

§title: String

The title that was not found.

§available: Vec<String>

The titles that do exist, so the message can be actionable.

§

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.

Fields

§title: String

The colliding title.

§

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.

Fields

§detail: String

What was wrong and why.

§

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.

Fields

§detail: String

Why nothing needed to 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

§summary: String

What was applied, e.g. delete-rows 'Q2' (ROWS 5:7).

§detail: String

Why the reply could not be read.

§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.

Fields

§detail: String

A human-readable summary of what failed.

Trait Implementations§

Source§

impl Clone for StructureResult

Source§

fn clone(&self) -> Self

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 StructureResult

Source§

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

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

impl Eq for StructureResult

Source§

impl PartialEq for StructureResult

Source§

fn eq(&self, other: &Self) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl Serialize for StructureResult

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
Source§

impl StructuralPartialEq for StructureResult

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<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> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

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

Source§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

Converts 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
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> 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 = !

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

fn try_from(value: U) -> Result<T, !>

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<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