Piqi Self-definition
This page contains Piqi self-definition represented as a set of Piqi files included by each other starting from the top piqi.piqi
.
File names are clickable. When clicked, contents become visible in a tabbed view. Tabbed view displays type definitions represented in various formats:
- Source — Source file.
- Piqi.Proto — Protocol Buffers data definitions converted from Piqi using
piqi to-proto
command. - Proto.Piqi — Piqi type specification converted from Protocol Buffers
.proto
file viapiqi of-proto
command. - Piqi-light — Piqi type specification represented in Piqi-light syntax.
- Expanded Piqi — Piqi file where all
include
andextend
directives have been applied usingpiqi expand
, which produces plain type specifications without external includes and extensions. - Expanded Piqi-light — The same as the previous one but represented in Piqi-light syntax.
(These files can be also found in the Piqi source distribution.)
Piqi self-definition
% The current Piqi self-specification % % This file contains defintion of the Piqi self-specification % % Copyright 2009, 2010, 2011, 2012, 2013 Anton Lavrik % aliases for built-in types; these definitions are automatically included in % each Piqi module except modules named "piqi" .alias [ .name bool .piqi-type.bool ] .alias [ .name string .piqi-type.string ] .alias [ .name binary .piqi-type.binary ] .alias [ .name piqi-any .piqi-type.any ] .alias [ .name int .piqi-type.int ] .alias [ .name uint .piqi-type.int ] .alias [ .name int32 .piqi-type.int ] .alias [ .name uint32 .piqi-type.int ] .alias [ .name int64 .piqi-type.int ] .alias [ .name uint64 .piqi-type.int ] .alias [ .name float64 .piqi-type.float ] .alias [ .name float32 .piqi-type.float ] % Fixed versions of int32/64 and uint32/64. "Fixed" here means that they are % represented on the wire using exactly 4 and 8 bytes respectively. .alias [ .name int32-fixed .type int32 .piqi-type.int ] .alias [ .name uint32-fixed .type uint32 .piqi-type.int ] .alias [ .name int64-fixed .type int64 .piqi-type.int ] .alias [ .name uint64-fixed .type uint64 .piqi-type.int ] .alias [ .name float .type float64 .piqi-type.float ] % % end of built-in types % .alias [ .name word .type string .piq-format.word % print it as word instead of a quoted string literal ] .alias [ .name name .type word ] .variant [ % user-defined types .name typedef .option [ .type record ] .option [ .type variant ] .option [ .type enum ] .option [ .type alias ] .option [ .type list ] .protobuf-name "piqi_typedef" ] .enum [ % built-in Piqi types .name piqi-type % prefix all options in order to prevent clash with keywords of the Protobuf % target languages .protobuf-prefix "piqi_type_" .option [ .name int ] .option [ .name float ] .option [ .name bool ] .option [ .name string ] .option [ .name binary ] .option [ .name any ] ] .alias [ .name type .type name ] .record [ .name record .field [ .type name ] .field [ .type field .repeated ] ] .record [ .name field .field [ .type name .optional ] .field [ .type type .optional ] .field [ .name mode .type field-mode .optional .default.required ] .field [ .name default .type piqi-any .optional ] .field [ % experimental: indication that the field has been deprecated; which % means that it may not be supported any more and use of such field is % discouraged .name deprecated .optional ] ] .enum [ .name field-mode .option [ .name required ] .option [ .name optional ] .option [ .name repeated ] ] .record [ .name variant .field [ .type name ] .field [ .type option .repeated % > 1 ] ] .record [ .name option % NOTE: either name or type have to be present .field [ .type name .optional ] .field [ .type type .optional ] .field [ % experimental: indication that the option has been deprecated; which % means that it may not be supported any more and use of such field is % discouraged .name deprecated .optional ] ] .record [ .name enum .field [ .type name ] % note that enum options shouldn't specify type and must specify name .field [ .type option .repeated % > 1 ] .protobuf-name "piqi_enum" ] .record [ .name alias .field [ .type name ] % either type or piqi-type fields must be present; we don't use variant here % in order to simplify external representation which is going to be flat in % such case, as opposed to nested if we used variant .field [ .type type .optional ] .field [ .type piqi-type .optional ] ] .record [ .name list .field [ .type name ] .field [ .type type ] ] .record [ .name piqi .field [ .name module .type word .optional ] .field [ .type typedef .repeated ] .field [ .type import .repeated ] .field [ .type function .repeated ] .field [ .name custom-field .type word .repeated ] ] .record [ % import <module> as <name> .name import .field [ .name module .type word ] .field [ .type name .optional ] ] % representation of the built-in "piqi-any" type .record [ .name any .field [ % type could be optional or not fully resolved at all times .name type .type string .optional ] .field [ % arbitrary values corresponding to the type serialized in Protocol % Buffers format; when one of "type" or "protobuf" field is present, the % other must be present as well .name protobuf .type binary .optional ] .field [ % arbitrary JSON value serialized in as utf-8 string; when "type" field % is present, the JSON value must correspond to this type .name json .type string .optional ] .field [ % arbitrary XML value serialized in as utf-8 string; when "type" field % is present, the JSON value must correspond to this type .name xml .type string .optional ] ] .record [ .name function .field [ .type name ] .field [ .name input .type type .optional ] .field [ .name output .type type .optional ] .field [ .name error .type type .optional ] ] .record [ % Standard portable representation of several piqi modules bundeled % together. This data structure is used by "piqi compile", "piqi server" and % other parts. % % The fact it is called piqi-list while being a record could be somewhat % confusing. However, doing it this way allows to get nicer JSON and XML % "visual" representation. It is still Protobuf-binary-compatible with % .list [ .type piqi ] definition. .name piqi-list .field [ % imported modules come before the module they were imported from .type piqi .repeated .code 1 ] ] % % standard extensions natively supported by Piqi % .include [ .module piqi.piq ] .include [ .module piqi.protobuf ] .include [ .module piqi.json ] .include [ .module piqi.getopt ] .include [ .module piqi.piqic ]
include piqi.piq include piqi.protobuf include piqi.json include piqi.getopt include piqi.piqic type bool = .bool type string = .string type binary = .binary type piqi-any = .piqi-any type int = .int type uint = .int type int32 = .int type uint32 = .int type int64 = .int type uint64 = .int type float64 = .float type float32 = .float type int32-fixed = int32() type uint32-fixed = uint32() type int64-fixed = int64() type uint64-fixed = uint64() type float = float64() type word = string() type name = word() type typedef = | record() | variant() | enum() | alias() | list() type piqi-type = | int | float | bool | string | binary | any type type = name() type record = { - name() * field() } type field = { ? name() ? type() ? mode :: field-mode() = .required ? default :: piqi-any() ? deprecated } type field-mode = | required | optional | repeated type variant = { - name() * option() } type option = { ? name() ? type() ? deprecated } type enum = { - name() * option() } type alias = { - name() ? type() ? piqi-type() } type list = { - name() - type() } type piqi = { ? module :: word() * typedef() * import() * function() * custom-field :: word() } type import = { - module :: word() ? name() } type any = { ? type :: string() ? protobuf :: binary() ? json :: string() ? xml :: string() } type function = { - name() ? input :: type() ? output :: type() ? error :: type() } type piqi-list = { * piqi() }
.alias [ .name bool .piqi-type.bool ] .alias [ .name string .piqi-type.string ] .alias [ .name binary .piqi-type.binary ] .alias [ .name piqi-any .piqi-type.any ] .alias [ .name int .piqi-type.int .protobuf-type "sint32" .protobuf-wire-type.zigzag-varint ] .alias [ .name uint .piqi-type.int .protobuf-type "uint32" .protobuf-wire-type.varint ] .alias [ .name int32 .piqi-type.int .protobuf-type "sint32" .protobuf-wire-type.zigzag-varint ] .alias [ .name uint32 .piqi-type.int .protobuf-type "uint32" .protobuf-wire-type.varint ] .alias [ .name int64 .piqi-type.int .protobuf-type "sint64" .protobuf-wire-type.zigzag-varint ] .alias [ .name uint64 .piqi-type.int .protobuf-type "uint64" .protobuf-wire-type.varint ] .alias [ .name float64 .piqi-type.float .protobuf-type "double" .protobuf-wire-type.fixed64 ] .alias [ .name float32 .piqi-type.float .protobuf-type "float" .protobuf-wire-type.fixed32 ] .alias [ .name int32-fixed .type int32 .piqi-type.int .protobuf-type "sfixed32" .protobuf-wire-type.signed-fixed32 ] .alias [ .name uint32-fixed .type uint32 .piqi-type.int .protobuf-type "fixed32" .protobuf-wire-type.fixed32 ] .alias [ .name int64-fixed .type int64 .piqi-type.int .protobuf-type "sfixed64" .protobuf-wire-type.signed-fixed64 ] .alias [ .name uint64-fixed .type uint64 .piqi-type.int .protobuf-type "fixed64" .protobuf-wire-type.fixed64 ] .alias [ .name float .type float64 .piqi-type.float ] .alias [ .name word .type string .piq-format.word ] .alias [ .name name .type word ] .variant [ .name typedef .option [ .type record ] .option [ .type variant ] .option [ .type enum ] .option [ .type alias ] .option [ .type list ] .protobuf-name "piqi_typedef" ] .enum [ .name piqi-type .option [ .name int ] .option [ .name float ] .option [ .name bool ] .option [ .name string ] .option [ .name binary ] .option [ .name any ] .protobuf-prefix "piqi_type_" ] .alias [ .name type .type name ] .record [ .name record .field [ .type name ] .field [ .type field .repeated ] .field [ .name piq-positional .type bool .optional ] .field [ .name protobuf-name .type string .optional ] .field [ .name protobuf-custom .type string .repeated ] .field [ .name json-name .type string .optional ] ] .record [ .name field .field [ .type name .optional ] .field [ .type type .optional ] .field [ .name mode .type field-mode .optional .default.required ] .field [ .name default .type piqi-any .optional ] .field [ .name deprecated .optional ] .field [ .type piq-format .optional ] .field [ .name piq-positional .type bool .optional ] .field [ .name piq-alias .type name .optional ] .field [ .name protobuf-name .type string .optional ] .field [ .name code .type int32 .optional ] .field [ .name protobuf-packed .optional ] .field [ .name json-name .type string .optional ] .field [ .name json-omit-missing .type bool .optional ] .field [ .name getopt-letter .type word .optional ] .field [ .name getopt-doc .type string .optional ] ] .enum [ .name field-mode .option [ .name required ] .option [ .name optional ] .option [ .name repeated ] ] .record [ .name variant .field [ .type name ] .field [ .type option .repeated ] .field [ .name protobuf-name .type string .optional ] .field [ .name protobuf-custom .type string .repeated ] .field [ .name json-name .type string .optional ] ] .record [ .name option .field [ .type name .optional ] .field [ .type type .optional ] .field [ .name deprecated .optional ] .field [ .type piq-format .optional ] .field [ .name piq-alias .type name .optional ] .field [ .name protobuf-name .type string .optional ] .field [ .name code .type int32 .optional ] .field [ .name json-name .type string .optional ] .field [ .name getopt-letter .type word .optional ] .field [ .name getopt-doc .type string .optional ] ] .record [ .name enum .field [ .type name ] .field [ .type option .repeated ] .field [ .name protobuf-name .type string .optional ] .field [ .name protobuf-custom .type string .repeated ] .field [ .name protobuf-prefix .type string .optional ] .field [ .name json-name .type string .optional ] .protobuf-name "piqi_enum" ] .record [ .name alias .field [ .type name ] .field [ .type type .optional ] .field [ .type piqi-type .optional ] .field [ .type piq-format .optional ] .field [ .name protobuf-name .type string .optional ] .field [ .name protobuf-type .type string .optional ] .field [ .type protobuf-wire-type .optional ] .field [ .name json-name .type string .optional ] ] .record [ .name list .field [ .type name ] .field [ .type type ] .field [ .type piq-format .optional ] .field [ .name protobuf-name .type string .optional ] .field [ .name protobuf-custom .type string .repeated ] .field [ .name protobuf-packed .optional ] .field [ .name json-name .type string .optional ] ] .record [ .name piqi .field [ .name module .type word .optional ] .field [ .type typedef .repeated ] .field [ .type import .repeated ] .field [ .type function .repeated ] .field [ .name custom-field .type word .repeated ] .field [ .name protobuf-custom .type string .repeated ] .field [ .name protobuf-package .type string .optional ] .field [ .name file .type string .optional ] ] .record [ .name import .field [ .name module .type word ] .field [ .type name .optional ] ] .record [ .name any .field [ .name type .type string .optional ] .field [ .name protobuf .type binary .optional ] .field [ .name json .type string .optional ] .field [ .name xml .type string .optional ] ] .record [ .name function .field [ .type name ] .field [ .name input .type type .optional ] .field [ .name output .type type .optional ] .field [ .name error .type type .optional ] ] .record [ .name piqi-list .field [ .type piqi .repeated .code 1 ] ] .variant [ .name piq-format .option [ .name word ] .option [ .name text ] ] .alias [ .name protobuf-int32 .type int32 .piqi-type.int .protobuf-type "int32" .protobuf-wire-type.signed-varint ] .alias [ .name protobuf-int64 .type int64 .piqi-type.int .protobuf-type "int64" .protobuf-wire-type.signed-varint ] .enum [ .name protobuf-wire-type .option [ .name varint ] .option [ .name zigzag-varint ] .option [ .name fixed32 ] .option [ .name fixed64 ] .option [ .name signed-varint ] .option [ .name signed-fixed32 ] .option [ .name signed-fixed64 ] .option [ .name block ] ]
type bool = .bool type string = .string type binary = .binary type piqi-any = .piqi-any type int = .int type uint = .int type int32 = .int type uint32 = .int type int64 = .int type uint64 = .int type float64 = .float type float32 = .float type int32-fixed = int32() type uint32-fixed = uint32() type int64-fixed = int64() type uint64-fixed = uint64() type float = float64() type word = string() type name = word() type typedef = | record() | variant() | enum() | alias() | list() type piqi-type = | int | float | bool | string | binary | any type type = name() type record = { - name() * field() ? piq-positional :: bool() ? protobuf-name :: string() * protobuf-custom :: string() ? json-name :: string() } type field = { ? name() ? type() ? mode :: field-mode() = .required ? default :: piqi-any() ? deprecated ? piq-format() ? piq-positional :: bool() ? piq-alias :: name() ? protobuf-name :: string() ? code :: int32() ? protobuf-packed ? json-name :: string() ? json-omit-missing :: bool() ? getopt-letter :: word() ? getopt-doc :: string() } type field-mode = | required | optional | repeated type variant = { - name() * option() ? protobuf-name :: string() * protobuf-custom :: string() ? json-name :: string() } type option = { ? name() ? type() ? deprecated ? piq-format() ? piq-alias :: name() ? protobuf-name :: string() ? code :: int32() ? json-name :: string() ? getopt-letter :: word() ? getopt-doc :: string() } type enum = { - name() * option() ? protobuf-name :: string() * protobuf-custom :: string() ? protobuf-prefix :: string() ? json-name :: string() } type alias = { - name() ? type() ? piqi-type() ? piq-format() ? protobuf-name :: string() ? protobuf-type :: string() ? protobuf-wire-type() ? json-name :: string() } type list = { - name() - type() ? piq-format() ? protobuf-name :: string() * protobuf-custom :: string() ? protobuf-packed ? json-name :: string() } type piqi = { ? module :: word() * typedef() * import() * function() * custom-field :: word() * protobuf-custom :: string() ? protobuf-package :: string() ? file :: string() } type import = { - module :: word() ? name() } type any = { ? type :: string() ? protobuf :: binary() ? json :: string() ? xml :: string() } type function = { - name() ? input :: type() ? output :: type() ? error :: type() } type piqi-list = { * piqi() } type piq-format = | word | text type protobuf-int32 = int32() type protobuf-int64 = int64() type protobuf-wire-type = | varint | zigzag-varint | fixed32 | fixed64 | signed-varint | signed-fixed32 | signed-fixed64 | block
package piqi_org.piqi; message piqi_typedef { optional record record = 502036113; optional variant variant = 484589701; optional piqi_enum piqi_enum = 51800833; optional alias alias = 26300816; optional list list = 129178718; } enum piqi_type { piqi_type_int = 5246191; piqi_type_float = 43435420; piqi_type_bool = 18580522; piqi_type_string = 288368849; piqi_type_binary = 218872833; piqi_type_any = 4848364; } message record { required string name = 150958667; repeated field field = 9671866; optional bool piq_positional = 197354217; optional string protobuf_name = 90072013; repeated string protobuf_custom = 112352691; optional string json_name = 515275216; } message field { optional string name = 150958667; optional string type = 218690234; optional field_mode mode = 140563299 [default = required]; optional any default = 465819841; optional bool deprecated = 69402483; optional piq_format piq_format = 296833484; optional bool piq_positional = 197354217; optional string piq_alias = 434682011; optional string protobuf_name = 90072013; optional sint32 code = 29667629; optional bool protobuf_packed = 179842426; optional string json_name = 515275216; optional bool json_omit_missing = 201807079; optional string getopt_letter = 215188758; optional string getopt_doc = 442330184; } enum field_mode { required = 308449631; optional = 510570400; repeated = 274054266; } message variant { required string name = 150958667; repeated option option = 192598901; optional string protobuf_name = 90072013; repeated string protobuf_custom = 112352691; optional string json_name = 515275216; } message option { optional string name = 150958667; optional string type = 218690234; optional bool deprecated = 69402483; optional piq_format piq_format = 296833484; optional string piq_alias = 434682011; optional string protobuf_name = 90072013; optional sint32 code = 29667629; optional string json_name = 515275216; optional string getopt_letter = 215188758; optional string getopt_doc = 442330184; } message piqi_enum { required string name = 150958667; repeated option option = 192598901; optional string protobuf_name = 90072013; repeated string protobuf_custom = 112352691; optional string protobuf_prefix = 366391188; optional string json_name = 515275216; } message alias { required string name = 150958667; optional string type = 218690234; optional piqi_type piqi_type = 198318774; optional piq_format piq_format = 296833484; optional string protobuf_name = 90072013; optional string protobuf_type = 157803580; optional protobuf_wire_type protobuf_wire_type = 198202944; optional string json_name = 515275216; } message list { required string name = 150958667; required string type = 218690234; optional piq_format piq_format = 296833484; optional string protobuf_name = 90072013; repeated string protobuf_custom = 112352691; optional bool protobuf_packed = 179842426; optional string json_name = 515275216; } message piqi { optional string module = 13841580; repeated piqi_typedef piqi_typedef = 416823115; repeated import import = 142778725; repeated function function = 340962072; repeated string custom_field = 162247646; repeated string protobuf_custom = 112352691; optional string protobuf_package = 376215364; optional string file = 62639740; } message import { required string module = 13841580; optional string name = 150958667; } message any { optional string type = 218690234; optional bytes protobuf = 6461771; optional string json = 107495976; optional string xml = 5991895; } message function { required string name = 150958667; optional string input = 505267210; optional string output = 209784577; optional string error = 321506248; } message piqi_list { repeated piqi piqi = 1; } message piq_format { optional bool word = 251462090; optional bool text = 217697453; } enum protobuf_wire_type { varint = 329594984; zigzag_varint = 99211597; fixed32 = 136997651; fixed64 = 136998322; signed_varint = 441915897; signed_fixed32 = 488499298; signed_fixed64 = 488499969; block = 352089421; }
{ "piqi_type": "piqi", "module": "piqi", "typedef": [ { "alias": { "name": "bool", "piqi_type": "bool" } }, { "alias": { "name": "string", "piqi_type": "string" } }, { "alias": { "name": "binary", "piqi_type": "binary" } }, { "alias": { "name": "piqi-any", "piqi_type": "any" } }, { "alias": { "name": "int", "piqi_type": "int", "protobuf_type": "sint32", "protobuf_wire_type": "zigzag_varint" } }, { "alias": { "name": "uint", "piqi_type": "int", "protobuf_type": "uint32", "protobuf_wire_type": "varint" } }, { "alias": { "name": "int32", "piqi_type": "int", "protobuf_type": "sint32", "protobuf_wire_type": "zigzag_varint" } }, { "alias": { "name": "uint32", "piqi_type": "int", "protobuf_type": "uint32", "protobuf_wire_type": "varint" } }, { "alias": { "name": "int64", "piqi_type": "int", "protobuf_type": "sint64", "protobuf_wire_type": "zigzag_varint" } }, { "alias": { "name": "uint64", "piqi_type": "int", "protobuf_type": "uint64", "protobuf_wire_type": "varint" } }, { "alias": { "name": "float64", "piqi_type": "float", "protobuf_type": "double", "protobuf_wire_type": "fixed64" } }, { "alias": { "name": "float32", "piqi_type": "float", "protobuf_type": "float", "protobuf_wire_type": "fixed32" } }, { "alias": { "name": "int32-fixed", "type": "int32", "piqi_type": "int", "protobuf_type": "sfixed32", "protobuf_wire_type": "signed_fixed32" } }, { "alias": { "name": "uint32-fixed", "type": "uint32", "piqi_type": "int", "protobuf_type": "fixed32", "protobuf_wire_type": "fixed32" } }, { "alias": { "name": "int64-fixed", "type": "int64", "piqi_type": "int", "protobuf_type": "sfixed64", "protobuf_wire_type": "signed_fixed64" } }, { "alias": { "name": "uint64-fixed", "type": "uint64", "piqi_type": "int", "protobuf_type": "fixed64", "protobuf_wire_type": "fixed64" } }, { "alias": { "name": "float", "type": "float64", "piqi_type": "float" } }, { "alias": { "name": "word", "type": "string", "piq_format": { "word": true } } }, { "alias": { "name": "name", "type": "word" } }, { "variant": { "name": "typedef", "option": [ { "type": "record", "code": 502036113 }, { "type": "variant", "code": 484589701 }, { "type": "enum", "code": 51800833 }, { "type": "alias", "code": 26300816 }, { "type": "list", "code": 129178718 } ], "protobuf_name": "piqi_typedef" } }, { "enum": { "name": "piqi-type", "option": [ { "name": "int", "code": 5246191 }, { "name": "float", "code": 43435420 }, { "name": "bool", "code": 18580522 }, { "name": "string", "code": 288368849 }, { "name": "binary", "code": 218872833 }, { "name": "any", "code": 4848364 } ], "protobuf_prefix": "piqi_type_" } }, { "alias": { "name": "type", "type": "name" } }, { "record": { "name": "record", "field": [ { "type": "name", "mode": "required", "code": 150958667 }, { "type": "field", "mode": "repeated", "code": 9671866 }, { "name": "piq-positional", "type": "bool", "mode": "optional", "code": 197354217 }, { "name": "protobuf-name", "type": "string", "mode": "optional", "code": 90072013 }, { "name": "protobuf-custom", "type": "string", "mode": "repeated", "code": 112352691 }, { "name": "json-name", "type": "string", "mode": "optional", "code": 515275216 } ] } }, { "record": { "name": "field", "field": [ { "type": "name", "mode": "optional", "code": 150958667 }, { "type": "type", "mode": "optional", "code": 218690234 }, { "name": "mode", "type": "field-mode", "mode": "optional", "default": "required", "code": 140563299 }, { "name": "default", "type": "piqi-any", "mode": "optional", "code": 465819841 }, { "name": "deprecated", "mode": "optional", "code": 69402483 }, { "type": "piq-format", "mode": "optional", "code": 296833484 }, { "name": "piq-positional", "type": "bool", "mode": "optional", "code": 197354217 }, { "name": "piq-alias", "type": "name", "mode": "optional", "code": 434682011 }, { "name": "protobuf-name", "type": "string", "mode": "optional", "code": 90072013 }, { "name": "code", "type": "int32", "mode": "optional", "code": 29667629 }, { "name": "protobuf-packed", "mode": "optional", "code": 179842426 }, { "name": "json-name", "type": "string", "mode": "optional", "code": 515275216 }, { "name": "json-omit-missing", "type": "bool", "mode": "optional", "code": 201807079 }, { "name": "getopt-letter", "type": "word", "mode": "optional", "code": 215188758 }, { "name": "getopt-doc", "type": "string", "mode": "optional", "code": 442330184 } ] } }, { "enum": { "name": "field-mode", "option": [ { "name": "required", "code": 308449631 }, { "name": "optional", "code": 510570400 }, { "name": "repeated", "code": 274054266 } ] } }, { "record": { "name": "variant", "field": [ { "type": "name", "mode": "required", "code": 150958667 }, { "type": "option", "mode": "repeated", "code": 192598901 }, { "name": "protobuf-name", "type": "string", "mode": "optional", "code": 90072013 }, { "name": "protobuf-custom", "type": "string", "mode": "repeated", "code": 112352691 }, { "name": "json-name", "type": "string", "mode": "optional", "code": 515275216 } ] } }, { "record": { "name": "option", "field": [ { "type": "name", "mode": "optional", "code": 150958667 }, { "type": "type", "mode": "optional", "code": 218690234 }, { "name": "deprecated", "mode": "optional", "code": 69402483 }, { "type": "piq-format", "mode": "optional", "code": 296833484 }, { "name": "piq-alias", "type": "name", "mode": "optional", "code": 434682011 }, { "name": "protobuf-name", "type": "string", "mode": "optional", "code": 90072013 }, { "name": "code", "type": "int32", "mode": "optional", "code": 29667629 }, { "name": "json-name", "type": "string", "mode": "optional", "code": 515275216 }, { "name": "getopt-letter", "type": "word", "mode": "optional", "code": 215188758 }, { "name": "getopt-doc", "type": "string", "mode": "optional", "code": 442330184 } ] } }, { "record": { "name": "enum", "field": [ { "type": "name", "mode": "required", "code": 150958667 }, { "type": "option", "mode": "repeated", "code": 192598901 }, { "name": "protobuf-name", "type": "string", "mode": "optional", "code": 90072013 }, { "name": "protobuf-custom", "type": "string", "mode": "repeated", "code": 112352691 }, { "name": "protobuf-prefix", "type": "string", "mode": "optional", "code": 366391188 }, { "name": "json-name", "type": "string", "mode": "optional", "code": 515275216 } ], "protobuf_name": "piqi_enum" } }, { "record": { "name": "alias", "field": [ { "type": "name", "mode": "required", "code": 150958667 }, { "type": "type", "mode": "optional", "code": 218690234 }, { "type": "piqi-type", "mode": "optional", "code": 198318774 }, { "type": "piq-format", "mode": "optional", "code": 296833484 }, { "name": "protobuf-name", "type": "string", "mode": "optional", "code": 90072013 }, { "name": "protobuf-type", "type": "string", "mode": "optional", "code": 157803580 }, { "type": "protobuf-wire-type", "mode": "optional", "code": 198202944 }, { "name": "json-name", "type": "string", "mode": "optional", "code": 515275216 } ] } }, { "record": { "name": "list", "field": [ { "type": "name", "mode": "required", "code": 150958667 }, { "type": "type", "mode": "required", "code": 218690234 }, { "type": "piq-format", "mode": "optional", "code": 296833484 }, { "name": "protobuf-name", "type": "string", "mode": "optional", "code": 90072013 }, { "name": "protobuf-custom", "type": "string", "mode": "repeated", "code": 112352691 }, { "name": "protobuf-packed", "mode": "optional", "code": 179842426 }, { "name": "json-name", "type": "string", "mode": "optional", "code": 515275216 } ] } }, { "record": { "name": "piqi", "field": [ { "name": "module", "type": "word", "mode": "optional", "code": 13841580 }, { "type": "typedef", "mode": "repeated", "code": 416823115 }, { "type": "import", "mode": "repeated", "code": 142778725 }, { "type": "function", "mode": "repeated", "code": 340962072 }, { "name": "custom-field", "type": "word", "mode": "repeated", "code": 162247646 }, { "name": "protobuf-custom", "type": "string", "mode": "repeated", "code": 112352691 }, { "name": "protobuf-package", "type": "string", "mode": "optional", "code": 376215364 }, { "name": "file", "type": "string", "mode": "optional", "code": 62639740 } ] } }, { "record": { "name": "import", "field": [ { "name": "module", "type": "word", "mode": "required", "code": 13841580 }, { "type": "name", "mode": "optional", "code": 150958667 } ] } }, { "record": { "name": "any", "field": [ { "name": "type", "type": "string", "mode": "optional", "code": 218690234 }, { "name": "protobuf", "type": "binary", "mode": "optional", "code": 6461771 }, { "name": "json", "type": "string", "mode": "optional", "code": 107495976 }, { "name": "xml", "type": "string", "mode": "optional", "code": 5991895 } ] } }, { "record": { "name": "function", "field": [ { "type": "name", "mode": "required", "code": 150958667 }, { "name": "input", "type": "type", "mode": "optional", "code": 505267210 }, { "name": "output", "type": "type", "mode": "optional", "code": 209784577 }, { "name": "error", "type": "type", "mode": "optional", "code": 321506248 } ] } }, { "record": { "name": "piqi-list", "field": [ { "type": "piqi", "mode": "repeated", "code": 1 } ] } }, { "variant": { "name": "piq-format", "option": [ { "name": "word", "code": 251462090 }, { "name": "text", "code": 217697453 } ] } }, { "alias": { "name": "protobuf-int32", "type": "int32", "piqi_type": "int", "protobuf_type": "int32", "protobuf_wire_type": "signed_varint" } }, { "alias": { "name": "protobuf-int64", "type": "int64", "piqi_type": "int", "protobuf_type": "int64", "protobuf_wire_type": "signed_varint" } }, { "enum": { "name": "protobuf-wire-type", "option": [ { "name": "varint", "code": 329594984 }, { "name": "zigzag-varint", "code": 99211597 }, { "name": "fixed32", "code": 136997651 }, { "name": "fixed64", "code": 136998322 }, { "name": "signed-varint", "code": 441915897 }, { "name": "signed-fixed32", "code": 488499298 }, { "name": "signed-fixed64", "code": 488499969 }, { "name": "block", "code": 352089421 } ] } } ] }
<?xml version="1.0" encoding="UTF-8"?> <value> <module>piqi</module> <typedef> <alias> <name>bool</name> <piqi-type>bool</piqi-type> </alias> </typedef> <typedef> <alias> <name>string</name> <piqi-type>string</piqi-type> </alias> </typedef> <typedef> <alias> <name>binary</name> <piqi-type>binary</piqi-type> </alias> </typedef> <typedef> <alias> <name>piqi-any</name> <piqi-type>any</piqi-type> </alias> </typedef> <typedef> <alias> <name>int</name> <piqi-type>int</piqi-type> <protobuf-type>sint32</protobuf-type> <protobuf-wire-type>zigzag-varint</protobuf-wire-type> </alias> </typedef> <typedef> <alias> <name>uint</name> <piqi-type>int</piqi-type> <protobuf-type>uint32</protobuf-type> <protobuf-wire-type>varint</protobuf-wire-type> </alias> </typedef> <typedef> <alias> <name>int32</name> <piqi-type>int</piqi-type> <protobuf-type>sint32</protobuf-type> <protobuf-wire-type>zigzag-varint</protobuf-wire-type> </alias> </typedef> <typedef> <alias> <name>uint32</name> <piqi-type>int</piqi-type> <protobuf-type>uint32</protobuf-type> <protobuf-wire-type>varint</protobuf-wire-type> </alias> </typedef> <typedef> <alias> <name>int64</name> <piqi-type>int</piqi-type> <protobuf-type>sint64</protobuf-type> <protobuf-wire-type>zigzag-varint</protobuf-wire-type> </alias> </typedef> <typedef> <alias> <name>uint64</name> <piqi-type>int</piqi-type> <protobuf-type>uint64</protobuf-type> <protobuf-wire-type>varint</protobuf-wire-type> </alias> </typedef> <typedef> <alias> <name>float64</name> <piqi-type>float</piqi-type> <protobuf-type>double</protobuf-type> <protobuf-wire-type>fixed64</protobuf-wire-type> </alias> </typedef> <typedef> <alias> <name>float32</name> <piqi-type>float</piqi-type> <protobuf-type>float</protobuf-type> <protobuf-wire-type>fixed32</protobuf-wire-type> </alias> </typedef> <typedef> <alias> <name>int32-fixed</name> <type>int32</type> <piqi-type>int</piqi-type> <protobuf-type>sfixed32</protobuf-type> <protobuf-wire-type>signed-fixed32</protobuf-wire-type> </alias> </typedef> <typedef> <alias> <name>uint32-fixed</name> <type>uint32</type> <piqi-type>int</piqi-type> <protobuf-type>fixed32</protobuf-type> <protobuf-wire-type>fixed32</protobuf-wire-type> </alias> </typedef> <typedef> <alias> <name>int64-fixed</name> <type>int64</type> <piqi-type>int</piqi-type> <protobuf-type>sfixed64</protobuf-type> <protobuf-wire-type>signed-fixed64</protobuf-wire-type> </alias> </typedef> <typedef> <alias> <name>uint64-fixed</name> <type>uint64</type> <piqi-type>int</piqi-type> <protobuf-type>fixed64</protobuf-type> <protobuf-wire-type>fixed64</protobuf-wire-type> </alias> </typedef> <typedef> <alias> <name>float</name> <type>float64</type> <piqi-type>float</piqi-type> </alias> </typedef> <typedef> <alias> <name>word</name> <type>string</type> <piq-format> <word/> </piq-format> </alias> </typedef> <typedef> <alias> <name>name</name> <type>word</type> </alias> </typedef> <typedef> <variant> <name>typedef</name> <option> <type>record</type> <code>502036113</code> </option> <option> <type>variant</type> <code>484589701</code> </option> <option> <type>enum</type> <code>51800833</code> </option> <option> <type>alias</type> <code>26300816</code> </option> <option> <type>list</type> <code>129178718</code> </option> <protobuf-name>piqi_typedef</protobuf-name> </variant> </typedef> <typedef> <enum> <name>piqi-type</name> <option> <name>int</name> <code>5246191</code> </option> <option> <name>float</name> <code>43435420</code> </option> <option> <name>bool</name> <code>18580522</code> </option> <option> <name>string</name> <code>288368849</code> </option> <option> <name>binary</name> <code>218872833</code> </option> <option> <name>any</name> <code>4848364</code> </option> <protobuf-prefix>piqi_type_</protobuf-prefix> </enum> </typedef> <typedef> <alias> <name>type</name> <type>name</type> </alias> </typedef> <typedef> <record> <name>record</name> <field> <type>name</type> <mode>required</mode> <code>150958667</code> </field> <field> <type>field</type> <mode>repeated</mode> <code>9671866</code> </field> <field> <name>piq-positional</name> <type>bool</type> <mode>optional</mode> <code>197354217</code> </field> <field> <name>protobuf-name</name> <type>string</type> <mode>optional</mode> <code>90072013</code> </field> <field> <name>protobuf-custom</name> <type>string</type> <mode>repeated</mode> <code>112352691</code> </field> <field> <name>json-name</name> <type>string</type> <mode>optional</mode> <code>515275216</code> </field> </record> </typedef> <typedef> <record> <name>field</name> <field> <type>name</type> <mode>optional</mode> <code>150958667</code> </field> <field> <type>type</type> <mode>optional</mode> <code>218690234</code> </field> <field> <name>mode</name> <type>field-mode</type> <mode>optional</mode> <default>required</default> <code>140563299</code> </field> <field> <name>default</name> <type>piqi-any</type> <mode>optional</mode> <code>465819841</code> </field> <field> <name>deprecated</name> <mode>optional</mode> <code>69402483</code> </field> <field> <type>piq-format</type> <mode>optional</mode> <code>296833484</code> </field> <field> <name>piq-positional</name> <type>bool</type> <mode>optional</mode> <code>197354217</code> </field> <field> <name>piq-alias</name> <type>name</type> <mode>optional</mode> <code>434682011</code> </field> <field> <name>protobuf-name</name> <type>string</type> <mode>optional</mode> <code>90072013</code> </field> <field> <name>code</name> <type>int32</type> <mode>optional</mode> <code>29667629</code> </field> <field> <name>protobuf-packed</name> <mode>optional</mode> <code>179842426</code> </field> <field> <name>json-name</name> <type>string</type> <mode>optional</mode> <code>515275216</code> </field> <field> <name>json-omit-missing</name> <type>bool</type> <mode>optional</mode> <code>201807079</code> </field> <field> <name>getopt-letter</name> <type>word</type> <mode>optional</mode> <code>215188758</code> </field> <field> <name>getopt-doc</name> <type>string</type> <mode>optional</mode> <code>442330184</code> </field> </record> </typedef> <typedef> <enum> <name>field-mode</name> <option> <name>required</name> <code>308449631</code> </option> <option> <name>optional</name> <code>510570400</code> </option> <option> <name>repeated</name> <code>274054266</code> </option> </enum> </typedef> <typedef> <record> <name>variant</name> <field> <type>name</type> <mode>required</mode> <code>150958667</code> </field> <field> <type>option</type> <mode>repeated</mode> <code>192598901</code> </field> <field> <name>protobuf-name</name> <type>string</type> <mode>optional</mode> <code>90072013</code> </field> <field> <name>protobuf-custom</name> <type>string</type> <mode>repeated</mode> <code>112352691</code> </field> <field> <name>json-name</name> <type>string</type> <mode>optional</mode> <code>515275216</code> </field> </record> </typedef> <typedef> <record> <name>option</name> <field> <type>name</type> <mode>optional</mode> <code>150958667</code> </field> <field> <type>type</type> <mode>optional</mode> <code>218690234</code> </field> <field> <name>deprecated</name> <mode>optional</mode> <code>69402483</code> </field> <field> <type>piq-format</type> <mode>optional</mode> <code>296833484</code> </field> <field> <name>piq-alias</name> <type>name</type> <mode>optional</mode> <code>434682011</code> </field> <field> <name>protobuf-name</name> <type>string</type> <mode>optional</mode> <code>90072013</code> </field> <field> <name>code</name> <type>int32</type> <mode>optional</mode> <code>29667629</code> </field> <field> <name>json-name</name> <type>string</type> <mode>optional</mode> <code>515275216</code> </field> <field> <name>getopt-letter</name> <type>word</type> <mode>optional</mode> <code>215188758</code> </field> <field> <name>getopt-doc</name> <type>string</type> <mode>optional</mode> <code>442330184</code> </field> </record> </typedef> <typedef> <record> <name>enum</name> <field> <type>name</type> <mode>required</mode> <code>150958667</code> </field> <field> <type>option</type> <mode>repeated</mode> <code>192598901</code> </field> <field> <name>protobuf-name</name> <type>string</type> <mode>optional</mode> <code>90072013</code> </field> <field> <name>protobuf-custom</name> <type>string</type> <mode>repeated</mode> <code>112352691</code> </field> <field> <name>protobuf-prefix</name> <type>string</type> <mode>optional</mode> <code>366391188</code> </field> <field> <name>json-name</name> <type>string</type> <mode>optional</mode> <code>515275216</code> </field> <protobuf-name>piqi_enum</protobuf-name> </record> </typedef> <typedef> <record> <name>alias</name> <field> <type>name</type> <mode>required</mode> <code>150958667</code> </field> <field> <type>type</type> <mode>optional</mode> <code>218690234</code> </field> <field> <type>piqi-type</type> <mode>optional</mode> <code>198318774</code> </field> <field> <type>piq-format</type> <mode>optional</mode> <code>296833484</code> </field> <field> <name>protobuf-name</name> <type>string</type> <mode>optional</mode> <code>90072013</code> </field> <field> <name>protobuf-type</name> <type>string</type> <mode>optional</mode> <code>157803580</code> </field> <field> <type>protobuf-wire-type</type> <mode>optional</mode> <code>198202944</code> </field> <field> <name>json-name</name> <type>string</type> <mode>optional</mode> <code>515275216</code> </field> </record> </typedef> <typedef> <record> <name>list</name> <field> <type>name</type> <mode>required</mode> <code>150958667</code> </field> <field> <type>type</type> <mode>required</mode> <code>218690234</code> </field> <field> <type>piq-format</type> <mode>optional</mode> <code>296833484</code> </field> <field> <name>protobuf-name</name> <type>string</type> <mode>optional</mode> <code>90072013</code> </field> <field> <name>protobuf-custom</name> <type>string</type> <mode>repeated</mode> <code>112352691</code> </field> <field> <name>protobuf-packed</name> <mode>optional</mode> <code>179842426</code> </field> <field> <name>json-name</name> <type>string</type> <mode>optional</mode> <code>515275216</code> </field> </record> </typedef> <typedef> <record> <name>piqi</name> <field> <name>module</name> <type>word</type> <mode>optional</mode> <code>13841580</code> </field> <field> <type>typedef</type> <mode>repeated</mode> <code>416823115</code> </field> <field> <type>import</type> <mode>repeated</mode> <code>142778725</code> </field> <field> <type>function</type> <mode>repeated</mode> <code>340962072</code> </field> <field> <name>custom-field</name> <type>word</type> <mode>repeated</mode> <code>162247646</code> </field> <field> <name>protobuf-custom</name> <type>string</type> <mode>repeated</mode> <code>112352691</code> </field> <field> <name>protobuf-package</name> <type>string</type> <mode>optional</mode> <code>376215364</code> </field> <field> <name>file</name> <type>string</type> <mode>optional</mode> <code>62639740</code> </field> </record> </typedef> <typedef> <record> <name>import</name> <field> <name>module</name> <type>word</type> <mode>required</mode> <code>13841580</code> </field> <field> <type>name</type> <mode>optional</mode> <code>150958667</code> </field> </record> </typedef> <typedef> <record> <name>any</name> <field> <name>type</name> <type>string</type> <mode>optional</mode> <code>218690234</code> </field> <field> <name>protobuf</name> <type>binary</type> <mode>optional</mode> <code>6461771</code> </field> <field> <name>json</name> <type>string</type> <mode>optional</mode> <code>107495976</code> </field> <field> <name>xml</name> <type>string</type> <mode>optional</mode> <code>5991895</code> </field> </record> </typedef> <typedef> <record> <name>function</name> <field> <type>name</type> <mode>required</mode> <code>150958667</code> </field> <field> <name>input</name> <type>type</type> <mode>optional</mode> <code>505267210</code> </field> <field> <name>output</name> <type>type</type> <mode>optional</mode> <code>209784577</code> </field> <field> <name>error</name> <type>type</type> <mode>optional</mode> <code>321506248</code> </field> </record> </typedef> <typedef> <record> <name>piqi-list</name> <field> <type>piqi</type> <mode>repeated</mode> <code>1</code> </field> </record> </typedef> <typedef> <variant> <name>piq-format</name> <option> <name>word</name> <code>251462090</code> </option> <option> <name>text</name> <code>217697453</code> </option> </variant> </typedef> <typedef> <alias> <name>protobuf-int32</name> <type>int32</type> <piqi-type>int</piqi-type> <protobuf-type>int32</protobuf-type> <protobuf-wire-type>signed-varint</protobuf-wire-type> </alias> </typedef> <typedef> <alias> <name>protobuf-int64</name> <type>int64</type> <piqi-type>int</piqi-type> <protobuf-type>int64</protobuf-type> <protobuf-wire-type>signed-varint</protobuf-wire-type> </alias> </typedef> <typedef> <enum> <name>protobuf-wire-type</name> <option> <name>varint</name> <code>329594984</code> </option> <option> <name>zigzag-varint</name> <code>99211597</code> </option> <option> <name>fixed32</name> <code>136997651</code> </option> <option> <name>fixed64</name> <code>136998322</code> </option> <option> <name>signed-varint</name> <code>441915897</code> </option> <option> <name>signed-fixed32</name> <code>488499298</code> </option> <option> <name>signed-fixed64</name> <code>488499969</code> </option> <option> <name>block</name> <code>352089421</code> </option> </enum> </typedef> </value>
Parts of the Piqi self-definition
% Piq-specific extensions for Piqi self-spec % % This file defines some extensions to the base Piqi specification enabling % properties specific to the Piq data representation format % % Copyright 2009, 2010, 2011, 2012, 2013 Anton Lavrik .include [ .module piqi ] .extend [ (.typedef alias list field option) .with.field [ .type piq-format .optional ] ] .extend [ (.typedef field record) .with.field [ % allows to control explicitly whether to accept a field if it is specified % without a label (arguments without a label are called "positional") % % the default behavior is to allow fields of primitive types to be % positional but require labels for records and lists % % fields inherit record-level setting when present, unless overridden by % per-field settings .name piq-positional .type bool .optional ] ] .extend [ (.typedef field option) .with.field [ % this allows to specify an alternative name a field or an option; used % only when parsing Piq; Field names specified via .name or derived from % .type take precedence over names defined using .piq-alias % % the ability to use an alternative name is useful when Piq is used as % as a syntax notation for DSLs .name piq-alias .type name .optional ] ] % Piq-specific alternative representation format of Piqi types .variant [ .name piq-format % representation of string values .option [ % NOTE: if a string value can not be represented as single unquoted % word, it will be pepresented as string liternal .name word ] .option [ .name text ] ]
include piqi type piq-format = | word | text extend alias list field option ? piq-format() extend field record ? piq-positional :: bool() extend field option ? piq-alias :: name()
% JSON-specific extensions for Piqi self-spec % % This file defines some extensions to base Piqi specification enabling fields % specific to JSON % % Copyright 2009, 2010, 2011, 2012, 2013 Anton Lavrik .include [ .module piqi ] .extend [ (.typedef record field variant option enum alias list) .with.field [ .name json-name .type string .optional ] ] .extend [ .typedef field .with.field [ % whether to omit missing fields from JSON output that would otherwise % be represented as JSON NULL for missing optional and [] for missing % repeated fields; if not specified, the default behavior is determined % by the json_omit_missing_fields run-time setting which is, in turn, % set to true by default .name json-omit-missing .type bool .optional ] ]
include piqi extend record field variant option enum alias list ? json-name :: string() extend field ? json-omit-missing :: bool()
% Google Protocol Buffers extension for Piqi self-spec % % This file defines two kinds of extensions to the base Piqi self-specification: % % - properties related to Protocol Buffer's .proto files that are used by % "piqi to-proto" command % % - properties related to binary binary Google Protocol Buffers format also % known as wire format % % % The document describing Protocol Buffers binary "wire" format: % % https://developers.google.com/protocol-buffers/docs/encoding % % % Copyright 2009, 2010, 2011, 2012, 2013 Anton Lavrik .protobuf-package "piqi_org.piqi" .include [ .module piqi ] % % mapping between Piqi primitive and Protobuf types % .extend [ .typedef int .with.protobuf-type "sint32" .with.protobuf-wire-type.zigzag-varint ] .extend [ .typedef uint .with.protobuf-type "uint32" .with.protobuf-wire-type.varint ] .extend [ .typedef int32 .with.protobuf-type "sint32" .with.protobuf-wire-type.zigzag-varint ] .extend [ .typedef uint32 .with.protobuf-type "uint32" .with.protobuf-wire-type.varint ] .extend [ .typedef int64 .with.protobuf-type "sint64" .with.protobuf-wire-type.zigzag-varint ] .extend [ .typedef uint64 .with.protobuf-type "uint64" .with.protobuf-wire-type.varint ] .extend [ .typedef int32-fixed .with.protobuf-type "sfixed32" .with.protobuf-wire-type.signed-fixed32 ] .extend [ .typedef uint32-fixed .with.protobuf-type "fixed32" .with.protobuf-wire-type.fixed32 ] .extend [ .typedef int64-fixed .with.protobuf-type "sfixed64" .with.protobuf-wire-type.signed-fixed64 ] .extend [ .typedef uint64-fixed .with.protobuf-type "fixed64" .with.protobuf-wire-type.fixed64 ] .extend [ .typedef float64 .with.protobuf-type "double" .with.protobuf-wire-type.fixed64 ] .extend [ .typedef float32 .with.protobuf-type "float" .with.protobuf-wire-type.fixed32 ] % These two types are specific to Protocol Buffers. They have the same % on-the-wire representation as uint32/64. The difference is that they allow % negative integers (which representation is very inefficient requiring many % bytes for small absolue values). .alias [ .name protobuf-int32 .type int32 .piqi-type.int .protobuf-type "int32" .protobuf-wire-type.signed-varint ] .alias [ .name protobuf-int64 .type int64 .piqi-type.int .protobuf-type "int64" .protobuf-wire-type.signed-varint ] % % properties specific to .piqi to .proto conversion % .extend [ (.typedef record field variant option enum alias list) .with.field [ .name protobuf-name .type string .optional ] ] .extend [ (.typedef piqi record variant list enum) .with.field [ % arbitrary string that will be included in .proto message and enum % definitions as a result of .piqi -> .proto conversion .name protobuf-custom .type string .repeated ] ] .extend [ .typedef piqi .with.field [ .name protobuf-package .type string .optional ] ] .extend [ .typedef alias .with.field [ .name protobuf-type .type string .optional ] ] .extend [ .typedef enum .with.field [ % prefix each enum option's name with the specified string; it helps to % deal with the fact that enum doesn't form a C++ namespace meaning that % enum constants are defined directly in the outer namespace; it was % announced that this problem will be fixed in protobuf-2.5 .name protobuf-prefix .type string .optional ] ] % % definitions and extensions related to how data is represented on the wire % .enum [ .name protobuf-wire-type .option [ varint ] .option [ zigzag-varint ] .option [ fixed32 ] .option [ fixed64 ] .option [ signed-varint ] .option [ signed-fixed32 ] .option [ signed-fixed64 ] .option [ block ] ] .extend [ .typedef alias .with.field [ .type protobuf-wire-type .optional ] ] .extend [ (.typedef field option) .with.field [ % for fields and variant options: unique integer field id % from (1 -- (2^29-1)) range used for identifying individual fields and % options encoded in wire format % % for enum options: non-unique integer constant from a full int32 range .name code .type int32 .optional ] ] .extend [ (.typedef field list) % indication that Protobuf "packed" format is used for repeated fields or % list elements .with.field [ .name protobuf-packed .optional ] ]
include piqi type protobuf-int32 = int32() type protobuf-int64 = int64() type protobuf-wire-type = | varint | zigzag-varint | fixed32 | fixed64 | signed-varint | signed-fixed32 | signed-fixed64 | block extend record field variant option enum alias list ? protobuf-name :: string() extend piqi record variant list enum * protobuf-custom :: string() extend piqi ? protobuf-package :: string() extend alias ? protobuf-type :: string() extend enum ? protobuf-prefix :: string() extend alias ? protobuf-wire-type() extend field option ? code :: int32() extend field list ? protobuf-packed
% Piqi extensions for getopt % % This file defines extensions to the base Piqi self-specification for % command-line arguement parsing. % % % Copyright 2009, 2010, 2011, 2012, 2013 Anton Lavrik .include [ .module piqi ] % a single-letter getopt option or flag .extend [ (.typedef field option) .with.field [ .name getopt-letter .type word .optional ] .with.field [ .name getopt-doc .type string .optional ] ]
include piqi extend field option ? getopt-letter :: word() ? getopt-doc :: string()
The Piqi language
% Piqi language specification % % This file contains specificaiton for the Piqi language which is an extension % of Piqi-spec (piqi.piqi). % % Basically, Piqi-lang = Piqi-spec + includes, extensions and typedefs embeeded % in function parameters. % % Copyright 2009, 2010, 2011, 2012, 2013 Anton Lavrik .include [ .module piqi ] % The Piqi language, in addition to the Piqi-spec, has includes and extensions .extend [ .typedef piqi .with.field [ .type include .repeated ] .with.field [ .type extend .repeated ] ] .record [ .name include .field [ .name module .type word ] ] .extend [ (.field function.input function.output function.error) .override .with.type function-param ] .extend [ (.field record.name variant.name enum.name list.name alias.name) .override .with (.mode.optional) ] .variant [ .name function-param .option [ .type name ] .option [ .type record ] .option [ .type variant ] .option [ .type enum ] .option [ .type list ] .option [ % note: although anonymous alias doesn't make a lot of sense, we need it % for completeness; there's only one use case: when somebody wants to % define additional properties inside such alias (e.g. piq-format) .type alias ] ] .record [ .name extend .field [ .name what .type extend-target .repeated % several typedefs can be specified as an extension ] .field [ % whether specified extensions override existing elements .name override .optional ] .field [ .name with .type piqi-any % an actual extension object .repeated ] .field [ % this way of specifying extensions will be deprecated soon .type piqi-any % an actual extension object .repeated .deprecated ] ] .variant [ .name extend-target .option [ .name typedef .type name ] .option [ % previous name for "typedef"; kept for backwards compatibility; will be % fully deprecated in future Piqi versions; NOTE: typedef takes % precedence over it .type name .deprecated ] .option [ .name field .type name ] .option [ .name option .type name ] .option [ .name import .type name ] .option [ .name function .type name ] ] % % renamed and deprecated Protobuf fields % .extend [ (.typedef piqi record variant list enum) .with.field [ % same as protobuf-custom in Piqi-0.5.* .name proto-custom .type string .repeated .deprecated ] ] .extend [ (.typedef record field variant option enum alias list) .with.field [ % same as protobuf-name in Piqi-0.5.* .name proto-name .type string .optional .deprecated ] ] .extend [ .typedef piqi .with.field [ % same as protobuf-package in Piqi-0.5.* .name proto-package .type string .optional .deprecated ] ] .extend [ (.typedef field list) .with.field [ % same as protobuf-packed in Piqi-0.5.* .name wire-packed .optional .deprecated ] ]
include piqi type include = { - module :: word() } type function-param = | name() | record() | variant() | enum() | list() | alias() type extend = { * what :: extend-target() ? override * with :: piqi-any() * piqi-any() } type extend-target = | typedef :: name() | name() | field :: name() | option :: name() | import :: name() | function :: name() extend piqi * include() * extend() extend piqi record variant list enum * proto-custom :: string() extend record field variant option enum alias list ? proto-name :: string() extend piqi ? proto-package :: string() extend field list ? wire-packed