Skip to main content

VmValue

Enum VmValue 

Source
pub enum VmValue {
Show 28 variants Int(i64), Float(f64), Decimal(Decimal), String(Arc<str>), Bytes(Arc<Vec<u8>>), Bool(bool), Nil, List(Arc<Vec<VmValue>>), Dict(Arc<DictMap>), Closure(Arc<VmClosure>), BuiltinRef(Arc<str>), BuiltinRefId(Arc<VmBuiltinRefId>), Duration(i64), EnumVariant(Arc<VmEnumVariant>), StructInstance { layout: Arc<StructLayout>, fields: Arc<Vec<Option<VmValue>>>, }, TaskHandle(Arc<str>), Channel(Arc<VmChannelHandle>), Atomic(Arc<VmAtomicHandle>), Rng(Arc<VmRngHandle>), SyncPermit(Arc<VmSyncPermitHandle>), McpClient(Arc<VmMcpClientHandle>), Set(Arc<Vec<VmValue>>), Generator(Arc<VmGenerator>), Stream(Arc<VmStream>), Range(Arc<VmRange>), Iter(VmIterHandle), Pair(Arc<(VmValue, VmValue)>), Harness(Arc<VmHarness>),
}
Expand description

VM runtime value.

Rare compound payloads use shared pointers so stack/local-slot traffic is bounded by the common scalar and pointer-sized value shapes. The two oversized inline payloads — Range (a 24-byte start/end/inclusive triple) and BuiltinRefId (an id + Arc<str> name) — are boxed behind a Shared pointer so no variant exceeds a fat pointer. That keeps VmValue at 24 bytes (down from 32) without inflating the common Int / Float / List / Dict / String shapes the interpreter moves on every push, pop, clone, and local-slot write. Unsafe layouts such as NaN boxing or tagged pointers are deliberately deferred until Harn has a stronger object/heap story.

Variants§

§

Int(i64)

§

Float(f64)

§

Decimal(Decimal)

Exact base-10 decimal (96-bit mantissa, up to 28–29 significant digits) for money and other values where binary float rounding is unacceptable. Inline (rust_decimal::Decimal is Copy and 16 bytes, the same width as the existing widest variants). Constructed via the decimal(value) builtin; it is a distinct type from Int/Float for equality/ordering/hashing (a clean island) but promotes Int operands exactly in arithmetic. See docs/src/decimal.md.

§

String(Arc<str>)

§

Bytes(Arc<Vec<u8>>)

§

Bool(bool)

§

Nil

§

List(Arc<Vec<VmValue>>)

§

Dict(Arc<DictMap>)

§

Closure(Arc<VmClosure>)

§

BuiltinRef(Arc<str>)

Reference to a registered builtin function, used when a builtin name is referenced as a value (e.g. snake_dict.rekey(snake_to_camel)). The contained string is the builtin’s registered name.

§

BuiltinRefId(Arc<VmBuiltinRefId>)

Compact builtin reference for callback positions. The boxed VmBuiltinRefId carries the id plus the name for policy, diagnostics, and fallback if the ID cannot be used. Boxed so the { id, name } pair does not widen every VmValue.

§

Duration(i64)

§

EnumVariant(Arc<VmEnumVariant>)

§

StructInstance

Fields

§fields: Arc<Vec<Option<VmValue>>>
§

TaskHandle(Arc<str>)

§

Channel(Arc<VmChannelHandle>)

§

Atomic(Arc<VmAtomicHandle>)

§

Rng(Arc<VmRngHandle>)

§

SyncPermit(Arc<VmSyncPermitHandle>)

§

McpClient(Arc<VmMcpClientHandle>)

§

Set(Arc<Vec<VmValue>>)

§

Generator(Arc<VmGenerator>)

§

Stream(Arc<VmStream>)

§

Range(Arc<VmRange>)

Lazy numeric range. Boxed behind a Shared pointer so its 24-byte start/end/inclusive payload does not set the whole-enum size; cloning a range value is then a refcount bump.

§

Iter(VmIterHandle)

Lazy iterator handle. Single-pass, fused. See crate::vm::iter::VmIter.

§

Pair(Arc<(VmValue, VmValue)>)

