Skip to content

Commit 2d522cc

Browse files
committed
Big fix
Signed-off-by: Ludvig Liljenberg <[email protected]>
1 parent 33bc474 commit 2d522cc

File tree

32 files changed

+1215
-1065
lines changed

32 files changed

+1215
-1065
lines changed

Cargo.lock

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/hyperlight_common/src/flatbuffer_wrappers/function_types.rs

Lines changed: 310 additions & 89 deletions
Large diffs are not rendered by default.

src/hyperlight_common/src/flatbuffer_wrappers/guest_error.rs

Lines changed: 5 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,11 @@ limitations under the License.
1717
extern crate flatbuffers;
1818

1919
use alloc::string::{String, ToString};
20-
use alloc::vec::Vec;
2120

22-
use anyhow::{Error, Result};
23-
use flatbuffers::size_prefixed_root;
2421
#[cfg(feature = "tracing")]
2522
use tracing::{Span, instrument};
2623

27-
use crate::flatbuffers::hyperlight::generated::{
28-
ErrorCode as FbErrorCode, GuestError as FbGuestError, GuestErrorArgs,
29-
};
24+
use crate::flatbuffers::hyperlight::generated::ErrorCode as FbErrorCode;
3025

3126
#[derive(Debug, Clone, Copy, Eq, PartialEq)]
3227
#[repr(C)]
@@ -48,6 +43,7 @@ pub enum ErrorCode {
4843
GuestFunctionParameterTypeMismatch = 14,
4944
GuestError = 15,
5045
ArrayLengthParamIsMissing = 16,
46+
HostFunctionError = 17,
5147
}
5248

5349
impl From<ErrorCode> for FbErrorCode {
@@ -73,6 +69,7 @@ impl From<ErrorCode> for FbErrorCode {
7369
}
7470
ErrorCode::GuestError => Self::GuestError,
7571
ErrorCode::ArrayLengthParamIsMissing => Self::ArrayLengthParamIsMissing,
72+
ErrorCode::HostFunctionError => Self::HostError,
7673
}
7774
}
7875
}
@@ -147,6 +144,7 @@ impl From<ErrorCode> for u64 {
147144
ErrorCode::GuestFunctionParameterTypeMismatch => 14,
148145
ErrorCode::GuestError => 15,
149146
ErrorCode::ArrayLengthParamIsMissing => 16,
147+
ErrorCode::HostFunctionError => 17,
150148
}
151149
}
152150
}
@@ -174,6 +172,7 @@ impl From<ErrorCode> for String {
174172
}
175173
ErrorCode::GuestError => "GuestError".to_string(),
176174
ErrorCode::ArrayLengthParamIsMissing => "ArrayLengthParamIsMissing".to_string(),
175+
ErrorCode::HostFunctionError => "HostFunctionError".to_string(),
177176
}
178177
}
179178
}
@@ -194,44 +193,6 @@ impl GuestError {
194193
}
195194
}
196195

