The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

Protocol::MTProto::TLSchemaParser - a parser for TL schema declarations

SYNOPSIS

my $parser = Protocol::MTProto::TLSchemaParser->new;

my $declarations = $parser->from_file( "telegram-l57.tl" );

# $declarations is now a reference to an array of Declarations

DESCRIPTION

This subclass of Parser::MGC recognises the TL schema grammar. Or, at least, at this early version it recognises a subset of the grammar sufficient to pass its own unit tests and to parse the Telegram TL schema files. It does not yet recognise the full TL grammar.

Details of this module should be considered very subject to change as the implementation progresses.

RETURNED TYPES

Declaration

The toplevel parse result is a reference to an array of Declaration instances. Each instance relates to a single declaration from the schema file.

Responds to the following accessors:

ident

A string containing the full identifier name, including the namespace prefix.

number

A 32bit number giving the parsed identification hash from the schema file, or undef if one was not given in the file. Note that this implementation does not generate numbers by CRC32 hashes at present.

optargs

Either undef, or a reference to a non-empty array of Argument instances relating to the optional arguments of the declaration.

args

Either undef, or a reference to a non-empty array of Argument instances relating to the required arguments of the declaration.

result_type

A "Type" instance giving this constructor's result type.

kind

Either the string constructor if the declaration was parsed before encountering the ---functions--- marker, or the string function if parsed after it.

Argument

Each element of the args and optargs arrays for a "Declaration" will be an Argument instance. Each relates to a single positional argument of the declaration.

Responds to the following accessors:

name

Either undef or a string giving the name of the argument.

type

A "Type" instance giving this argument's type.

conditional_on

Either undef, or a string giving the name of an earlier argument that this argument is conditional on.

condition_mask

Either undef, or a number giving the bitmask to apply to the earlier that argument this argument is conditional on.

has_pling

True if the type of this argument was declared using the ! modifier.

Type

The result_type of a "Declaration", and the type of an "Argument" will be a Type instance. At present, no attempt is made to intern the instances; comparison for equallity should be performed on the string name and its subtypes, not object identity.

Responds to the following accessors:

name

A string giving the name of the type.

is_boxed

True if the type is boxed; that is, its name begins with a capital letter.

is_polymorphic

True if the type is polymorphic.

subtypes (optional)

If the type is polymorphic, a reference to an array of other "Type" instances corresponding to the subtypes. If the type is not polymorphic this accessor will not exist.

AUTHOR

Paul Evans <leonerd@leonerd.org.uk>