Skip to main content

MontyObject

Enum MontyObject 

Source
pub enum MontyObject {
Show 29 variants Ellipsis, NotImplemented, None, Bool(bool), Int(i64), BigInt(BigInt), Float(f64), String(String), Bytes(Vec<u8>), List(Vec<MontyObject>), Tuple(Vec<MontyObject>), NamedTuple { type_name: String, field_names: Vec<String>, values: Vec<MontyObject>, }, Dict(DictPairs), Set(Vec<MontyObject>), FrozenSet(Vec<MontyObject>), Date(MontyDate), DateTime(MontyDateTime), Time(MontyTime), TimeDelta(MontyTimeDelta), TimeZone(MontyTimeZone), Exception { exc_type: ExcType, arg: Option<String>, }, Type(MontyType), BuiltinFunction(BuiltinsFunctions), Path(String), FileHandle(MontyFileHandle), ClassInstance(Box<MontyClassInstance>), Function { name: String, docstring: Option<String>, }, Repr(String), Cycle(usize, String),
}
Expand description

An owned Python value exchanged between Monty and its host.

Construct MontyObject values to provide globals, external-function results, and other inputs to sandboxed code. Execution results and values passed to host callbacks use the same representation.

Most common Python values have a direct variant, including nested collections and datetime values. Repr and Cycle can only appear in output because they cannot be reconstructed as executable Python values. Exception can be used both to raise an exception and to represent one returned by execution.

Collections are owned snapshots: modifying a returned MontyObject does not modify the corresponding value in a running session.

§Hashability

Only immutable variants implement Hash, including the datetime family (Date, DateTime, TimeDelta, TimeZone). Attempting to hash mutable variants (List, Dict) will panic.

§Serialization

The derived Serialize / Deserialize impls use an externally tagged format ({"Int": 42}, {"String": "hi"}, …). This is what postcard and serde_json::to_string(&obj) produce. It is lossless and designed for snapshots and binary transport, not for human-facing JSON.

Variants§

§

Ellipsis

Python’s Ellipsis singleton (...).

§

NotImplemented

Python’s NotImplemented singleton.

§

None

Python’s None singleton.

§

Bool(bool)

Python boolean (True or False).

§

Int(i64)

Python integer (64-bit signed).

§

BigInt(BigInt)

Python arbitrary-precision integer (larger than i64).

§

Float(f64)

Python float (64-bit IEEE 754).

§

String(String)

Python string (UTF-8).

§

Bytes(Vec<u8>)

Python bytes object.

§

List(Vec<MontyObject>)

Python list (mutable sequence).

§

Tuple(Vec<MontyObject>)

Python tuple (immutable sequence).

§

NamedTuple

Python named tuple (immutable sequence with named fields).

Named tuples behave like tuples but also support attribute access by field name. The type_name is used in repr (e.g., “os.stat_result”), and field_names provides the attribute names for each position.

Fields

§type_name: String

Type name for repr (e.g., “os.stat_result”).

§field_names: Vec<String>

Field names in order.

§values: Vec<MontyObject>

Values in order (same length as field_names).

§

Dict(DictPairs)

Python dictionary (insertion-ordered mapping).

§

Set(Vec<MontyObject>)

Python set (mutable, unordered collection of unique elements).

§

FrozenSet(Vec<MontyObject>)

Python frozenset (immutable, unordered collection of unique elements).

§

Date(MontyDate)

Python datetime.date.

§

DateTime(MontyDateTime)

Python datetime.datetime.

§

Time(MontyTime)

Python datetime.time.

§

TimeDelta(MontyTimeDelta)

Python datetime.timedelta.

§

TimeZone(MontyTimeZone)

Python datetime.timezone fixed-offset timezone.

§

Exception

Python exception with type and optional message argument.

Fields

§exc_type: ExcType

The exception type (e.g., ValueError, TypeError).

§arg: Option<String>

Optional string argument passed to the exception constructor.

§

Type(MontyType)

A Python type object (e.g., int, str, list).

Returned by the type() builtin and can be compared with other types.

§

BuiltinFunction(BuiltinsFunctions)

§

Path(String)

Python pathlib.Path object (or technically a PurePosixPath).

Represents a filesystem path. Can be used both as input (from host) and output.

§

FileHandle(MontyFileHandle)

An open file object (the result of open()).

§

ClassInstance(Box<MontyClassInstance>)

A class instance crossing the sandbox boundary (see MontyClassInstance). Boxed: the payload is larger than every other variant and would grow MontyObject (and so every container element) otherwise.

§

Function

An external function provided by the host.

Returned by the host in response to a NameLookup to provide a callable that the VM can invoke. When called, the VM yields FunctionCall to the host.

