Skip to content

Commit

Permalink
Revert "Provide a better error on a packed non-primitive."
Browse files Browse the repository at this point in the history
This reverts commit 167c58e.
  • Loading branch information
stepancheg committed Feb 25, 2024
1 parent 5dfba8b commit 869670a
Showing 1 changed file with 34 additions and 37 deletions.
71 changes: 34 additions & 37 deletions protobuf-codegen/src/gen/field/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -185,43 +185,40 @@ impl<'a> FieldGen<'a> {
}
RuntimeFieldType::Repeated(..) => {
let elem = field_elem(&field, root_scope, &customize);
let primitive = match field.field.proto().type_() {
Type::TYPE_DOUBLE
| Type::TYPE_FLOAT
| Type::TYPE_INT64
| Type::TYPE_UINT64
| Type::TYPE_INT32
| Type::TYPE_FIXED64
| Type::TYPE_FIXED32
| Type::TYPE_BOOL
| Type::TYPE_UINT32
| Type::TYPE_SFIXED32
| Type::TYPE_SFIXED64
| Type::TYPE_SINT32
| Type::TYPE_SINT64 => true,
Type::TYPE_STRING
| Type::TYPE_GROUP
| Type::TYPE_MESSAGE
| Type::TYPE_BYTES
| Type::TYPE_ENUM => false,
};
let packed = field
.field
.proto()
.options
.get_or_default()
.packed
.unwrap_or(match field.message.scope.file_scope.syntax() {
Syntax::Proto2 => false,
// in proto3, repeated primitive types are packed by default
Syntax::Proto3 => primitive,
});
if packed && !primitive {
anyhow::bail!(
"[packed = true] can only be specified for repeated primitive fields"
);
}
FieldKind::Repeated(RepeatedField { elem, packed })

FieldKind::Repeated(RepeatedField {
elem,
packed: field
.field
.proto()
.options
.get_or_default()
.packed
.unwrap_or(match field.message.scope.file_scope.syntax() {
Syntax::Proto2 => false,
// in proto3, repeated primitive types are packed by default
Syntax::Proto3 => match field.field.proto().type_() {
Type::TYPE_DOUBLE
| Type::TYPE_FLOAT
| Type::TYPE_INT64
| Type::TYPE_UINT64
| Type::TYPE_INT32
| Type::TYPE_FIXED64
| Type::TYPE_FIXED32
| Type::TYPE_BOOL
| Type::TYPE_UINT32
| Type::TYPE_SFIXED32
| Type::TYPE_SFIXED64
| Type::TYPE_SINT32
| Type::TYPE_SINT64 => true,
Type::TYPE_STRING
| Type::TYPE_GROUP
| Type::TYPE_MESSAGE
| Type::TYPE_BYTES
| Type::TYPE_ENUM => false,
},
}),
})
}
RuntimeFieldType::Singular(..) => {
let elem = field_elem(&field, root_scope, &customize);
Expand Down

0 comments on commit 869670a

Please sign in to comment.