197-
impl TryFrom<&[u8]> for GuestError {
198-
type Error = Error;
199-
fn try_from(value: &[u8]) -> Result<Self> {
200-
let guest_error_fb = size_prefixed_root::<FbGuestError>(value)
201-
.map_err(|e| anyhow::anyhow!("Error while reading GuestError: {:?}", e))?;
202-
let code = guest_error_fb.code();
203-
let message = match guest_error_fb.message() {
204-
Some(message) => message.to_string(),
205-
None => String::new(),
206-
};
207-
Ok(Self {
208-
code: code.into(),
209-
message,
210-
})
211-
}
212-
}
213-
214-
impl TryFrom<&GuestError> for Vec<u8> {
215-
type Error = Error;
216-
#[cfg_attr(feature = "tracing", instrument(err(Debug), skip_all, parent = Span::current(), level= "Trace"))]
217-
fn try_from(value: &GuestError) -> Result<Vec<u8>> {
218-
let mut builder = flatbuffers::FlatBufferBuilder::new();
219-
let message = builder.create_string(&value.message);
220-
221-
let guest_error_fb = FbGuestError::create(
222-
&mut builder,
223-
&GuestErrorArgs {
224-
code: value.code.into(),
225-
message: Some(message),
226-
},
227-
);
228-
builder.finish_size_prefixed(guest_error_fb, None);
229-
let res = builder.finished_data().to_vec();
230-
231-
Ok(res)
232-
}
233-
}
234-
235196
impl Default for GuestError {
236197
#[cfg_attr(feature = "tracing", instrument(parent = Span::current(), level= "Trace"))]
237198
fn default() -> Self {

src/hyperlight_common/src/flatbuffer_wrappers/util.rs

Lines changed: 116 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@ use flatbuffers::FlatBufferBuilder;
2121
use crate::flatbuffer_wrappers::function_types::ParameterValue;
2222
use crate::flatbuffers::hyperlight::generated::{
2323
FunctionCallResult as FbFunctionCallResult, FunctionCallResultArgs as FbFunctionCallResultArgs,
24-
ReturnValue as FbReturnValue, hlbool as Fbhlbool, hlboolArgs as FbhlboolArgs,
24+
FunctionCallResultType as FbFunctionCallResultType, ReturnValue as FbReturnValue,
25+
ReturnValueBox, ReturnValueBoxArgs, hlbool as Fbhlbool, hlboolArgs as FbhlboolArgs,
2526
hldouble as Fbhldouble, hldoubleArgs as FbhldoubleArgs, hlfloat as Fbhlfloat,
2627
hlfloatArgs as FbhlfloatArgs, hlint as Fbhlint, hlintArgs as FbhlintArgs, hllong as Fbhllong,
2728
hllongArgs as FbhllongArgs, hlsizeprefixedbuffer as Fbhlsizeprefixedbuffer,
@@ -34,8 +35,8 @@ use crate::flatbuffers::hyperlight::generated::{
3435
/// Flatbuffer-encodes the given value
3536
pub fn get_flatbuffer_result<T: FlatbufferSerializable>(val: T) -> Vec<u8> {
3637
let mut builder = FlatBufferBuilder::new();
37-
let res = &T::serialize(&val, &mut builder);
38-
let result_offset = FbFunctionCallResult::create(&mut builder, res);
38+
let res = T::serialize(&val, &mut builder);
39+
let result_offset = FbFunctionCallResult::create(&mut builder, &res);
3940

4041
builder.finish_size_prefixed(result_offset, None);
4142

@@ -50,123 +51,183 @@ pub trait FlatbufferSerializable {
5051

5152
impl FlatbufferSerializable for () {
5253
fn serialize(&self, builder: &mut FlatBufferBuilder) -> FbFunctionCallResultArgs {
54+
let void_off = Fbhlvoid::create(builder, &FbhlvoidArgs {});
55+
let rv_box = ReturnValueBox::create(
56+
builder,
57+
&ReturnValueBoxArgs {
58+
value_type: FbReturnValue::hlvoid,
59+
value: Some(void_off.as_union_value()),
60+
},
61+
);
5362
FbFunctionCallResultArgs {
54-
return_value: Some(Fbhlvoid::create(builder, &FbhlvoidArgs {}).as_union_value()),
55-
return_value_type: FbReturnValue::hlvoid,
63+
result_type: FbFunctionCallResultType::ReturnValueBox,
64+
result: Some(rv_box.as_union_value()),
5665
}
5766
}
5867
}
5968

6069
impl FlatbufferSerializable for &str {
6170
fn serialize(&self, builder: &mut FlatBufferBuilder) -> FbFunctionCallResultArgs {
6271
let string_offset = builder.create_string(self);
72+
let str_off = Fbhlstring::create(
73+
builder,
74+
&FbhlstringArgs {
75+
value: Some(string_offset),
76+
},
77+
);
78+
let rv_box = ReturnValueBox::create(
79+
builder,
80+
&ReturnValueBoxArgs {
81+
value_type: FbReturnValue::hlstring,
82+
value: Some(str_off.as_union_value()),
83+
},
84+
);
6385
FbFunctionCallResultArgs {
64-
return_value: Some(
65-
Fbhlstring::create(
66-
builder,
67-
&FbhlstringArgs {
68-
value: Some(string_offset),
69-
},
70-
)
71-
.as_union_value(),
72-
),
73-
return_value_type: FbReturnValue::hlstring,
86+
result_type: FbFunctionCallResultType::ReturnValueBox,
87+
result: Some(rv_box.as_union_value()),
7488
}
7589
}
7690
}
7791

7892
impl FlatbufferSerializable for &[u8] {
7993
fn serialize(&self, builder: &mut FlatBufferBuilder) -> FbFunctionCallResultArgs {
80-
let vec_offset = builder.create_vector(self);
94+
let vec_off = builder.create_vector(self);
95+
let buf_off = Fbhlsizeprefixedbuffer::create(
96+
builder,
97+
&FbhlsizeprefixedbufferArgs {
98+
size: self.len() as i32,
99+
value: Some(vec_off),
100+
},
101+
);
102+
let rv_box = ReturnValueBox::create(
103+
builder,
104+
&ReturnValueBoxArgs {
105+
value_type: FbReturnValue::hlsizeprefixedbuffer,
106+
value: Some(buf_off.as_union_value()),
107+
},
108+
);
81109
FbFunctionCallResultArgs {
82-
return_value: Some(
83-
Fbhlsizeprefixedbuffer::create(
84-
builder,
85-
&FbhlsizeprefixedbufferArgs {
86-
size: self.len() as i32,
87-
value: Some(vec_offset),
88-
},
89-
)
90-
.as_union_value(),
91-
),
92-
return_value_type: FbReturnValue::hlsizeprefixedbuffer,
110+
result_type: FbFunctionCallResultType::ReturnValueBox,
111+
result: Some(rv_box.as_union_value()),
93112
}
94113
}
95114
}
96115

97116
impl FlatbufferSerializable for f32 {
98117
fn serialize(&self, builder: &mut FlatBufferBuilder) -> FbFunctionCallResultArgs {
118+
let off = Fbhlfloat::create(builder, &FbhlfloatArgs { value: *self });
119+
let rv_box = ReturnValueBox::create(
120+
builder,
121+
&ReturnValueBoxArgs {
122+
value_type: FbReturnValue::hlfloat,
123+
value: Some(off.as_union_value()),
124+
},
125+
);
99126
FbFunctionCallResultArgs {
100-
return_value: Some(
101-
Fbhlfloat::create(builder, &FbhlfloatArgs { value: *self }).as_union_value(),
102-
),
103-
return_value_type: FbReturnValue::hlfloat,
127+
result_type: FbFunctionCallResultType::ReturnValueBox,
128+
result: Some(rv_box.as_union_value()),
104129
}
105130
}
106131
}
107132

108133
impl FlatbufferSerializable for f64 {
109134
fn serialize(&self, builder: &mut FlatBufferBuilder) -> FbFunctionCallResultArgs {
135+
let off = Fbhldouble::create(builder, &FbhldoubleArgs { value: *self });
136+
let rv_box = ReturnValueBox::create(
137+
builder,
138+
&ReturnValueBoxArgs {
139+
value_type: FbReturnValue::hldouble,
140+
value: Some(off.as_union_value()),
141+
},
142+
);
110143
FbFunctionCallResultArgs {
111-
return_value: Some(
112-
Fbhldouble::create(builder, &FbhldoubleArgs { value: *self }).as_union_value(),
113-
),
114-
return_value_type: FbReturnValue::hldouble,
144+
result_type: FbFunctionCallResultType::ReturnValueBox,
145+
result: Some(rv_box.as_union_value()),
115146
}
116147
}
117148
}
118149

119150
impl FlatbufferSerializable for i32 {
120151
fn serialize(&self, builder: &mut FlatBufferBuilder) -> FbFunctionCallResultArgs {
152+
let off = Fbhlint::create(builder, &FbhlintArgs { value: *self });
153+
let rv_box = ReturnValueBox::create(
154+
builder,
155+
&ReturnValueBoxArgs {
156+
value_type: FbReturnValue::hlint,
157+
value: Some(off.as_union_value()),
158+
},
159+
);
121160
FbFunctionCallResultArgs {
122-
return_value: Some(
123-
Fbhlint::create(builder, &FbhlintArgs { value: *self }).as_union_value(),
124-
),
125-
return_value_type: FbReturnValue::hlint,
161+
result_type: FbFunctionCallResultType::ReturnValueBox,
162+
result: Some(rv_box.as_union_value()),
126163
}
127164
}
128165
}
129166

130167
impl FlatbufferSerializable for i64 {
131168
fn serialize(&self, builder: &mut FlatBufferBuilder) -> FbFunctionCallResultArgs {
169+
let off = Fbhllong::create(builder, &FbhllongArgs { value: *self });
170+
let rv_box = ReturnValueBox::create(
171+
builder,
172+
&ReturnValueBoxArgs {
173+
value_type: FbReturnValue::hllong,
174+
value: Some(off.as_union_value()),
175+
},
176+
);
132177
FbFunctionCallResultArgs {
133-
return_value: Some(
134-
Fbhllong::create(builder, &FbhllongArgs { value: *self }).as_union_value(),
135-
),
136-
return_value_type: FbReturnValue::hllong,
178+
result_type: FbFunctionCallResultType::ReturnValueBox,
179+
result: Some(rv_box.as_union_value()),
137180
}
138181
}
139182
}
140183

141184
impl FlatbufferSerializable for u32 {
142185
fn serialize(&self, builder: &mut FlatBufferBuilder) -> FbFunctionCallResultArgs {
186+
let off = Fbhluint::create(builder, &FbhluintArgs { value: *self });
187+
let rv_box = ReturnValueBox::create(
188+
builder,
189+
&ReturnValueBoxArgs {
190+
value_type: FbReturnValue::hluint,
191+
value: Some(off.as_union_value()),
192+
},
193+
);
143194
FbFunctionCallResultArgs {
144-
return_value: Some(
145-
Fbhluint::create(builder, &FbhluintArgs { value: *self }).as_union_value(),
146-
),
147-
return_value_type: FbReturnValue::hluint,
195+
result_type: FbFunctionCallResultType::ReturnValueBox,
196+
result: Some(rv_box.as_union_value()),
148197
}
149198
}
150199
}
151200

152201
impl FlatbufferSerializable for u64 {
153202
fn serialize(&self, builder: &mut FlatBufferBuilder) -> FbFunctionCallResultArgs {
203+
let off = Fbhlulong::create(builder, &FbhlulongArgs { value: *self });
204+
let rv_box = ReturnValueBox::create(
205+
builder,
206+
&ReturnValueBoxArgs {
207+
value_type: FbReturnValue::hlulong,
208+
value: Some(off.as_union_value()),
209+
},
210+
);
154211
FbFunctionCallResultArgs {
155-
return_value: Some(
156-
Fbhlulong::create(builder, &FbhlulongArgs { value: *self }).as_union_value(),
157-
),
158-
return_value_type: FbReturnValue::hlulong,
212+
result_type: FbFunctionCallResultType::ReturnValueBox,
213+
result: Some(rv_box.as_union_value()),
159214
}
160215
}
161216
}
162217

163218
impl FlatbufferSerializable for bool {
164219
fn serialize(&self, builder: &mut FlatBufferBuilder) -> FbFunctionCallResultArgs {
220+
let off = Fbhlbool::create(builder, &FbhlboolArgs { value: *self });
221+
let rv_box = ReturnValueBox::create(
222+
builder,
223+
&ReturnValueBoxArgs {
224+
value_type: FbReturnValue::hlbool,
225+
value: Some(off.as_union_value()),
226+
},
227+
);
165228
FbFunctionCallResultArgs {
166-
return_value: Some(
167-
Fbhlbool::create(builder, &FbhlboolArgs { value: *self }).as_union_value(),
168-
),
169-
return_value_type: FbReturnValue::hlbool,
229+
result_type: FbFunctionCallResultType::ReturnValueBox,
230+
result: Some(rv_box.as_union_value()),
170231
}
171232
}
172233
}

0 commit comments

Comments
 (0)