@@ -10,103 +10,14 @@ use futures_util::future::LocalBoxFuture;
10
10
use futures_util:: FutureExt ;
11
11
12
12
use super :: { TimeUnit , Value } ;
13
- use crate :: record:: { decode_arrow_datatype, encode_arrow_datatype, ValueError , ValueRef } ;
13
+ use crate :: record:: { decode_arrow_datatype, encode_arrow_datatype, Key , ValueError , ValueRef } ;
14
14
15
15
#[ cfg( not( target_arch = "wasm32" ) ) ]
16
16
type BoxedFuture < ' a , T > = BoxFuture < ' a , T > ;
17
17
#[ cfg( target_arch = "wasm32" ) ]
18
18
type BoxedFuture < ' a , T > = LocalBoxFuture < ' a , T > ;
19
19
20
20
impl Value {
21
- fn encode_inner < ' a , ' b , W > (
22
- & ' a self ,
23
- writer : & ' b mut W ,
24
- ) -> BoxedFuture < ' a , Result < ( ) , fusio:: Error > >
25
- where
26
- W : Write ,
27
- ' b : ' a ,
28
- {
29
- let fut = async move {
30
- encode_arrow_datatype ( & self . data_type ( ) , writer) . await ?;
31
- match self {
32
- Value :: Null => ( ) ,
33
- Value :: Boolean ( v) => {
34
- v. encode ( writer) . await ?;
35
- }
36
- Value :: Int8 ( v) => {
37
- v. encode ( writer) . await ?;
38
- }
39
- Value :: Int16 ( v) => {
40
- v. encode ( writer) . await ?;
41
- }
42
- Value :: Int32 ( v) => {
43
- v. encode ( writer) . await ?;
44
- }
45
- Value :: Int64 ( v) => {
46
- v. encode ( writer) . await ?;
47
- }
48
- Value :: UInt8 ( v) => {
49
- v. encode ( writer) . await ?;
50
- }
51
- Value :: UInt16 ( v) => {
52
- v. encode ( writer) . await ?;
53
- }
54
- Value :: UInt32 ( v) => {
55
- v. encode ( writer) . await ?;
56
- }
57
- Value :: UInt64 ( v) => {
58
- v. encode ( writer) . await ?;
59
- }
60
- Value :: Float32 ( v) => {
61
- v. encode ( writer) . await ?;
62
- }
63
- Value :: Float64 ( v) => {
64
- v. encode ( writer) . await ?;
65
- }
66
- Value :: String ( v) => {
67
- v. encode ( writer) . await ?;
68
- }
69
- Value :: Binary ( items) => {
70
- items. encode ( writer) . await ?;
71
- }
72
- Value :: Date32 ( v) => {
73
- v. encode ( writer) . await ?;
74
- }
75
- Value :: Date64 ( v) => {
76
- v. encode ( writer) . await ?;
77
- }
78
- Value :: Timestamp ( v, _) => {
79
- v. encode ( writer) . await ?;
80
- }
81
- Value :: Time32 ( v, _) => {
82
- v. encode ( writer) . await ?;
83
- }
84
- Value :: Time64 ( v, _) => {
85
- v. encode ( writer) . await ?;
86
- }
87
- Value :: FixedSizeBinary ( v, _) => {
88
- v. encode ( writer) . await ?;
89
- }
90
- Value :: List ( _, vec) => {
91
- let len = vec. len ( ) as u32 ;
92
- len. encode ( writer) . await ?;
93
- for v in vec. iter ( ) {
94
- v. encode_inner ( writer) . await ?;
95
- }
96
- }
97
- }
98
- Ok ( ( ) )
99
- } ;
100
- #[ cfg( not( target_arch = "wasm32" ) ) ]
101
- {
102
- fut. boxed ( )
103
- }
104
- #[ cfg( target_arch = "wasm32" ) ]
105
- {
106
- fut. boxed_local ( )
107
- }
108
- }
109
-
110
21
fn decode_inner < R > ( reader : & mut R ) -> BoxedFuture < ' _ , Result < Self , fusio:: Error > >
111
22
where
112
23
R : fusio:: SeqRead ,
@@ -187,41 +98,11 @@ impl Encode for Value {
187
98
where
188
99
W : Write ,
189
100
{
190
- self . encode_inner ( writer) . await
101
+ self . as_key_ref ( ) . encode ( writer) . await
191
102
}
192
103
193
104
fn size ( & self ) -> usize {
194
- match self {
195
- Value :: Null => 1 ,
196
- Value :: Boolean ( v) => 1 + v. size ( ) ,
197
- Value :: Int8 ( v) => 1 + v. size ( ) ,
198
- Value :: Int16 ( v) => 1 + v. size ( ) ,
199
- Value :: Int32 ( v) => 1 + v. size ( ) ,
200
- Value :: Int64 ( v) => 1 + v. size ( ) ,
201
- Value :: UInt8 ( v) => 1 + v. size ( ) ,
202
- Value :: UInt16 ( v) => 1 + v. size ( ) ,
203
- Value :: UInt32 ( v) => 1 + v. size ( ) ,
204
- Value :: UInt64 ( v) => 1 + v. size ( ) ,
205
- Value :: Float32 ( v) => 1 + v. size ( ) ,
206
- Value :: Float64 ( v) => 1 + v. size ( ) ,
207
- Value :: String ( v) => 1 + v. size ( ) ,
208
- Value :: Binary ( v) => 1 + v. size ( ) ,
209
- Value :: FixedSizeBinary ( v, _) => 1 + v. size ( ) ,
210
- Value :: Date32 ( v) => 1 + v. size ( ) ,
211
- Value :: Date64 ( v) => 1 + v. size ( ) ,
212
- Value :: Timestamp ( v, time_unit) => 1 + v. size ( ) + time_unit. size ( ) ,
213
- Value :: Time32 ( v, time_unit) => 1 + v. size ( ) + time_unit. size ( ) ,
214
- Value :: Time64 ( v, time_unit) => 1 + v. size ( ) + time_unit. size ( ) ,
215
- Value :: List ( data_type, vec) => {
216
- vec. iter ( ) . map ( |v| v. size ( ) ) . sum :: < usize > ( )
217
- + match data_type {
218
- DataType :: Timestamp ( _, _) => 2 ,
219
- DataType :: Time32 ( _) | DataType :: Time64 ( _) => 2 ,
220
- DataType :: List ( field) => 1 + field. size ( ) ,
221
- _ => 1 ,
222
- }
223
- }
224
- }
105
+ self . as_key_ref ( ) . size ( )
225
106
}
226
107
}
227
108
@@ -342,7 +223,7 @@ impl ValueRef<'_> {
342
223
let len = vec. len ( ) as u32 ;
343
224
len. encode ( writer) . await ?;
344
225
for v in vec. iter ( ) {
345
- v. encode_inner ( writer) . await ?;
226
+ v. as_key_ref ( ) . encode_inner ( writer) . await ?;
346
227
}
347
228
}
348
229
}
0 commit comments