ASN::META

A MOP-based compile-time ASN.1 spec evaluator

ASN::META

Experimental Perl 6 module that is able to compile ASN.1 specification into set of Perl 6 types.

What ASN::META does not?

  • It does not generate Perl 6 code (at least, textual form).

  • The module knows nothing about ASN.1 encoding means, it purely generates Perl 6 types. For this purpose a separate module may be used. Currently, goal is to have full compatibility with ASN::BER module.

What ASN::META does?

Main workflow is as follows:

  • A specification is passed to ASN::META on module use

  • (internally, ASN::Grammar is used to parse the specification)

  • ASN::META uses parsed specification to generate appropriate types with MOP

  • Generated types for particular ASN.1 specification are precompiled and exported

What it does?

Synopsis

# In file `schema.asn`:
WorldSchema

DEFINITIONS IMPLICIT TAGS ::= BEGIN
Rocket ::= SEQUENCE
{
   name      UTF8String,
   message   UTF8String DEFAULT "Hello World",
   fuel      ENUMERATED {
       solid(0),
       liquid(1),
       gas(2)
   },
   speed     CHOICE {
      mph    [0] INTEGER,
      kmph   [1] INTEGER
   }  OPTIONAL,
   payload   SEQUENCE OF UTF8String
}
END

# In file `User.pm6`:
# Note usage of BEGIN block to gather file's content at compile time
use ASN::META BEGIN [ 'file', slurp 'schema.asn' };
# In case of re-compilation on dependency change, package User may be
# re-built from the place where local paths are useless, in this case use %?RESOURCES:
# `use ASN::META BEGIN { 'file', slurp %?RESOURCES<schema.asn> }`

# `Rocket` type is exported by ASN::META
my Rocket $rocket = Rocket.new(name => 'Rocker', :fuel(solid),
        speed => Speed.new((mph => 9001)),
        payload => Array[Str].new('A', 'B', 'C'));


# As well as inner types being promoted to top level:
say Fuel;  # generated enum
say solid; # value of this enum, (solid ~~ Fuel) == true
say Speed; # Generated type based on ASNChoice from ASN::BER

ASN::META v0.5.2

A MOP-based compile-time ASN.1 spec evaluator

Authors

  • Alexander Kiryuhin

License

Artistic-2.0

Dependencies

ASN::GrammarASN::BERType::EnumHOW

Test Dependencies

Provides

  • ASN::META
  • ASN::META::Types

The Camelia image is copyright 2009 by Larry Wall. "Raku" is trademark of the Yet Another Society. All rights reserved.