hyperlight_common/flatbuffer_wrappers/
util.rs1use alloc::vec::Vec;
18
19use flatbuffers::FlatBufferBuilder;
20
21use crate::flatbuffers::hyperlight::generated::{
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,
26 hlsizeprefixedbufferArgs as FbhlsizeprefixedbufferArgs, hlstring as Fbhlstring,
27 hlstringArgs as FbhlstringArgs, hluint as Fbhluint, hluintArgs as FbhluintArgs,
28 hlulong as Fbhlulong, hlulongArgs as FbhlulongArgs, hlvoid as Fbhlvoid,
29 hlvoidArgs as FbhlvoidArgs, FunctionCallResult as FbFunctionCallResult,
30 FunctionCallResultArgs as FbFunctionCallResultArgs, ReturnValue as FbReturnValue,
31};
32
33pub fn get_flatbuffer_result<T: FlatbufferSerializable>(val: T) -> Vec<u8> {
35 let mut builder = FlatBufferBuilder::new();
36 let res = &T::serialize(&val, &mut builder);
37 let result_offset = FbFunctionCallResult::create(&mut builder, res);
38
39 builder.finish_size_prefixed(result_offset, None);
40
41 builder.finished_data().to_vec()
42}
43
44pub trait FlatbufferSerializable {
45 fn serialize(&self, builder: &mut FlatBufferBuilder) -> FbFunctionCallResultArgs;
46}
47
48impl 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 }
57}
58
59impl 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 }
75}
76
77impl 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 }
94}
95
96impl 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 }
105}
106
107impl 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 }
116}
117
118impl 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 }
127}
128
129impl 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}
139
140impl 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}
150
151impl 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}
161
162impl 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 }
171}