Skip to main content

ResetDepth

Enum ResetDepth 

Source
#[non_exhaustive]
pub enum ResetDepth { None, File, Policy, Env, All, }
Expand description

How much of a Flockfile load overwrites what the operator has set since.

A mode touches what its name says, and the design spec (2026-09-02-config-overrides-design.md §3) states each variant against three columns rather than two: whether env is reset, whether a key the template declares is reset, and whether a key it does not declare is.

Not a two-by-two grid, and an earlier version of this comment said it was. There are two independent choices, but the settings one has three settings rather than two – untouched, declared only, or everything – which makes six combinations. These four are the ones worth having. One discarded combination resets nothing at all, so it is the additive default with extra typing. The other is File plus Env: reset env, and reset only what the template declares, sparing everything it does not. That one is coherent, not useless, and is left out only because nobody has asked for it.

#[non_exhaustive]: no fifth depth is anticipated, and the attribute buys SOURCE compatibility rather than wire compatibility. It forces a crate outside this one to carry a wildcard arm, so adding a variant does not break its build. It does nothing for serde, which is worth stating because an earlier version of this comment claimed otherwise: this enum carries no #[serde(other)], so a build meeting a variant it predates fails to deserialize with unknown variant, measured rather than assumed. That is the whole reason renaming Settings to Policy moved PROTOCOL_VERSION to 3 instead of riding the additive precedent.

Variants (Non-exhaustive)§

This enum is marked as non-exhaustive
Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.
§

None

Append keys nobody established. Overwrite nothing. The default, because a Flockfile arrives from the app’s own repository.

env: kept. A key the template declares: kept, unless nobody has established it yet, which is the append. A key it does not declare: kept, since there is nothing to append it against.

§

File

Put back what the template declares, and nothing else.

env: kept. A key the template declares: reset. A key it does not declare: kept – an app stocked to four instances against a file with no instances line keeps its count, because the file never entered that argument. This is the mode that fixes the footgun Policy below reintroduces.

§

Policy

Put non-env settings back to the template, env kept. Every setting goes back, declared or not: a key the template is silent about goes to the value a fresh start off that template would give it. env is operator-supplied data while the rest is operator-tuned policy: resetting policy is recoverable, resetting data takes the app’s database away.

env: kept. A key the template declares: reset. A key it does not declare: reset too, to the template’s own default.

§

Env

Reset env back to the template and leave everything else alone.

This mode touches data, not policy, so it has no opinion about any setting: a restart budget the template happens to mention is not the operator’s to lose to a flag that says env. On the settings axis it is therefore None, append included, because the flag widens a load rather than narrowing one.

env: reset. A key the template declares: kept, save for the same append None does. A key it does not declare: kept.

§

All

Put everything back to the template, env included, and drop the override record.

env: reset. A key the template declares: reset. A key it does not declare: reset too, to the template’s own default.

Trait Implementations§

Source§

impl Clone for ResetDepth

Source§

fn clone(&self) -> ResetDepth

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 Copy for ResetDepth

Source§

impl Debug for ResetDepth

Source§

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

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

impl Default for ResetDepth

Source§

fn default() -> ResetDepth

Returns the “default value” for a type. Read more
Source§

impl<'de> Deserialize<'de> for ResetDepth

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 Eq for ResetDepth

Source§

impl PartialEq for ResetDepth

Source§

fn eq(&self, other: &ResetDepth) -> 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 ResetDepth

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 ResetDepth

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> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

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

Checks if this value is equivalent to the given key. Read more
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<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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