@@ -16,141 +16,156 @@ limitations under the License.
1616
1717use alloc:: vec:: Vec ;
1818
19- use flatbuffers:: { FlatBufferBuilder , UnionWIPOffset , WIPOffset } ;
19+ use flatbuffers:: FlatBufferBuilder ;
2020
2121use 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 ,
2526 hlsizeprefixedbufferArgs as FbhlsizeprefixedbufferArgs , hlstring as Fbhlstring ,
2627 hlstringArgs as FbhlstringArgs , hluint as Fbhluint , hluintArgs as FbhluintArgs ,
2728 hlulong as Fbhlulong , hlulongArgs as FbhlulongArgs , hlvoid as Fbhlvoid ,
2829 hlvoidArgs as FbhlvoidArgs , FunctionCallResult as FbFunctionCallResult ,
2930 FunctionCallResultArgs as FbFunctionCallResultArgs , ReturnValue as FbReturnValue ,
3031} ;
3132
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 > {
3335 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) ;
3538
36- let rt = FbReturnValue :: hldouble;
37- let rv: Option < WIPOffset < UnionWIPOffset > > = Some ( hldouble. as_union_value ( ) ) ;
39+ builder. finish_size_prefixed ( result_offset, None ) ;
3840
39- get_flatbuffer_result ( & mut builder, rt , rv )
41+ builder. finished_data ( ) . to_vec ( )
4042}
4143
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 ;
5046}
5147
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
5849
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+ }
6057}
6158
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+ }
7075}
7176
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+ }
8094}
8195
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+ }
90105}
91106
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+ }
100116}
101117
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+ }
117127}
118128
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+ }
138138}
139139
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+ }
152150
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+ }
154161
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+ }
156171}
0 commit comments