Two-element pair value. Produced by pair(a, b), yielded by the Dict iterator source, and (later) by zip / enumerate combinators. Accessed via .first / .second, and destructurable in for (a, b) in ... loops.

§

Harness(Arc<VmHarness>)

Capability handle threaded into main(harness: Harness). The same variant carries the root handle and each typed sub-handle (stdio, clock, fs, env, random, net) so they share one value shape but stay distinguishable via VmHarness::kind.

Implementations§

Source§

impl VmValue

Source

pub fn string(value: impl AsRef<str>) -> Self

Canonical VmValue::String constructor from anything string-like.

Collapses the ubiquitous VmValue::String(std::sync::Arc::from(..)) spelling to a single call and performs exactly one allocation via Arc::<str>::from(&str) regardless of whether the input is a &str, String, &String, or Cow<str>. Prefer this over hand-writing the Arc::from at call sites.

Source

pub fn char_value(ch: char) -> Self

Builds a VmValue::String holding a single character, reusing the interned ASCII table (see [ASCII_CHAR_STRINGS]) so the common ASCII path does not allocate.

Source

pub fn chars_list(text: &str) -> Self

Materializes a string into a VmValue::List of single-character string values in one linear pass. Backs both the chars builtin and the .chars() method, and is the cursor-scanner-friendly counterpart to the O(n)-per-call substring / slice / s[i] operations on a string.

Source

pub fn enum_variant( enum_name: impl Into<Arc<str>>, variant: impl Into<Arc<str>>, fields: Vec<VmValue>, ) -> Self

Source

pub fn task_handle(id: impl Into<Arc<str>>) -> Self

Source

pub fn range(range: VmRange) -> Self

Construct a boxed VmValue::Range from a VmRange.

Source

pub fn builtin_ref_id(id: BuiltinId, name: impl Into<Arc<str>>) -> Self

Construct a boxed VmValue::BuiltinRefId from its id and name.

Source

pub fn dict(entries: impl IntoIterator<Item = (String, VmValue)>) -> Self

Construct a VmValue::Dict from any iterator of (key, value) entries. Accepts the BTreeMap that most builders still assemble (it is IntoIterator<Item = (String, VmValue)>) and collects it into the persistent DictMap, so callers keep their familiar map-building code while the stored value gains structural sharing.

Source

pub fn dict_map(map: DictMap) -> Self

Construct a VmValue::Dict from an already-built DictMap.

Source

pub fn channel(handle: VmChannelHandle) -> Self

Source

pub fn atomic(handle: VmAtomicHandle) -> Self

Source

pub fn rng(handle: VmRngHandle) -> Self

Source

pub fn sync_permit(handle: VmSyncPermitHandle) -> Self

Source

pub fn mcp_client(handle: VmMcpClientHandle) -> Self

Source

pub fn generator(generator: VmGenerator) -> Self

Source

pub fn stream(stream: VmStream) -> Self

Source

pub fn harness(handle: VmHarness) -> Self

Source

pub fn struct_instance( struct_name: impl Into<Arc<str>>, fields: DictMap, ) -> Self

Source

pub fn is_truthy(&self) -> bool

Source

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

Source

pub fn as_str_cow(&self) -> Cow<'_, str>

Borrows the string contents without allocating when the value is already a string. Non-string values are rendered with display(), matching the coercion callers apply at string boundaries. Hot string builtins (regex, split, contains) use this to avoid cloning the subject text on every call.

Source

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

Source

pub fn struct_field(&self, field_name: &str) -> Option<&VmValue>

Source

pub fn struct_fields_map(&self) -> Option<DictMap>

Source

pub fn struct_instance_from_map( struct_name: impl Into<String>, fields: DictMap, ) -> Self

Source

pub fn struct_instance_with_layout( struct_name: impl Into<String>, field_names: Vec<String>, field_values: DictMap, ) -> Self

Source

pub fn struct_instance_with_property( &self, field_name: &str, value: VmValue, ) -> Option<Self>

Source

pub fn display(&self) -> String

Source

pub fn write_display(&self, out: &mut String)

Writes the display representation directly into out, avoiding intermediate Vec allocations for collections.

Source

pub fn as_dict(&self) -> Option<&DictMap>

Get the value as a DictMap reference, if it’s a Dict.

Source

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

Source

