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
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
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
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
impl MontyObject
Sourcepub fn dict(dict: impl Into<DictPairs>) -> MontyObject
pub fn dict(dict: impl Into<DictPairs>) -> MontyObject
Creates a new MontyObject from something that can be converted into a DictPairs.
Sourcepub fn builtin_function_from_name(name: &str) -> Option<MontyObject>
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.
Sourcepub const fn host_base_size() -> usize
pub const fn host_base_size() -> usize
Returns the fixed host footprint charged for each decoded object.
Sourcepub const fn host_metadata_string_size(value: &str) -> usize
pub const fn host_metadata_string_size(value: &str) -> usize
Returns the host footprint of one owned string in a metadata vector.
Sourcepub fn host_size(&self) -> usize
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.
Sourcepub fn deep_host_size(&self) -> usize
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.
Sourcepub fn is_truthy(&self) -> bool
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:
NoneandEllipsisFalse- Zero numeric values (
0,0.0) - Empty sequences and collections (
"",b"",[],(),{})
All other values are truthy, including Exception and Repr variants.
Trait Implementations§
Source§impl AsRef<MontyObject> for MontyObject
impl AsRef<MontyObject> for MontyObject
Source§fn as_ref(&self) -> &MontyObject
fn as_ref(&self) -> &MontyObject
Source§impl Clone for MontyObject
impl Clone for MontyObject
Source§fn clone(&self) -> MontyObject
fn clone(&self) -> MontyObject
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for MontyObject
impl Debug for MontyObject
Source§impl<'de> Deserialize<'de> for MontyObject
impl<'de> Deserialize<'de> for MontyObject
Source§fn deserialize<__D>(
__deserializer: __D,
) -> Result<MontyObject, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(
__deserializer: __D,
) -> Result<MontyObject, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
Source§impl Display for MontyObject
impl Display for MontyObject
impl Eq for MontyObject
Source§impl Hash for MontyObject
impl Hash for MontyObject
Source§impl PartialEq for MontyObject
impl PartialEq for MontyObject
Source§impl Serialize for MontyObject
impl Serialize for MontyObject
Source§fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
Source§impl ToMontyObject for MontyObject
impl ToMontyObject for MontyObject
fn into_monty_object(self) -> MontyObject
Auto Trait Implementations§
impl Freeze for MontyObject
impl RefUnwindSafe for MontyObject
impl Send for MontyObject
impl Sync for MontyObject
impl Unpin for MontyObject
impl UnsafeUnpin for MontyObject
impl UnwindSafe for MontyObject
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
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 moreSource§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
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
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
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
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.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
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.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
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.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
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.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
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.Source§impl<T> ToCharString for Twhere
T: Display,
impl<T> ToCharString for Twhere
T: Display,
Source§fn try_to_char_string(&self) -> Result<CharString, ToCharStringError>
fn try_to_char_string(&self) -> Result<CharString, ToCharStringError>
CharString. Read moreSource§fn to_char_string(&self) -> CharString
fn to_char_string(&self) -> CharString
CharString. Read moreSource§impl<T> ToCompactString for Twhere
T: Display,
impl<T> ToCompactString for Twhere
T: Display,
Source§fn try_to_compact_string(&self) -> Result<CompactString, ToCompactStringError>
fn try_to_compact_string(&self) -> Result<CompactString, ToCompactStringError>
ToCompactString::to_compact_string() Read moreSource§fn to_compact_string(&self) -> CompactString
fn to_compact_string(&self) -> CompactString
CompactString. Read more