11//! The core Vortex macro to create new encodings and array types.
22
3- use vortex_error:: VortexError ;
4-
5- use crate :: encoding:: {
6- ArrayEncodingExt , ArrayEncodingRef , EncodingId , EncodingRef , EncodingVTable ,
7- } ;
8- use crate :: { ArrayData , ArrayMetadata , ArrayTrait , ToArrayData , TryDeserializeArrayMetadata } ;
9-
10- /// Trait the defines the set of types relating to an array.
11- /// Because it has associated types it can't be used as a trait object.
12- pub trait ArrayDef {
13- const ID : EncodingId ;
14- const ENCODING : EncodingRef ;
15-
16- type Array : ArrayTrait + TryFrom < ArrayData , Error = VortexError > ;
17- type Metadata : ArrayMetadata + Clone + for < ' m > TryDeserializeArrayMetadata < ' m > ;
18- type Encoding : EncodingVTable + ArrayEncodingExt < D = Self > ;
19- }
3+ use crate :: encoding:: { ArrayEncodingRef , EncodingRef } ;
4+ use crate :: { ArrayData , ToArrayData } ;
205
216impl < A : AsRef < ArrayData > > ToArrayData for A {
227 fn to_array ( & self ) -> ArrayData {
@@ -32,22 +17,6 @@ impl<A: AsRef<ArrayData>> ToArrayData for A {
3217macro_rules! impl_encoding {
3318 ( $id: literal, $code: expr, $Name: ident) => {
3419 $crate:: paste:: paste! {
35- /// The array definition trait
36- #[ derive( std:: fmt:: Debug , Clone ) ]
37- pub struct $Name;
38- impl $crate:: ArrayDef for $Name {
39- const ID : $crate:: encoding:: EncodingId = $crate:: encoding:: EncodingId :: new( $id, $code) ;
40- const ENCODING : $crate:: encoding:: EncodingRef = & [ <$Name Encoding >] ;
41- type Array = [ <$Name Array >] ;
42- type Metadata = [ <$Name Metadata >] ;
43- type Encoding = [ <$Name Encoding >] ;
44- }
45-
46- impl $crate:: encoding:: Encoding for [ <$Name Encoding >] {
47- type Array = [ <$Name Array >] ;
48- type Metadata = [ <$Name Metadata >] ;
49- }
50-
5120 #[ derive( std:: fmt:: Debug , Clone ) ]
5221 #[ repr( transparent) ]
5322 pub struct [ <$Name Array >] ( $crate:: ArrayData ) ;
@@ -95,11 +64,11 @@ macro_rules! impl_encoding {
9564 type Error = vortex_error:: VortexError ;
9665
9766 fn try_from( data: $crate:: ArrayData ) -> vortex_error:: VortexResult <Self > {
98- if data. encoding( ) . id( ) != <$Name as $crate:: ArrayDef >:: ID {
67+ if data. encoding( ) . id( ) != <[ < $Name Encoding > ] as $crate:: encoding :: Encoding >:: ID {
9968 vortex_error:: vortex_bail!(
10069 "Mismatched encoding {}, expected {}" ,
10170 data. encoding( ) . id( ) . as_ref( ) ,
102- <$Name as $crate:: ArrayDef >:: ID ,
71+ <[ < $Name Encoding > ] as $crate:: encoding :: Encoding >:: ID ,
10372 ) ;
10473 }
10574 Ok ( Self ( data) )
@@ -112,11 +81,11 @@ macro_rules! impl_encoding {
11281 type Error = vortex_error:: VortexError ;
11382
11483 fn try_from( data: & ' a $crate:: ArrayData ) -> vortex_error:: VortexResult <Self > {
115- if data. encoding( ) . id( ) != <$Name as $crate:: ArrayDef >:: ID {
84+ if data. encoding( ) . id( ) != <[ < $Name Encoding > ] as $crate:: encoding :: Encoding >:: ID {
11685 vortex_error:: vortex_bail!(
11786 "Mismatched encoding {}, expected {}" ,
11887 data. encoding( ) . id( ) . as_ref( ) ,
119- <$Name as $crate:: ArrayDef >:: ID ,
88+ <[ < $Name Encoding > ] as $crate:: encoding :: Encoding >:: ID ,
12089 ) ;
12190 }
12291 Ok ( unsafe { std:: mem:: transmute:: <& $crate:: ArrayData , & [ <$Name Array >] >( data) } )
@@ -126,27 +95,22 @@ macro_rules! impl_encoding {
12695 /// The array encoding
12796 #[ derive( std:: fmt:: Debug ) ]
12897 pub struct [ <$Name Encoding >] ;
98+
99+ impl $crate:: encoding:: Encoding for [ <$Name Encoding >] {
100+ const ID : $crate:: encoding:: EncodingId = $crate:: encoding:: EncodingId :: new( $id, $code) ;
101+ type Array = [ <$Name Array >] ;
102+ type Metadata = [ <$Name Metadata >] ;
103+ }
104+
129105 impl $crate:: encoding:: EncodingVTable for [ <$Name Encoding >] {
130106 #[ inline]
131107 fn id( & self ) -> $crate:: encoding:: EncodingId {
132- <$Name as $crate:: ArrayDef >:: ID
108+ <[ < $Name Encoding > ] as $crate:: encoding :: Encoding >:: ID
133109 }
134110
135111 fn as_any( & self ) -> & dyn std:: any:: Any {
136112 self
137113 }
138-
139- #[ inline]
140- fn with_dyn(
141- & self ,
142- array: & $crate:: ArrayData ,
143- f: & mut dyn for <' b> FnMut ( & ' b ( dyn $crate:: ArrayTrait + ' b) ) -> vortex_error:: VortexResult <( ) >,
144- ) -> vortex_error:: VortexResult <( ) > {
145- <Self as $crate:: encoding:: ArrayEncodingExt >:: with_dyn( array, f)
146- }
147- }
148- impl $crate:: encoding:: ArrayEncodingExt for [ <$Name Encoding >] {
149- type D = $Name;
150114 }
151115
152116 /// Implement ArrayMetadata
0 commit comments