diff --git a/rustler/src/serde/de.rs b/rustler/src/serde/de.rs index 309a1999..f99d74b8 100644 --- a/rustler/src/serde/de.rs +++ b/rustler/src/serde/de.rs @@ -1,8 +1,5 @@ use crate::serde::{atoms, error::Error, util}; -use crate::{ - types::{ListIterator, MapIterator}, - Term, TermType, -}; +use crate::{ListIterator, MapIterator, Term, TermType}; use serde::{ de::{ self, Deserialize, DeserializeSeed, EnumAccess, MapAccess, SeqAccess, VariantAccess, diff --git a/rustler/src/serde/ser.rs b/rustler/src/serde/ser.rs index 6071c5a1..92d9dd9b 100644 --- a/rustler/src/serde/ser.rs +++ b/rustler/src/serde/ser.rs @@ -2,7 +2,7 @@ use std::io::Write; use crate::serde::{atoms, error::Error, util}; use crate::wrapper::list::make_list; -use crate::{types::tuple, Encoder, Env, OwnedBinary, Term}; +use crate::{Encoder, Env, OwnedBinary, Term, Tuple}; use serde::ser::{self, Serialize}; #[inline] @@ -336,7 +336,7 @@ impl<'a> SequenceSerializer<'a> { #[inline] fn to_tuple(&self) -> Result, Error> { - Ok(tuple::make_tuple(self.ser.env, &self.items)) + Ok(Tuple::make(self.ser.env, &self.items)) } } diff --git a/rustler/src/serde/util.rs b/rustler/src/serde/util.rs index d479139a..84b6f6d2 100644 --- a/rustler/src/serde/util.rs +++ b/rustler/src/serde/util.rs @@ -1,5 +1,5 @@ use crate::serde::{atoms, Error}; -use crate::{types::tuple, Binary, Decoder, Encoder, Env, Term}; +use crate::{Binary, Decoder, Encoder, Env, Term, Tuple}; /// Converts an `&str` to either an existing atom or an Elixir bitstring. pub fn str_to_term<'a>(env: &Env<'a>, string: &str) -> Result, Error> { @@ -62,7 +62,10 @@ pub fn validate_tuple(term: Term, len: Option) -> Result, Error return Err(Error::ExpectedTuple); } - let tuple = tuple::get_tuple(term).or(Err(Error::ExpectedTuple))?; + let tuple = Tuple::try_from(term) + .or(Err(Error::ExpectedTuple))? + .to_vec(); + match len { None => Ok(tuple), Some(len) => { diff --git a/rustler/src/wrapped_types/tuple.rs b/rustler/src/wrapped_types/tuple.rs index a814c642..758485ba 100644 --- a/rustler/src/wrapped_types/tuple.rs +++ b/rustler/src/wrapped_types/tuple.rs @@ -1,5 +1,5 @@ -use crate::{Decoder, Encoder, Env, Error, NifResult, Term, TermType}; use crate::sys::{enif_get_tuple, enif_make_tuple_from_array, ERL_NIF_TERM}; +use crate::{Decoder, Encoder, Env, Error, NifResult, Term, TermType}; use std::ffi::c_int; use std::mem::MaybeUninit; @@ -27,6 +27,10 @@ pub unsafe fn get_tuple<'a>(term: Term<'a>) -> NifResult<&'a [ERL_NIF_TERM]> { } impl<'a> Tuple<'a> { + pub fn make(env: Env<'a>, terms: &[Term<'a>]) -> Term<'a> { + make_tuple(env, terms) + } + pub fn size(&self) -> usize { self.get_elements().len() }