Fields

§name: String

The function name (used for repr, error messages, and function call identification).

§docstring: Option<String>

Optional docstring for the function.

§

Repr(String)

Fallback for values that cannot be represented as other variants.

Contains the repr() string of the original value.

This is output-only and cannot be used as an input to the interpreter.

§

Cycle(usize, String)

Represents a cycle detected during Value-to-MontyObject conversion.

When converting cyclic structures (e.g., a = []; a.append(a)), this variant is used to break the infinite recursion. Contains an opaque identity token (the raw heap index of the object the cycle points back to — meaningful only for equality, and only within the result that produced it) and the type-specific placeholder string (e.g., "[...]" for lists, "{...}" for dicts). Two Cycle values compare equal if they refer to the same object.

This is output-only and cannot be used as an input to the interpreter.

Implementations§

Source§

impl MontyObject

Source

pub fn dict(dict: impl Into<DictPairs>) -> MontyObject

Creates a new MontyObject from something that can be converted into a DictPairs.

Source

pub fn builtin_function_from_name(name: &str) -> Option<MontyObject>

Resolves a builtin function by its Python name (e.g. "len").

The BuiltinsFunctions enum inside MontyObject::BuiltinFunction is crate-private, so boundaries that serialize a builtin function by name (e.g. the subprocess wire protocol) use this to reconstruct the variant. The name matches the variant’s Display output.

Source

pub const fn host_base_size() -> usize

Returns the fixed host footprint charged for each decoded object.

Source

pub const fn host_metadata_string_size(value: &str) -> usize

Returns the host footprint of one owned string in a metadata vector.

Source

pub fn host_size(&self) -> usize

Shallow host footprint of a freshly decoded obj: the fixed MontyObject size plus any leaf payload it owns directly (string/bytes/bigint bytes, and the Vec<String> field names of structured values, which aren’t themselves MontyObjects and would otherwise be uncharged). Boxed payloads (ClassInstance, Type(Instance)) charge their heap allocation plus the class name; their eager attrs are charged like container elements. Container elements are excluded — each charges its own size via monty-proto’s decode_field, so a list charges size_of::<MontyObject>() here.

Source

pub fn deep_host_size(&self) -> usize

Returns the recursively expanded host footprint used by transport budgets.

Unlike Self::host_size, this includes every value stored in a container.

Source

pub fn py_repr(&self) -> String

Returns the Python repr() string for this value.

§Panics

Could panic if out of memory.

Source

pub fn is_truthy(&self) -> bool

Returns true if this value is “truthy” according to Python’s truth testing rules.

In Python, the following values are considered falsy:

  • None and Ellipsis
  • False
  • Zero numeric values (0, 0.0)
  • Empty sequences and collections ("", b"", [], (), {})

All other values are truthy, including Exception and Repr variants.

Source

pub fn type_name(&self) -> &str

Returns the Python type name for this value (e.g., "int", "str", "list").

These are the same names returned by Python’s type(x).__name__; a class instance reports its class name ("Point").

Trait Implementations§

Source§

impl AsRef<MontyObject> for MontyObject

Source§

fn as_ref(&self) -> &MontyObject

Converts this type into a shared reference of the (usually inferred) input type.
Source§

impl Clone for MontyObject

Source§

fn clone(&self) -> MontyObject

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 MontyObject

Source§

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

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

impl<'de> Deserialize<'de> for MontyObject

Source§

fn deserialize<__D>( __deserializer: __D, ) -> Result<MontyObject, <__D as Deserializer<'de>>::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Display for MontyObject

Source§

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

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

impl Eq for MontyObject

Source§

impl Hash for MontyObject

Source§

fn hash<H>(&self, state: &mut H)
where H: Hasher,

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl PartialEq for MontyObject

Source§

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

Source§

fn serialize<__S>( &self, __serializer: __S, ) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl ToMontyObject for MontyObject

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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

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

Source§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

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

Source§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
Source§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
Source§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
Source§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
Source§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
Source§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
Source§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
Source§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
Source§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
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> 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> Pipe for T
where T: ?Sized,

Source§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
Source§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
Source§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
Source§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
Source§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
Source§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
Source§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Tap for T

Source§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
Source§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
Source§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
Source§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
Source§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
Source§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
Source§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
Source§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
Source§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
Source§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
Source§

impl<T> ToCharString for T
where T: Display,

Source§

fn try_to_char_string(&self) -> Result<CharString, ToCharStringError>

Attempts to convert the value to a CharString. Read more
Source§

fn to_char_string(&self) -> CharString

Converts the value to a CharString. Read more
Source§

impl<T> ToCompactString for T
where T: Display,

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> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T> TryConv for T

Source§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. 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.