@@ -16,141 +16,156 @@ limitations under the License.
16
16
17
17
use alloc:: vec:: Vec ;
18
18
19
- use flatbuffers:: { FlatBufferBuilder , UnionWIPOffset , WIPOffset } ;
19
+ use flatbuffers:: FlatBufferBuilder ;
20
20
21
21
use crate :: flatbuffers:: hyperlight:: generated:: {
22
- hldouble as Fbhldouble , hldoubleArgs as FbhldoubleArgs , hlfloat as Fbhlfloat ,
23
- hlfloatArgs as FbhlfloatArgs , hlint as Fbhlint , hlintArgs as FbhlintArgs , hllong as Fbhllong ,
24
- hllongArgs as FbhllongArgs , hlsizeprefixedbuffer as Fbhlsizeprefixedbuffer ,
22
+ hlbool as Fbhlbool , hlboolArgs as FbhlboolArgs , hldouble as Fbhldouble ,
23
+ hldoubleArgs as FbhldoubleArgs , hlfloat as Fbhlfloat , hlfloatArgs as FbhlfloatArgs ,
24
+ hlint as Fbhlint , hlintArgs as FbhlintArgs , hllong as Fbhllong , hllongArgs as FbhllongArgs ,
25
+ hlsizeprefixedbuffer as Fbhlsizeprefixedbuffer ,
25
26
hlsizeprefixedbufferArgs as FbhlsizeprefixedbufferArgs , hlstring as Fbhlstring ,
26
27
hlstringArgs as FbhlstringArgs , hluint as Fbhluint , hluintArgs as FbhluintArgs ,
27
28
hlulong as Fbhlulong , hlulongArgs as FbhlulongArgs , hlvoid as Fbhlvoid ,
28
29
hlvoidArgs as FbhlvoidArgs , FunctionCallResult as FbFunctionCallResult ,
29
30
FunctionCallResultArgs as FbFunctionCallResultArgs , ReturnValue as FbReturnValue ,
30
31
} ;
31
32
32
- pub fn get_flatbuffer_result_from_double ( value : f64 ) -> Vec < u8 > {
33
+ /// Flatbuffer-encodes the given value
34
+ pub fn get_flatbuffer_result < T : FlatbufferSerializable > ( val : T ) -> Vec < u8 > {
33
35
let mut builder = FlatBufferBuilder :: new ( ) ;
34
- let hldouble = Fbhldouble :: create ( & mut builder, & FbhldoubleArgs { value } ) ;
36
+ let res = & T :: serialize ( & val, & mut builder) ;
37
+ let result_offset = FbFunctionCallResult :: create ( & mut builder, res) ;
35
38
36
- let rt = FbReturnValue :: hldouble;
37
- let rv: Option < WIPOffset < UnionWIPOffset > > = Some ( hldouble. as_union_value ( ) ) ;
39
+ builder. finish_size_prefixed ( result_offset, None ) ;
38
40
39
- get_flatbuffer_result ( & mut builder, rt , rv )
41
+ builder. finished_data ( ) . to_vec ( )
40
42
}
41
43
42
- pub fn get_flatbuffer_result_from_float ( value : f32 ) -> Vec < u8 > {
43
- let mut builder = FlatBufferBuilder :: new ( ) ;
44
- let hlfloat = Fbhlfloat :: create ( & mut builder, & FbhlfloatArgs { value } ) ;
45
-
46
- let rt = FbReturnValue :: hlfloat;
47
- let rv: Option < WIPOffset < UnionWIPOffset > > = Some ( hlfloat. as_union_value ( ) ) ;
48
-
49
- get_flatbuffer_result ( & mut builder, rt, rv)
44
+ pub trait FlatbufferSerializable {
45
+ fn serialize ( & self , builder : & mut FlatBufferBuilder ) -> FbFunctionCallResultArgs ;
50
46
}
51
47
52
- pub fn get_flatbuffer_result_from_int ( value : i32 ) -> Vec < u8 > {
53
- let mut builder = FlatBufferBuilder :: new ( ) ;
54
- let hlint = Fbhlint :: create ( & mut builder, & FbhlintArgs { value } ) ;
55
-
56
- let rt = FbReturnValue :: hlint;
57
- let rv: Option < WIPOffset < UnionWIPOffset > > = Some ( hlint. as_union_value ( ) ) ;
48
+ /// Implementations for basic types below
58
49
59
- get_flatbuffer_result ( & mut builder, rt, rv)
50
+ impl FlatbufferSerializable for ( ) {
51
+ fn serialize ( & self , builder : & mut FlatBufferBuilder ) -> FbFunctionCallResultArgs {
52
+ FbFunctionCallResultArgs {
53
+ return_value : Some ( Fbhlvoid :: create ( builder, & FbhlvoidArgs { } ) . as_union_value ( ) ) ,
54
+ return_value_type : FbReturnValue :: hlvoid,
55
+ }
56
+ }
60
57
}
61
58
62
- pub fn get_flatbuffer_result_from_uint ( value : u32 ) -> Vec < u8 > {
63
- let mut builder = FlatBufferBuilder :: new ( ) ;
64
- let hluint = Fbhluint :: create ( & mut builder, & FbhluintArgs { value } ) ;
65
-
66
- let rt = FbReturnValue :: hluint;
67
- let rv: Option < WIPOffset < UnionWIPOffset > > = Some ( hluint. as_union_value ( ) ) ;
68
-
69
- get_flatbuffer_result ( & mut builder, rt, rv)
59
+ impl FlatbufferSerializable for & str {
60
+ fn serialize ( & self , builder : & mut FlatBufferBuilder ) -> FbFunctionCallResultArgs {
61
+ let string_offset = builder. create_string ( self ) ;
62
+ FbFunctionCallResultArgs {
63
+ return_value : Some (
64
+ Fbhlstring :: create (
65
+ builder,
66
+ & FbhlstringArgs {
67
+ value : Some ( string_offset) ,
68
+ } ,
69
+ )
70
+ . as_union_value ( ) ,
71
+ ) ,
72
+ return_value_type : FbReturnValue :: hlstring,
73
+ }
74
+ }
70
75
}
71
76
72
- pub fn get_flatbuffer_result_from_long ( value : i64 ) -> Vec < u8 > {
73
- let mut builder = FlatBufferBuilder :: new ( ) ;
74
- let hllong = Fbhllong :: create ( & mut builder, & FbhllongArgs { value } ) ;
75
-
76
- let rt = FbReturnValue :: hllong;
77
- let rv: Option < WIPOffset < UnionWIPOffset > > = Some ( hllong. as_union_value ( ) ) ;
78
-
79
- get_flatbuffer_result ( & mut builder, rt, rv)
77
+ impl FlatbufferSerializable for & [ u8 ] {
78
+ fn serialize ( & self , builder : & mut FlatBufferBuilder ) -> FbFunctionCallResultArgs {
79
+ let vec_offset = builder. create_vector ( self ) ;
80
+ FbFunctionCallResultArgs {
81
+ return_value : Some (
82
+ Fbhlsizeprefixedbuffer :: create (
83
+ builder,
84
+ & FbhlsizeprefixedbufferArgs {
85
+ size_ : self . len ( ) as i32 ,
86
+ value : Some ( vec_offset) ,
87
+ } ,
88
+ )
89
+ . as_union_value ( ) ,
90
+ ) ,
91
+ return_value_type : FbReturnValue :: hlsizeprefixedbuffer,
92
+ }
93
+ }
80
94
}
81
95
82
- pub fn get_flatbuffer_result_from_ulong ( value : u64 ) -> Vec < u8 > {
83
- let mut builder = FlatBufferBuilder :: new ( ) ;
84
- let hlulong = Fbhlulong :: create ( & mut builder, & FbhlulongArgs { value } ) ;
85
-
86
- let rt = FbReturnValue :: hlulong;
87
- let rv: Option < WIPOffset < UnionWIPOffset > > = Some ( hlulong. as_union_value ( ) ) ;
88
-
89
- get_flatbuffer_result ( & mut builder, rt, rv)
96
+ impl FlatbufferSerializable for f32 {
97
+ fn serialize ( & self , builder : & mut FlatBufferBuilder ) -> FbFunctionCallResultArgs {
98
+ FbFunctionCallResultArgs {
99
+ return_value : Some (
100
+ Fbhlfloat :: create ( builder, & FbhlfloatArgs { value : * self } ) . as_union_value ( ) ,
101
+ ) ,
102
+ return_value_type : FbReturnValue :: hlfloat,
103
+ }
104
+ }
90
105
}
91
106
92
- pub fn get_flatbuffer_result_from_void ( ) -> Vec < u8 > {
93
- let mut builder = FlatBufferBuilder :: new ( ) ;
94
- let hlvoid = Fbhlvoid :: create ( & mut builder, & FbhlvoidArgs { } ) ;
95
-
96
- let rt = FbReturnValue :: hlvoid;
97
- let rv: Option < WIPOffset < UnionWIPOffset > > = Some ( hlvoid. as_union_value ( ) ) ;
98
-
99
- get_flatbuffer_result ( & mut builder, rt, rv)
107
+ impl FlatbufferSerializable for f64 {
108
+ fn serialize ( & self , builder : & mut FlatBufferBuilder ) -> FbFunctionCallResultArgs {
109
+ FbFunctionCallResultArgs {
110
+ return_value : Some (
111
+ Fbhldouble :: create ( builder, & FbhldoubleArgs { value : * self } ) . as_union_value ( ) ,
112
+ ) ,
113
+ return_value_type : FbReturnValue :: hldouble,
114
+ }
115
+ }
100
116
}
101
117
102
- pub fn get_flatbuffer_result_from_string ( value : & str ) -> Vec < u8 > {
103
- let mut builder = FlatBufferBuilder :: new ( ) ;
104
-
105
- let string_offset = builder. create_string ( value) ;
106
- let hlstring = Fbhlstring :: create (
107
- & mut builder,
108
- & FbhlstringArgs {
109
- value : Some ( string_offset) ,
110
- } ,
111
- ) ;
112
-
113
- let rt = FbReturnValue :: hlstring;
114
- let rv: Option < WIPOffset < UnionWIPOffset > > = Some ( hlstring. as_union_value ( ) ) ;
115
-
116
- get_flatbuffer_result ( & mut builder, rt, rv)
118
+ impl FlatbufferSerializable for i32 {
119
+ fn serialize ( & self , builder : & mut FlatBufferBuilder ) -> FbFunctionCallResultArgs {
120
+ FbFunctionCallResultArgs {
121
+ return_value : Some (
122
+ Fbhlint :: create ( builder, & FbhlintArgs { value : * self } ) . as_union_value ( ) ,
123
+ ) ,
124
+ return_value_type : FbReturnValue :: hlint,
125
+ }
126
+ }
117
127
}
118
128
119
- pub fn get_flatbuffer_result_from_vec ( data : & [ u8 ] ) -> Vec < u8 > {
120
- let mut builder = FlatBufferBuilder :: new ( ) ;
121
-
122
- let vec_offset = builder. create_vector ( data) ;
123
-
124
- let hlsizeprefixedbuffer = Fbhlsizeprefixedbuffer :: create (
125
- & mut builder,
126
- & FbhlsizeprefixedbufferArgs {
127
- size_ : data. len ( ) as i32 ,
128
- value : Some ( vec_offset) ,
129
- } ,
130
- ) ;
131
-
132
- // Indicate that the return value is a size-prefixed buffer.
133
- let rt = FbReturnValue :: hlsizeprefixedbuffer;
134
- let rv: Option < WIPOffset < UnionWIPOffset > > = Some ( hlsizeprefixedbuffer. as_union_value ( ) ) ;
135
-
136
- // Get the FlatBuffer result.
137
- get_flatbuffer_result ( & mut builder, rt, rv)
129
+ impl FlatbufferSerializable for i64 {
130
+ fn serialize ( & self , builder : & mut FlatBufferBuilder ) -> FbFunctionCallResultArgs {
131
+ FbFunctionCallResultArgs {
132
+ return_value : Some (
133
+ Fbhllong :: create ( builder, & FbhllongArgs { value : * self } ) . as_union_value ( ) ,
134
+ ) ,
135
+ return_value_type : FbReturnValue :: hllong,
136
+ }
137
+ }
138
138
}
139
139
140
- fn get_flatbuffer_result (
141
- builder : & mut FlatBufferBuilder ,
142
- return_value_type : FbReturnValue ,
143
- return_value : Option < WIPOffset < UnionWIPOffset > > ,
144
- ) -> Vec < u8 > {
145
- let result_offset = FbFunctionCallResult :: create (
146
- builder,
147
- & FbFunctionCallResultArgs {
148
- return_value,
149
- return_value_type,
150
- } ,
151
- ) ;
140
+ impl FlatbufferSerializable for u32 {
141
+ fn serialize ( & self , builder : & mut FlatBufferBuilder ) -> FbFunctionCallResultArgs {
142
+ FbFunctionCallResultArgs {
143
+ return_value : Some (
144
+ Fbhluint :: create ( builder, & FbhluintArgs { value : * self } ) . as_union_value ( ) ,
145
+ ) ,
146
+ return_value_type : FbReturnValue :: hluint,
147
+ }
148
+ }
149
+ }
152
150
153
- builder. finish_size_prefixed ( result_offset, None ) ;
151
+ impl FlatbufferSerializable for u64 {
152
+ fn serialize ( & self , builder : & mut FlatBufferBuilder ) -> FbFunctionCallResultArgs {
153
+ FbFunctionCallResultArgs {
154
+ return_value : Some (
155
+ Fbhlulong :: create ( builder, & FbhlulongArgs { value : * self } ) . as_union_value ( ) ,
156
+ ) ,
157
+ return_value_type : FbReturnValue :: hlulong,
158
+ }
159
+ }
160
+ }
154
161
155
- builder. finished_data ( ) . to_vec ( )
162
+ impl FlatbufferSerializable for bool {
163
+ fn serialize ( & self , builder : & mut FlatBufferBuilder ) -> FbFunctionCallResultArgs {
164
+ FbFunctionCallResultArgs {
165
+ return_value : Some (
166
+ Fbhlbool :: create ( builder, & FbhlboolArgs { value : * self } ) . as_union_value ( ) ,
167
+ ) ,
168
+ return_value_type : FbReturnValue :: hlbool,
169
+ }
170
+ }
156
171
}
0 commit comments