diff options
Diffstat (limited to 'system/gd/packet/parser/fields/scalar_field.cc')
-rw-r--r-- | system/gd/packet/parser/fields/scalar_field.cc | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/system/gd/packet/parser/fields/scalar_field.cc b/system/gd/packet/parser/fields/scalar_field.cc index de5e31c9b2..10c85284c7 100644 --- a/system/gd/packet/parser/fields/scalar_field.cc +++ b/system/gd/packet/parser/fields/scalar_field.cc @@ -160,7 +160,7 @@ int ScalarField::GetRustBitOffset( return num_leading_bits; } -void ScalarField::GenRustGetter(std::ostream& s, Size start_offset, Size end_offset) const { +void ScalarField::GenRustGetter(std::ostream& s, Size start_offset, Size end_offset, std::string parent_name) const { Size size = GetSize(); int num_leading_bits = GetRustBitOffset(s, start_offset, end_offset, GetSize()); @@ -207,7 +207,13 @@ void ScalarField::GenRustGetter(std::ostream& s, Size start_offset, Size end_off // needs casting from primitive if (GetRustParseDataType() != GetRustDataType()) { s << "let " << GetName() << " = "; - s << GetRustDataType() << "::from_" << GetRustParseDataType() << "(" << GetName() << ").unwrap();"; + s << GetRustDataType() << "::from_" << GetRustParseDataType() << "(" << GetName() << ").ok_or_else(||"; + s << "Error::InvalidEnumValueError {"; + s << " obj: \"" << parent_name << "\".to_string(),"; + s << " field: \"" << GetName() << "\".to_string(),"; + s << " value: " << GetName() << " as u64,"; + s << " type_: \"" << GetRustDataType() << "\".to_string(),"; + s << "})?;"; } } |