pub fn as_bytes(&self) -> Option<&[u8]>

Trait Implementations§

Source§

impl Clone for VmValue

Source§

fn clone(&self) -> VmValue

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 VmValue

Source§

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

Formats the value using the given formatter. Read more

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<'a, T, E> AsTaggedExplicit<'a, E> for T
where T: 'a,

Source§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

Source§

impl<'a, T, E> AsTaggedImplicit<'a, E> for T
where T: 'a,

Source§

fn implicit( self, class: Class, constructed: bool, tag: u32, ) -> TaggedParser<'a, Implicit, Self, E>

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> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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> Paint for T
where T: ?Sized,

Source§

fn fg(&self, value: Color) -> Painted<&T>

Returns a styled value derived from self with the foreground set to value.

This method should be used rarely. Instead, prefer to use color-specific builder methods like red() and green(), which have the same functionality but are pithier.

§Example

Set foreground color to white using fg():

use yansi::{Paint, Color};

painted.fg(Color::White);

Set foreground color to white using white().

use yansi::Paint;

painted.white();
Source§

fn primary(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Primary].

§Example
println!("{}", value.primary());
Source§

fn fixed(&self, color: u8) -> Painted<&T>

Returns self with the fg() set to [Color :: Fixed].

§Example
println!("{}", value.fixed(color));
Source§

fn rgb(&self, r: u8, g: u8, b: u8) -> Painted<&T>

Returns self with the fg() set to [Color :: Rgb].

§Example
println!("{}", value.rgb(r, g, b));
Source§

fn black(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Black].

§Example
println!("{}", value.black());
Source§

fn red(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Red].

§Example
println!("{}", value.red());
Source§

fn green(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Green].

§Example
println!("{}", value.green());
Source§

fn yellow(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Yellow].

§Example
println!("{}", value.yellow());
Source§

fn blue(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Blue].

§Example
println!("{}", value.blue());
Source§

fn magenta(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Magenta].

§Example
println!("{}", value.magenta());
Source§

fn cyan(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Cyan].

§Example
println!("{}", value.cyan());
Source§

fn white(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: White].

§Example
println!("{}", value.white());
Source§

fn bright_black(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightBlack].

§Example
println!("{}", value.bright_black());
Source§

fn bright_red(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightRed].

§Example
println!("{}", value.bright_red());
Source§

fn bright_green(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightGreen].

§Example
println!("{}", value.bright_green());
Source§

fn bright_yellow(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightYellow].

§Example
println!("{}", value.bright_yellow());
Source§

fn bright_blue(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightBlue].

§Example
println!("{}", value.bright_blue());
Source§

fn bright_magenta(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightMagenta].

§Example
println!("{}", value.bright_magenta());
Source§

fn bright_cyan(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightCyan].

§Example
println!("{}", value.bright_cyan());
Source§

fn bright_white(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightWhite].

§Example
println!("{}", value.bright_white());
Source§

fn bg(&self, value: Color) -> Painted<&T>

Returns a styled value derived from self with the background set to value.

This method should be used rarely. Instead, prefer to use color-specific builder methods like on_red() and on_green(), which have the same functionality but are pithier.

§Example

Set background color to red using fg():

use yansi::{Paint, Color};

painted.bg(Color::Red);

Set background color to red using on_red().

use yansi::Paint;

painted.on_red();
Source§

fn on_primary(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Primary].

§Example
println!("{}", value.on_primary());
Source§

fn on_fixed(&self, color: u8) -> Painted<&T>

Returns self with the bg() set to [Color :: Fixed].

§Example
println!("{}", value.on_fixed(color));
Source§

fn on_rgb(&self, r: u8, g: u8, b: u8) -> Painted<&T>

Returns self with the bg() set to [Color :: Rgb].

§Example
println!("{}", value.on_rgb(r, g, b));
Source§

fn on_black(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Black].

§Example
println!("{}", value.on_black());
Source§

fn on_red(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Red].

§Example
println!("{}", value.on_red());
Source§

fn on_green(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Green].

§Example
println!("{}", value.on_green());
Source§

fn on_yellow(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Yellow].

§Example
println!("{}", value.on_yellow());
Source§

fn on_blue(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Blue].

§Example
println!("{}", value.on_blue());
Source§

