The Perl Toolchain Summit 2025 Needs You: You can help 🙏 Learn more

use strict;
my ($types, $wiretypes, $labels, $complex_types);
BEGIN
{
## from src/google/protobuf/descriptor.h
$types = {
TYPE_DOUBLE => 1, ## double, exactly eight bytes on the wire.
TYPE_FLOAT => 2, ## float, exactly four bytes on the wire.
TYPE_INT64 => 3, ## int64, varint on the wire. Negative numbers
## take 10 bytes. Use TYPE_SINT64 if negative
## values are likely.
TYPE_UINT64 => 4, ## uint64, varint on the wire.
TYPE_INT32 => 5, ## int32, varint on the wire. Negative numbers
## take 10 bytes. Use TYPE_SINT32 if negative
## values are likely.
TYPE_FIXED64 => 6, ## uint64, exactly eight bytes on the wire.
TYPE_FIXED32 => 7, ## uint32, exactly four bytes on the wire.
TYPE_BOOL => 8, ## bool, varint on the wire.
TYPE_STRING => 9, ## UTF-8 text.
TYPE_GROUP => 10, ## Tag-delimited message. Deprecated.
TYPE_MESSAGE => 11, ## Length-delimited message.
TYPE_BYTES => 12, ## Arbitrary byte array.
TYPE_UINT32 => 13, ## uint32, varint on the wire
TYPE_ENUM => 14, ## Enum, varint on the wire
TYPE_SFIXED32 => 15, ## int32, exactly four bytes on the wire
TYPE_SFIXED64 => 16, ## int64, exactly eight bytes on the wire
TYPE_SINT32 => 17, ## int32, ZigZag-encoded varint on the wire
TYPE_SINT64 => 18, ## int64, ZigZag-encoded varint on the wire
};
## from src/google/protobuf/descriptor.h
$labels = {
LABEL_OPTIONAL => 1,
LABEL_REQUIRED => 2,
LABEL_REPEATED => 3,
};
## from src/google/protobuf/wire_format.h
$wiretypes = {
WIRETYPE_VARINT => 0,
WIRETYPE_FIXED64 => 1,
WIRETYPE_LENGTH_DELIMITED => 2,
WIRETYPE_START_GROUP => 3,
WIRETYPE_END_GROUP => 4,
WIRETYPE_FIXED32 => 5,
};
## Complex types - this is not a part of Google specificaion
$complex_types = {
MESSAGE => 1,
GROUP => 2,
ENUM => 3,
ONEOF => 4,
};
}
use base 'Exporter';
use vars qw/@EXPORT_OK %EXPORT_TAGS/;
use constant $types;
$EXPORT_TAGS{'types'} = [keys %$types];
push @{$EXPORT_TAGS{'all'}}, keys %$types;
push @EXPORT_OK, keys %$types;
use constant $wiretypes;
$EXPORT_TAGS{'wiretypes'} = [keys %$wiretypes];
push @{$EXPORT_TAGS{'all'}}, keys %$wiretypes;
push @EXPORT_OK, keys %$wiretypes;
use constant $labels;
$EXPORT_TAGS{'labels'} = [keys %$labels];
push @{$EXPORT_TAGS{'all'}}, keys %$labels;
push @EXPORT_OK, keys %$labels;
use constant $complex_types;
$EXPORT_TAGS{'complex_types'} = [keys %$complex_types];
push @{$EXPORT_TAGS{'all'}}, keys %$complex_types;
push @EXPORT_OK, keys %$complex_types;
1;