@@ -121,6 +121,57 @@ impl_arrow_assoc_vec!(u64, ArrowDataType::UInt64);
121121impl_arrow_assoc_vec ! ( f32 , ArrowDataType :: Float32 ) ;
122122impl_arrow_assoc_vec ! ( f64 , ArrowDataType :: Float64 ) ;
123123
124+ impl ArrowAssoc for Vec < bool > {
125+ // type Builder = MutableListArray<i64, MutablePrimitiveArray<i8>>;
126+ type Builder = MutableListArray < i64 , MutableBooleanArray > ;
127+
128+ fn builder ( nrows : usize ) -> Self :: Builder {
129+ MutableListArray :: < i64 , MutableBooleanArray > :: with_capacity ( nrows)
130+ }
131+
132+ #[ inline]
133+ fn push ( builder : & mut Self :: Builder , value : Self ) {
134+ // hmm
135+ let val: Vec < Option < bool > > = value. into_iter ( ) . map ( |v| Some ( v) ) . collect ( ) ;
136+ builder. try_push ( Some ( val) ) . unwrap ( ) ;
137+ }
138+
139+ fn field ( header : & str ) -> Field {
140+ Field :: new (
141+ header,
142+ ArrowDataType :: LargeList ( Box :: new ( Field :: new ( "" , ArrowDataType :: Boolean , false ) ) ) ,
143+ false ,
144+ )
145+ }
146+ }
147+
148+ impl ArrowAssoc for Option < Vec < bool > > {
149+ type Builder = MutableListArray < i64 , MutableBooleanArray > ;
150+
151+ fn builder ( nrows : usize ) -> Self :: Builder {
152+ MutableListArray :: < i64 , MutableBooleanArray > :: with_capacity ( nrows)
153+ }
154+
155+ #[ inline]
156+ fn push ( builder : & mut Self :: Builder , value : Self ) {
157+ match value {
158+ Some ( values) => {
159+ let val: Vec < Option < bool > > = values. into_iter ( ) . map ( |v| Some ( v) ) . collect ( ) ;
160+ builder. try_push ( Some ( val) ) . unwrap ( ) ;
161+ }
162+ None => builder. push_null ( ) ,
163+ }
164+ }
165+
166+ fn field ( header : & str ) -> Field {
167+ Field :: new (
168+ header,
169+ ArrowDataType :: LargeList ( Box :: new ( Field :: new ( "" , ArrowDataType :: Boolean , false ) ) ) ,
170+ true ,
171+ )
172+ }
173+ }
174+
124175impl ArrowAssoc for & str {
125176 type Builder = MutableUtf8Array < i64 > ;
126177
0 commit comments