The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Google::ProtocolBuffers::Dynamic::Introspection - introspection API for classes

VERSION

version 0.26

SYNOPSIS

    $message_def = Some::Class->message_descriptor;
    $field_def = $message_def->find_field_by_name('some_field');

    $message_name = $message_def->full_name;
    $field_name = $field_def->full_name

    $enum_def = Some::Enum::Package->enum_descriptor;
    $value = $enum_def->values;

DESCRIPTION

A simple introspection API wrapping uPB descriptor API.

Note that this API does not respect referential integrity; for example this snippet

    $message_def = ...;
    $field_def = $message_def->find_field_by_name($name);
    $containing_def = $field_def->containing_type;

    die "Oops" if $message_def != $containing_def;

die()s because even if $message_def and $containing_def represent the same underlying entity, their are two distinct objects in Perl. This is true for all methods below returning an object.

The same applies to multiple invocations of the same method, for example

    $message_def = ...;
    $field_def = $message_def->find_field_by_name($name);
    $field_def_again = $message_def->find_field_by_name($name);

    die "Oops" if $field_def != $field_def_again;

Google::ProtocolBuffers::Dynamic::MessageDef

full_name

    $name = $message_def->full_name;

The fully-qualified name of this message (including package and outer messages).

field_count, oneof_count

    $count = $message_def->field_count;

The number of fields/oneofs. The number of fields includes fields declared in oneofs, but does not include the oneof declaration themselves.

find_field_by_number

    $field_def = $message_def->find_field_by_number($number);

Returns the field matching the given number, or undef.

find_field_by_name

    $field_def = $message_def->find_field_by_name($name);

Returns the field with the given name, or undef.

find_oneof_by_name

    $oneof_def = $message_def->find_oneof_by_name($name);

Returns the oneof with the given name, or undef.

fields, oneofs

    $field_defs = $message_def->fields;
    $oneof_defs = $message_def->oneofs;

Returns all fields/oneof as an array reference.

is_map_entry

    $is_map = $message_def->is_map_entry;

True if this message is a key/value pair that Protocol Buffers 3 uses to represent a map entry.

Google::ProtocolBuffers::Dynamic::FieldDef

name

    $name = $field_def->name;

The short name of this field (the one used in the message definition).

full_name

    $name = $field_def->full_name;

Same as name for regular fields, returns the fully-qualified name for extension fields.

number

    $number = $field_def->number;

The field number as declared in the message definition.

label

    $label = $field_def->label;

Returns the field label (whether the field is required, repeated or optional).

is_extension, is_packed, is_message, is_string, is_repeatedm, is_primitive, is_map

Simple boolean accessors.

descriptor_type

    $protobuf_type = $field_def->descriptor_type;

Returns the field type as specified in the message declaration (note that this returns different types for, e.g. int32, sint32, fixed32 and sfixed32 fields).

value_type

    $value_type = $field_def->value_type;

Returns the underlying field type (note that this returns the same int32 type for, e.g. int32, sint32, fixed32 and sfixed32 fields).

default_value

    $value = $field_def->default_value;

The default value for this field (the type depends on field type). Returns undef for message/group fields, returns the default value for the underlying type for repeated fields.

containing_type

    $message_def = $field_def->containing_type;

Containing message (for extension fields this is the message being extended, not the message where the extension is declared).

containing_oneof

    $oneof_def = $field_def->containing_oneof;

Containing oneof definition, or undef if this field is not part of an oneof.

enum_type, message_type

    $enum_def = $field_def->enum_type;
    $message_def = $field_def->message_type;

For fields with type enum or message, returns the matching type definition, or undef if the fields is not a message/enum.

Google::ProtocolBuffers::Dynamic::OneofDef

name

    $name = $oneof_def->name;

The short name of this field (the one used in the message definition).

full_name

    $name = $oneof_def->full_name;

Same as name.

field_count

    $count = $oneof_def->field_count;

The number of fields.

find_field_by_number

    $field_def = $oneof_def->find_field_by_number($number);

Returns the field matching the given number, or undef.

find_field_by_name

    $field_def = $oneof_def->find_field_by_name($name);

Returns the field with the given name, or undef.

fields

    $field_defs = $message_def->fields;

Returns all fields as an array reference.

containing_type

    $message_def = $field_def->containing_type;

Containing message.

Google::ProtocolBuffers::Dynamic::EnumDef

full_name

    $name = $enum_def->full_name;

The fully-qualified name of this enum (including package and outer messages).

default_value

    $value = $enum_def->default_value;

Default value for this enum.

find_number_by_name

    $number = $enum_def->find_number_by_name($name);

Returns the integer value of the enum entry with the given name, or undef.

find_name_by_number

    $name = $enum_def->find_name_by_number($number);

Returns the name of the enum entry with the given value, or undef.

values

    $value_map = $enum_def->values;

Returns an hash reference containig all name/value pairs for this enum.

Google::ProtocolBuffers::Dynamic::ServiceDef

full_name

    $name = $service_def->full_name;

The fully-qualified name of this service (including package).

methods

    $method_defs = $service_def->methods;

Returns all methods as an array reference.

Google::ProtocolBuffers::Dynamic::MethodDef

name

    $name = $method_def->name;

The short name of this method (the one used in the service definition).

full_name

    $name = $method_def->full_name;

The fully-qualified name of this method (including package and service name).

containing_service

    $service_def = $method_def->containing_service;

Containing service definition.

input_type

    $message_def = $method_def->input_type;

Input type for the method.

output_type

    $message_def = $method_def->output_type;

Output type for the method.

client_streaming

    $is_streaming_client = $method_def->client_streaming.

True if the service accepts streaming input (i.e. the input type has the stream annotation in the method definition).

server_streaming

    $is_streaming_server = $method_def->server_streaming.

True if the service produces streaming output (i.e. the output type has the stream annotation in the method definition).

CONSTANTS

All the constants below are available as Google::ProtocolBuffers::Dynamic::CONSTANT and can be exported either individually or using the :labels, :descriptor and :values exporter tags.

Labels

Return value of the "label" method.

LABEL_OPTIONAL
LABEL_REPEATED
LABEL_REQUIRED

Value types

Return value of the "value_type" method.

VALUE_FLOAT
VALUE_DOUBLE
VALUE_BOOL
VALUE_STRING
VALUE_BYTES
VALUE_MESSAGE
VALUE_ENUM
VALUE_INT32
VALUE_UINT32
VALUE_INT64
VALUE_UINT64

Descriptor types

Return value of the "descriptor_type" method.

DESCRIPTOR_DOUBLE
DESCRIPTOR_FLOAT
DESCRIPTOR_INT64
DESCRIPTOR_UINT64
DESCRIPTOR_INT32
DESCRIPTOR_FIXED64
DESCRIPTOR_FIXED32
DESCRIPTOR_BOOL
DESCRIPTOR_STRING
DESCRIPTOR_GROUP
DESCRIPTOR_MESSAGE
DESCRIPTOR_BYTES
DESCRIPTOR_UINT32
DESCRIPTOR_ENUM
DESCRIPTOR_SFIXED32
DESCRIPTOR_SFIXED64
DESCRIPTOR_SINT32
DESCRIPTOR_SINT64

AUTHOR

Mattia Barbon <mattia@barbon.org>

COPYRIGHT AND LICENSE

This software is copyright (c) 2015-2016 by Mattia Barbon.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.