pub struct Dynamic(_);Expand description
Dynamic type containing any value.
Implementations
sourceimpl Dynamic
impl Dynamic
sourcepub fn as_string(self) -> Result<String, &'static str>
👎Deprecated since 1.1.0: use into_string instead
pub fn as_string(self) -> Result<String, &'static str>
use into_string instead
Convert the Dynamic into a String and return it.
If there are other references to the same string, a cloned copy is returned.
Returns the name of the actual type if the cast fails.
Deprecated
This method is deprecated. Use into_string instead.
This method will be removed in the next major version.
sourcepub fn as_immutable_string(self) -> Result<ImmutableString, &'static str>
👎Deprecated since 1.1.0: use into_immutable_string instead
pub fn as_immutable_string(self) -> Result<ImmutableString, &'static str>
use into_immutable_string instead
Convert the Dynamic into an ImmutableString and return it.
Returns the name of the actual type if the cast fails.
Deprecated
This method is deprecated. Use into_immutable_string instead.
This method will be removed in the next major version.
sourceimpl Dynamic
impl Dynamic
sourcepub const fn is_variant(&self) -> bool
pub const fn is_variant(&self) -> bool
Does this Dynamic hold a variant data type instead of one of the supported system
primitive types?
Is the value held by this Dynamic shared?
Not available under no_closure.
sourceimpl Dynamic
impl Dynamic
sourcepub const NEGATIVE_ONE: Self = _
pub const NEGATIVE_ONE: Self = _
A Dynamic containing the integer -1.
sourcepub const NEGATIVE_TWO: Self = _
pub const NEGATIVE_TWO: Self = _
A Dynamic containing the integer -2.
sourcepub const FLOAT_ZERO: Self = _
pub const FLOAT_ZERO: Self = _
A Dynamic containing 0.0.
Not available under no_float.
sourcepub const FLOAT_HUNDRED: Self = _
pub const FLOAT_HUNDRED: Self = _
A Dynamic containing 100.0.
Not available under no_float.
sourcepub const FLOAT_THOUSAND: Self = _
pub const FLOAT_THOUSAND: Self = _
A Dynamic containing 1000.0.
Not available under no_float.
sourcepub const FLOAT_MILLION: Self = _
pub const FLOAT_MILLION: Self = _
A Dynamic containing 1000000.0.
Not available under no_float.
sourcepub const FLOAT_NEGATIVE_ONE: Self = _
pub const FLOAT_NEGATIVE_ONE: Self = _
A Dynamic containing -1.0.
Not available under no_float.
sourcepub const FLOAT_NEGATIVE_TWO: Self = _
pub const FLOAT_NEGATIVE_TWO: Self = _
A Dynamic containing -2.0.
Not available under no_float.
sourcepub const FLOAT_HALF: Self = _
pub const FLOAT_HALF: Self = _
A Dynamic containing 0.5.
Not available under no_float.
sourcepub const FLOAT_QUARTER: Self = _
pub const FLOAT_QUARTER: Self = _
A Dynamic containing 0.25.
Not available under no_float.
sourcepub const FLOAT_FIFTH: Self = _
pub const FLOAT_FIFTH: Self = _
A Dynamic containing 0.2.
Not available under no_float.
sourcepub const FLOAT_TENTH: Self = _
pub const FLOAT_TENTH: Self = _
A Dynamic containing 0.1.
Not available under no_float.
sourcepub const FLOAT_HUNDREDTH: Self = _
pub const FLOAT_HUNDREDTH: Self = _
A Dynamic containing 0.01.
Not available under no_float.
sourcepub const FLOAT_THOUSANDTH: Self = _
pub const FLOAT_THOUSANDTH: Self = _
A Dynamic containing 0.001.
Not available under no_float.
sourcepub const FLOAT_MILLIONTH: Self = _
pub const FLOAT_MILLIONTH: Self = _
A Dynamic containing 0.000001.
Not available under no_float.
sourcepub const FLOAT_HALF_PI: Self = _
pub const FLOAT_HALF_PI: Self = _
A Dynamic containing π/2.
Not available under no_float.
sourcepub const FLOAT_QUARTER_PI: Self = _
pub const FLOAT_QUARTER_PI: Self = _
A Dynamic containing π/4.
Not available under no_float.
sourcepub const FLOAT_TWO_PI: Self = _
pub const FLOAT_TWO_PI: Self = _
A Dynamic containing 2π.
Not available under no_float.
sourcepub const FLOAT_INVERSE_PI: Self = _
pub const FLOAT_INVERSE_PI: Self = _
A Dynamic containing 1/π.
Not available under no_float.
sourcepub const FLOAT_LOG_E: Self = _
pub const FLOAT_LOG_E: Self = _
A Dynamic containing log e.
Not available under no_float.
sourcepub const FLOAT_LN_10: Self = _
pub const FLOAT_LN_10: Self = _
A Dynamic containing ln 10.
Not available under no_float.
sourcepub const fn from_float(value: FLOAT) -> Self
pub const fn from_float(value: FLOAT) -> Self
sourcepub fn from_decimal(value: Decimal) -> Self
pub fn from_decimal(value: Decimal) -> Self
sourcepub fn from_array(array: Array) -> Self
pub fn from_array(array: Array) -> Self
sourcepub fn from_timestamp(value: Instant) -> Self
pub fn from_timestamp(value: Instant) -> Self
sourcepub fn into_read_only(self) -> Self
pub fn into_read_only(self) -> Self
Make this Dynamic read-only (i.e. a constant).
sourcepub fn is_read_only(&self) -> bool
pub fn is_read_only(&self) -> bool
Is this Dynamic read-only?
Constant Dynamic values are read-only.
Usage
If a &mut Dynamic to such a constant is passed to a Rust function, the function
can use this information to return the error
ErrorAssignmentToConstant if its value
will be modified.
This safe-guards constant values from being modified within Rust functions.
Shared Values
If a Dynamic holds a shared value, then it is read-only only if the shared value
itself is read-only.
sourcepub fn from<T: Variant + Clone>(value: T) -> Self
pub fn from<T: Variant + Clone>(value: T) -> Self
Create a Dynamic from any type. A Dynamic value is simply returned as is.
Notes
Beware that you need to pass in an Array type for it to be recognized as
an Array. A Vec<T> does not get automatically converted to an
Array, but will be a custom type instead (stored as a trait object). Use
Dynamic::from_array to convert a Vec<T> into a Dynamic as an
Array value.
Similarly, passing in a HashMap<String, T> or
BTreeMap<String, T> will not get a Map but a
custom type. Again, use Dynamic::from_map to get a Dynamic with a Map
value.
Examples
use rhai::Dynamic;
let result = Dynamic::from(42_i64);
assert_eq!(result.type_name(), "i64");
assert_eq!(result.to_string(), "42");
let result = Dynamic::from("hello");
assert_eq!(result.type_name(), "string");
assert_eq!(result.to_string(), "hello");
let new_result = Dynamic::from(result);
assert_eq!(new_result.type_name(), "string");
assert_eq!(new_result.to_string(), "hello");Turn the Dynamic value into a shared Dynamic value backed by an
Rc<RefCell<Dynamic>> or Arc<RwLock<Dynamic>>
depending on the sync feature.
Not available under no_closure.
Shared Dynamic values are relatively cheap to clone as they simply increment the
reference counts.
Shared Dynamic values can be converted seamlessly to and from ordinary Dynamic
values.
If the Dynamic value is already shared, this method returns itself.
sourcepub fn try_cast<T: Any>(self) -> Option<T>
pub fn try_cast<T: Any>(self) -> Option<T>
Convert the Dynamic value into specific type.
Casting to a Dynamic just returns as is, but if it contains a shared value,
it is cloned into a Dynamic with a normal value.
Returns None if types mismatched.
Panics or Deadlocks
Under the sync feature, this call may deadlock, or panic.
Otherwise, this call panics if the data is currently borrowed for write.
These normally shouldn’t occur since most operations in Rhai is single-threaded.
Example
use rhai::Dynamic;
let x = Dynamic::from(42_u32);
assert_eq!(x.try_cast::<u32>().expect("x should be u32"), 42);sourcepub fn cast<T: Any + Clone>(self) -> T
pub fn cast<T: Any + Clone>(self) -> T
Convert the Dynamic value into a specific type.
Casting to a Dynamic just returns as is, but if it contains a shared value,
it is cloned into a Dynamic with a normal value.
Panics or Deadlocks
Panics if the cast fails (e.g. the type of the actual value is not the same as the specified type).
Under the sync feature, this call may deadlock, or panic.
Otherwise, this call panics if the data is currently borrowed for write.
These normally shouldn’t occur since most operations in Rhai is single-threaded.
Example
use rhai::Dynamic;
let x = Dynamic::from(42_u32);
assert_eq!(x.cast::<u32>(), 42);sourcepub fn clone_cast<T: Any + Clone>(&self) -> T
pub fn clone_cast<T: Any + Clone>(&self) -> T
Clone the Dynamic value and convert it into a specific type.
Casting to a Dynamic just returns as is, but if it contains a shared value,
it is cloned into a Dynamic with a normal value.
Returns None if types mismatched.
Panics or Deadlocks
Panics if the cast fails (e.g. the type of the actual value is not the same as the specified type).
Under the sync feature, this call may deadlock, or panic.
Otherwise, this call panics if the data is currently borrowed for write.
These normally shouldn’t occur since most operations in Rhai is single-threaded.
Example
use rhai::Dynamic;
let x = Dynamic::from(42_u32);
let y = &x;
assert_eq!(y.clone_cast::<u32>(), 42);sourcepub fn flatten_clone(&self) -> Self
pub fn flatten_clone(&self) -> Self
sourcepub fn read_lock<T: Any + Clone>(&self) -> Option<DynamicReadLock<'_, T>>
pub fn read_lock<T: Any + Clone>(&self) -> Option<DynamicReadLock<'_, T>>
Get a reference of a specific type to the Dynamic.
Casting to Dynamic just returns a reference to it.
Returns None if the cast fails.
Panics or Deadlocks When Value is Shared
Under the sync feature, this call may deadlock, or panic.
Otherwise, this call panics if the data is currently borrowed for write.
sourcepub fn write_lock<T: Any + Clone>(&mut self) -> Option<DynamicWriteLock<'_, T>>
pub fn write_lock<T: Any + Clone>(&mut self) -> Option<DynamicWriteLock<'_, T>>
Get a mutable reference of a specific type to the Dynamic.
Casting to Dynamic just returns a mutable reference to it.
Returns None if the cast fails.
Panics or Deadlocks When Value is Shared
Under the sync feature, this call may deadlock, or panic.
Otherwise, this call panics if the data is currently borrowed for write.
sourcepub fn as_unit(&self) -> Result<(), &'static str>
pub fn as_unit(&self) -> Result<(), &'static str>
Cast the Dynamic as a unit ().
Returns the name of the actual type if the cast fails.
sourcepub fn as_decimal(&self) -> Result<Decimal, &'static str>
pub fn as_decimal(&self) -> Result<Decimal, &'static str>
sourcepub fn into_string(self) -> Result<String, &'static str>
pub fn into_string(self) -> Result<String, &'static str>
sourcepub fn into_immutable_string(self) -> Result<ImmutableString, &'static str>
pub fn into_immutable_string(self) -> Result<ImmutableString, &'static str>
Convert the Dynamic into an ImmutableString.
Returns the name of the actual type if the cast fails.