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>