pub struct Term<'a> { /* private fields */ }
Expand description
Term is used to represent all erlang terms. Terms are always lifetime limited by a Env.
Term is cloneable and copyable, but it can not exist outside of the lifetime of the Env that owns it.
Implementations§
source§impl<'a> Term<'a>
impl<'a> Term<'a>
§Atom terms
sourcepub fn atom_to_string(&self) -> NifResult<String>
pub fn atom_to_string(&self) -> NifResult<String>
When the term is an atom, this method will return the string representation of it.
If you only need to test for equality, comparing the terms directly is much faster.
Will return None if the term is not an atom.
source§impl<'a> Term<'a>
impl<'a> Term<'a>
§List terms
sourcepub fn list_new_empty(env: Env<'a>) -> Term<'a>
pub fn list_new_empty(env: Env<'a>) -> Term<'a>
Returns a new empty list.
sourcepub fn into_list_iterator(self) -> NifResult<ListIterator<'a>>
pub fn into_list_iterator(self) -> NifResult<ListIterator<'a>>
Returns an iterator over a list term. See documentation for ListIterator for more information.
Returns None if the term is not a list.
sourcepub fn list_length(self) -> NifResult<usize>
pub fn list_length(self) -> NifResult<usize>
Returns the length of a list term.
Returns None if the term is not a list.
§Elixir equivalent
length(self_term)
sourcepub fn list_get_cell(self) -> NifResult<(Term<'a>, Term<'a>)>
pub fn list_get_cell(self) -> NifResult<(Term<'a>, Term<'a>)>
Unpacks a single cell at the head of a list term, and returns the result as a tuple of (head, tail).
Returns None if the term is not a list.
§Elixir equivalent
[head, tail] = self_term
{head, tail}
sourcepub fn list_reverse(self) -> NifResult<Term<'a>>
pub fn list_reverse(self) -> NifResult<Term<'a>>
Makes a copy of the self list term and reverses it.
Returns Err(Error::BadArg) if the term is not a list.
sourcepub fn list_prepend(self, head: impl Encoder) -> Term<'a>
pub fn list_prepend(self, head: impl Encoder) -> Term<'a>
Adds head
in a list cell with self
as tail.
source§impl<'a> Term<'a>
impl<'a> Term<'a>
§Map terms
sourcepub fn map_from_arrays(
env: Env<'a>,
keys: &[impl Encoder],
values: &[impl Encoder]
) -> NifResult<Term<'a>>
pub fn map_from_arrays( env: Env<'a>, keys: &[impl Encoder], values: &[impl Encoder] ) -> NifResult<Term<'a>>
Construct a new map from two vectors
§Elixir equivalent
keys = ["foo", "bar"]
values = [1, 2]
Enum.zip(keys, values) |> Map.new()
sourcepub fn map_from_term_arrays(
env: Env<'a>,
keys: &[Term<'a>],
values: &[Term<'a>]
) -> NifResult<Term<'a>>
pub fn map_from_term_arrays( env: Env<'a>, keys: &[Term<'a>], values: &[Term<'a>] ) -> NifResult<Term<'a>>
Construct a new map from two vectors of terms.
It is identical to map_from_arrays, but requires the keys and values to be encoded already - this is useful for constructing maps whose values or keys are different Rust types, with the same performance as map_from_arrays.
sourcepub fn map_from_pairs(
env: Env<'a>,
pairs: &[(impl Encoder, impl Encoder)]
) -> NifResult<Term<'a>>
pub fn map_from_pairs( env: Env<'a>, pairs: &[(impl Encoder, impl Encoder)] ) -> NifResult<Term<'a>>
Construct a new map from pairs of terms
It is similar to map_from_arrays
but
receives only one vector with the pairs
of (key, value)
.
§Elixir equivalent
Map.new([{"foo", 1}, {"bar", 2}])
sourcepub fn map_get(self, key: impl Encoder) -> NifResult<Term<'a>>
pub fn map_get(self, key: impl Encoder) -> NifResult<Term<'a>>
Gets the value corresponding to a key in a map term.
Returns Err(Error::BadArg) if the term is not a map or if key doesn’t exist in the map.
§Elixir equivalent
Map.get(self_term, key)
sourcepub fn map_size(self) -> NifResult<usize>
pub fn map_size(self) -> NifResult<usize>
Gets the size of a map term.
Returns Err(Error::BadArg) if the term is not a map.
§Elixir equivalent
map_size(self_term)
sourcepub fn map_put(
self,
key: impl Encoder,
value: impl Encoder
) -> NifResult<Term<'a>>
pub fn map_put( self, key: impl Encoder, value: impl Encoder ) -> NifResult<Term<'a>>
Makes a copy of the self map term and sets key to value. If the value already exists, it is overwritten.
Returns Err(Error::BadArg) if the term is not a map.
§Elixir equivalent
Map.put(self_term, key, value)
source§impl<'a> Term<'a>
impl<'a> Term<'a>
sourcepub unsafe fn new(env: Env<'a>, inner: NIF_TERM) -> Self
pub unsafe fn new(env: Env<'a>, inner: NIF_TERM) -> Self
Create a Term
from a raw NIF_TERM
.
§Unsafe
The caller must ensure that env
is the environment that inner
belongs to,
unless inner
is an atom term.
sourcepub fn as_c_arg(&self) -> NIF_TERM
pub fn as_c_arg(&self) -> NIF_TERM
This extracts the raw term pointer. It is usually used in order to obtain a type that can be passed to calls into the erlang vm.
pub fn get_env(self) -> Env<'a>
sourcepub fn in_env<'b>(&self, env: Env<'b>) -> Term<'b>
pub fn in_env<'b>(&self, env: Env<'b>) -> Term<'b>
Returns a representation of self in the given Env.
If the term is already is in the provided env, it will be directly returned. Otherwise the term will be copied over.
sourcepub fn decode_as_binary(self) -> NifResult<Binary<'a>>
pub fn decode_as_binary(self) -> NifResult<Binary<'a>>
Decodes the Term into Binary
This could be used as a replacement for decode
when decoding Binary from an iolist
is needed.
pub fn to_binary(self) -> OwnedBinary
sourcepub fn hash_internal(&self, salt: u32) -> u32
pub fn hash_internal(&self, salt: u32) -> u32
Non-portable hash function that only guarantees the same hash for the same term within one Erlang VM instance.
It takes 32-bit salt values and generates hashes within 0..2^32-1.
sourcepub fn hash_phash2(&self) -> u32
pub fn hash_phash2(&self) -> u32
Portable hash function that gives the same hash for the same Erlang term regardless of machine architecture and ERTS version.
It generates hashes within 0..2^27-1.
pub fn get_erl_type(&self) -> ErlNifTermType
source§impl<'a> Term<'a>
impl<'a> Term<'a>
§Type checks
sourcepub fn get_type(self) -> TermType
pub fn get_type(self) -> TermType
Returns an enum representing which type the term is.
Note that using the individual is_*
functions is more
efficient for checking a single type.
pub fn is_atom(self) -> bool
pub fn is_binary(self) -> bool
pub fn is_empty_list(self) -> bool
pub fn is_fun(self) -> bool
pub fn is_list(self) -> bool
pub fn is_map(self) -> bool
pub fn is_number(self) -> bool
pub fn is_pid(self) -> bool
pub fn is_port(self) -> bool
pub fn is_ref(self) -> bool
pub fn is_tuple(self) -> bool
pub fn is_float(self) -> bool
pub fn is_integer(self) -> bool
Trait Implementations§
source§impl<'a> Ord for Term<'a>
impl<'a> Ord for Term<'a>
source§impl<'a> PartialEq<Term<'a>> for Atom
impl<'a> PartialEq<Term<'a>> for Atom
source§impl<'a> PartialEq for Term<'a>
impl<'a> PartialEq for Term<'a>
source§impl<'a> PartialOrd for Term<'a>
impl<'a> PartialOrd for Term<'a>
1.0.0 · source§fn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self
and other
) and is used by the <=
operator. Read more