Skip to main content

ConfigValue

Enum ConfigValue 

Source
pub enum ConfigValue {
    Bool(bool),
    Int(i64),
    Str(String),
    List(Vec<ConfigValue>),
    Record(BTreeMap<String, ConfigValue>),
}
Expand description

A value shaped by a ConfigSchema.

Record is a BTreeMap rather than a Vec<(String, ConfigValue)> so two values that differ only in field order compare equal — an option’s value arriving from lattice.toml (which does not preserve order across a round-trip) and the same value built in init.rs must not be two different values. The wire form is an association list, because WIT has no map; the conversion is where the ordering stops mattering.

Variants§

§

Bool(bool)

A boolean leaf.

§

Int(i64)

An integer leaf.

§

Str(String)

A string leaf — also the representation of an ConfigSchema::Enum form.

§

List(Vec<ConfigValue>)

A list of values (homogeneous only if its schema says so).

§

Record(BTreeMap<String, ConfigValue>)

Named fields, compared order-independently.

Implementations§

Source§

impl ConfigValue

Source

pub fn record(fields: impl IntoIterator<Item = (String, ConfigValue)>) -> Self

Build a record from pairs. The wire and TOML forms both arrive as pairs.

Source

pub fn kind_label(&self) -> &'static str

The word a mismatch message uses for what was actually found.

Source

pub fn as_str(&self) -> Option<&str>

Read a scalar back out. None on a kind mismatch rather than a panic — callers are usually walking a tree they have already validated, and the ones that have not should not be able to crash the editor over a config file. This one reads a ConfigValue::Str.

Source

pub fn as_bool(&self) -> Option<bool>

The boolean in a ConfigValue::Bool; None for any other kind.

Source

pub fn as_int(&self) -> Option<i64>

The integer in a ConfigValue::Int; None for any other kind.

Source

pub fn as_list(&self) -> Option<&[ConfigValue]>

The elements of a ConfigValue::List; None for any other kind.

Source

pub fn field(&self, name: &str) -> Option<&ConfigValue>

A record’s field by name. None if the field is absent or self is not a ConfigValue::Record.

Trait Implementations§

Source§

impl Clone for ConfigValue

Source§

fn clone(&self) -> ConfigValue

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 ConfigValue

Source§

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

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

impl Eq for ConfigValue

Source§

impl OptionType for ConfigValue

TC.3 — a ConfigValue is itself an option value type.

This is what a plugin’s structured option holds. The shape is NOT here: a plugin declares its schema at registration and it is carried on the option spec (crate::option::Option::structured), because the schema is metadata about the option — like its doc and its default — rather than data inside the value. A value that carried its own schema could not survive from_value, which is a static function with no access to the option it is being set on.

parse / format are TOML text, which keeps the :set contract and costs nothing: the host already has a TOML parser, so a structured option stays settable from the command line and :set foo? still echoes something a user can read and paste back. It also means the migration of an option that was a TOML-in-a-string is not a break for anyone who was setting it that way — the text they wrote still parses, it is simply now validated.

Source§

fn schema() -> ConfigSchema

Unknowable statically — the shape belongs to the OPTION, not the type. Every real structured option is built through crate::option::Option::structured, which records the declared schema on the spec and is what ErasedOption::schema() answers with. This fallback exists only so the trait is implementable.

Source§

fn parse(s: &str) -> Result<Self, String>

Parse the right-hand side of :set name=value. Errors are surfaced verbatim through the cmdline echo, so the message should read well to the user (mention valid forms when the space is finite). The parser MUST round-trip with format: T::parse(&v.format()) == Ok(v) for every v.
Source§

fn format(&self) -> String

Render the current value back to a string (:set foo? echo, the customize buffer view, value comparison). Round-trips with Self::parse.
Source§

fn type_label() -> &'static str

Short type label for :describe-option ("boolean", "foldmethod", etc.). Used in help bodies and the customize buffer view.
Source§

fn to_value(&self) -> ConfigValue

This value as a schema-shaped tree. Read more
Source§

fn from_value(value: &ConfigValue) -> Result<Self, String>

Rebuild from a tree. Default: the inverse of Self::to_value, deferring to parse so a type’s validation rules apply on this path exactly as they do on :set.
Source§

fn enumerate() -> Option<Vec<&'static str>>

Optional: enumerate valid string forms for :set foo=<Tab> completion. None means “free-form” (no enumerable space – integers, file paths, free strings). The values are &'static str to keep the completion source allocation-free in the common case.
Source§

fn enumerate_with_docs() -> Option<Vec<EnumeratedValue>>

Optional: enumerate valid string forms WITH per-value doc strings for the cmdline-completion marginalia column. Default impl wraps Self::enumerate with empty docs; types with rich help override. Read more
Source§

fn name_forms(_canonical: &str) -> Vec<String>

Optional: alternative name forms this type accepts for the option name itself. Used by completion to surface the name alongside its negation (:set nu / :set nonu). Default: no extra forms. Booleans return [format!("no{canonical}")].
Source§

fn is_bool() -> bool

Whether this type’s option supports :set noFOO. bool returns true; everything else false. Drives the negate path in the cmdline parser.
Source§

fn accepts_list() -> bool

Whether this option’s value is list-shaped — i.e. a TOML array at config-load time should be joined into the delimited string Self::parse accepts, rather than rejected as “not applicable to a scalar option”. false for every scalar type (the default); true for list types like crate::ModelineZone. Drives loader::apply_array (ML.5). The :set cmdline path is unaffected — it always passes a string and never sees a TOML array.
Source§

fn try_negation_value() -> Result<Self, String>

Negation value (only meaningful for Self::is_bool true). Default: returns Err – the registry guards by checking is_bool() first, so callers that respect the contract won’t observe this. The bool impl returns Ok(false).
Source§

fn enumerate_is_exhaustive() -> bool

Whether Self::enumerate is the COMPLETE set of valid values (a closed enum) or a completion hint over an open space. Read more
Source§

impl PartialEq for ConfigValue

Source§

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

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

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

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for ConfigValue

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
§

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

§

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.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

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

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

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

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

impl<T> WithSubscriber for T

§

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
§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more