diff --git a/relayer/crates/cairo-encoding-components/src/impls/encode_mut/option.rs b/relayer/crates/cairo-encoding-components/src/impls/encode_mut/option.rs index d5ea0b0f..9c7c4c4b 100644 --- a/relayer/crates/cairo-encoding-components/src/impls/encode_mut/option.rs +++ b/relayer/crates/cairo-encoding-components/src/impls/encode_mut/option.rs @@ -3,9 +3,9 @@ use cgp_core::error::HasErrorType; use crate::impls::encode_mut::variant::SumEncoders; use crate::impls::encode_mut::with_context::EncodeWithContext; use crate::traits::encode_mut::{HasEncodeBufferType, MutEncoder}; -use crate::types::either::{Either, Void}; +use crate::types::either::Either; use crate::types::nat::Z; -use crate::HList; +use crate::{HList, Sum}; pub struct EncodeOption; @@ -14,7 +14,7 @@ pub type OptionEncoder = SumEncoders MutEncoder> for EncodeOption where Encoding: HasEncodeBufferType + HasErrorType, - OptionEncoder: for<'a> MutEncoder>>, + OptionEncoder: for<'a> MutEncoder, { fn encode_mut( encoding: &Encoding, diff --git a/relayer/crates/cairo-encoding-components/src/macros.rs b/relayer/crates/cairo-encoding-components/src/macros.rs index 20f98154..957d78fc 100644 --- a/relayer/crates/cairo-encoding-components/src/macros.rs +++ b/relayer/crates/cairo-encoding-components/src/macros.rs @@ -10,3 +10,22 @@ macro_rules! HList { ( $e, $crate::HList!( $($tail)* ) ) }; } + +#[macro_export] +macro_rules! Sum { + ( $(,)? ) => { + crate::types::either::Void + }; + ( $e:ty ) => { + crate::types::either::Either< + $e, + crate::types::either::Void + > + }; + ( $e:ty, $($tail:tt)* ) => { + crate::types::either::Either< + $e, + $crate::Sum!( $($tail)* ) + > + }; +}