fn on_magenta(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Magenta].

§Example
println!("{}", value.on_magenta());
Source§

fn on_cyan(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Cyan].

§Example
println!("{}", value.on_cyan());
Source§

fn on_white(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: White].

§Example
println!("{}", value.on_white());
Source§

fn on_bright_black(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightBlack].

§Example
println!("{}", value.on_bright_black());
Source§

fn on_bright_red(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightRed].

§Example
println!("{}", value.on_bright_red());
Source§

fn on_bright_green(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightGreen].

§Example
println!("{}", value.on_bright_green());
Source§

fn on_bright_yellow(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightYellow].

§Example
println!("{}", value.on_bright_yellow());
Source§

fn on_bright_blue(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightBlue].

§Example
println!("{}", value.on_bright_blue());
Source§

fn on_bright_magenta(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightMagenta].

§Example
println!("{}", value.on_bright_magenta());
Source§

fn on_bright_cyan(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightCyan].

§Example
println!("{}", value.on_bright_cyan());
Source§

fn on_bright_white(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightWhite].

§Example
println!("{}", value.on_bright_white());
Source§

fn attr(&self, value: Attribute) -> Painted<&T>

Enables the styling Attribute value.

This method should be used rarely. Instead, prefer to use attribute-specific builder methods like bold() and underline(), which have the same functionality but are pithier.

§Example

Make text bold using attr():

use yansi::{Paint, Attribute};

painted.attr(Attribute::Bold);

Make text bold using using bold().

use yansi::Paint;

painted.bold();
Source§

fn bold(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Bold].

§Example
println!("{}", value.bold());
Source§

fn dim(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Dim].

§Example
println!("{}", value.dim());
Source§

fn italic(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Italic].

§Example
println!("{}", value.italic());
Source§

fn underline(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Underline].

§Example
println!("{}", value.underline());

Returns self with the attr() set to [Attribute :: Blink].

§Example
println!("{}", value.blink());

Returns self with the attr() set to [Attribute :: RapidBlink].

§Example
println!("{}", value.rapid_blink());
Source§

fn invert(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Invert].

§Example
println!("{}", value.invert());
Source§

fn conceal(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Conceal].

§Example
println!("{}", value.conceal());
Source§

fn strike(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Strike].

§Example
println!("{}", value.strike());
Source§

fn quirk(&self, value: Quirk) -> Painted<&T>

Enables the yansi Quirk value.

This method should be used rarely. Instead, prefer to use quirk-specific builder methods like mask() and wrap(), which have the same functionality but are pithier.

§Example

Enable wrapping using .quirk():

use yansi::{Paint, Quirk};

painted.quirk(Quirk::Wrap);

Enable wrapping using wrap().

use yansi::Paint;

painted.wrap();
Source§

fn mask(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: Mask].

§Example
println!("{}", value.mask());
Source§

fn wrap(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: Wrap].

§Example
println!("{}", value.wrap());
Source§

fn linger(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: Linger].

§Example
println!("{}", value.linger());
Source§

fn clear(&self) -> Painted<&T>

👎Deprecated since 1.0.1:

renamed to resetting() due to conflicts with Vec::clear(). The clear() method will be removed in a future release.

Returns self with the quirk() set to [Quirk :: Clear].

§Example
println!("{}", value.clear());
Source§

fn resetting(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: Resetting].

§Example
println!("{}", value.resetting());
Source§

fn bright(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: Bright].

§Example
println!("{}", value.bright());
Source§

fn on_bright(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: OnBright].

§Example
println!("{}", value.on_bright());
Source§

fn whenever(&self, value: Condition) -> Painted<&T>

Conditionally enable styling based on whether the Condition value applies. Replaces any previous condition.

See the crate level docs for more details.

§Example

Enable styling painted only when both stdout and stderr are TTYs:

use yansi::{Paint, Condition};

painted.red().on_yellow().whenever(Condition::STDOUTERR_ARE_TTY);
Source§

fn new(self) -> Painted<Self>
where Self: Sized,

Create a new Painted with a default Style. Read more
Source§

fn paint<S>(&self, style: S) -> Painted<&Self>
where S: Into<Style>,

Apply a style wholesale to self. Any previous style is replaced. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. 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 = 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.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

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