proto-lens-protoc-0.5.0.0: Protocol buffer compiler for the proto-lens library.

Safe HaskellNone
LanguageHaskell2010

Data.ProtoLens.Compiler.Definitions

Description

This module takes care of collecting all the definitions in a .proto file and assigning Haskell names to all of the defined things (messages, enums and field names).

Synopsis

Documentation

type Env n = Map Text (Definition n) Source #

Env contains a mapping of proto names (as specified in the .proto file) to Haskell names. The keys are fully-qualified names, for example, ".package.Message.Submessage". (The protocol_compiler tool emits all message field types in this form, even if they refer to local definitions.)

The type n can be either a Name (when talking about definitions within the current file) or a (qualified) QName (when talking about definitions either from this or another file).

data Definition n Source #

Constructors

Message (MessageInfo n) 
Enum (EnumInfo n) 
Instances
Functor Definition Source # 
Instance details

Defined in Data.ProtoLens.Compiler.Definitions

Methods

fmap :: (a -> b) -> Definition a -> Definition b #

(<$) :: a -> Definition b -> Definition a #

data MessageInfo n Source #

All the information needed to define or use a proto message type.

Constructors

MessageInfo 

Fields

Instances
Functor MessageInfo Source # 
Instance details

Defined in Data.ProtoLens.Compiler.Definitions

Methods

fmap :: (a -> b) -> MessageInfo a -> MessageInfo b #

(<$) :: a -> MessageInfo b -> MessageInfo a #

data PlainFieldInfo Source #

Information about a single field of a proto message, associated with how it is stored.

data FieldInfo Source #

Information about a single field of a proto message.

data FieldKind Source #

How a field is stored inside of the proto message.

Constructors

RequiredField

A proto2 required field. Stored internally as a value.

OptionalValueField

A proto3 optional scalar field. Stored internally as a value, and defaults to corresponding instance of fieldDefault.

OptionalMaybeField

An optional field where the "unset" and "defaulT" values are distinguishable. Stored internally as a Maybe. In particular: proto2 optional fields, proto3 messages, and "oneof" fields.

RepeatedField FieldPacking

A field containing a sequence of values. Stored internally as either a list or a map, depending on whether the field's FieldDescriptorProto of the field has options.map_entry set.

MapField MapEntryInfo

A field containing a map of keys to values. Serialized as a repeated field of an autogenerated "entry" proto type, each instance of which contains a key-value pair.

data FieldPacking Source #

Constructors

NotPackable

Cannot be packed (e.g., strings or messages).

Packable

Can be decoded as packed, but should not be not be encoded as packed by default.

Packed

Can be decoded as packed, and should be encoded as packed by default.

data MapEntryInfo Source #

The "entry" type for a map field is a proto message, autogenerated by protoc, that has two fields: a key and a value. The map field should be serialized like a repeated field of the entry messages.

Constructors

MapEntryInfo 

Fields

data OneofInfo Source #

Constructors

OneofInfo 

Fields

data OneofCase Source #

Constructors

OneofCase 

Fields

data FieldName Source #

Constructors

FieldName 

Fields

  • overloadedName :: Symbol

    The overloaded name of lenses that access this field. For example, if the field is called "foo_bar" in the .proto then overloadedName == "fooBar" and we might generate fooBar and/or maybe'fooBar lenses to access the data.

    May be shared between two different message data types in the same module.

  • haskellRecordFieldName :: Name

    The Haskell name of this internal record field; for example, "_FooBarbaz. Unique within each module.

data Symbol Source #

A string that refers to the name (in Haskell) of a lens that accesses a field.

For example, in the signature of the overloaded lens

    foo :: HasLens "foo" ... => Lens ...

a Symbol is used to construct both the type-level argument to HasLens and the name of the function foo.

promoteSymbol :: Symbol -> Type Source #

Construct a promoted, type-level string.

data EnumInfo n Source #

All the information needed to define or use a proto enum type.

Instances
Functor EnumInfo Source # 
Instance details

Defined in Data.ProtoLens.Compiler.Definitions

Methods

fmap :: (a -> b) -> EnumInfo a -> EnumInfo b #

(<$) :: a -> EnumInfo b -> EnumInfo a #

data EnumValueInfo n Source #

Information about a single value case of a proto enum.

Constructors

EnumValueInfo 

Fields

Instances
Functor EnumValueInfo Source # 
Instance details

Defined in Data.ProtoLens.Compiler.Definitions

Methods

fmap :: (a -> b) -> EnumValueInfo a -> EnumValueInfo b #

(<$) :: a -> EnumValueInfo b -> EnumValueInfo a #

data EnumUnrecognizedInfo Source #

Information about the "unrecognized" case of an enum.

collectDefinitions :: FileDescriptorProto -> Env Name Source #

Collect all the definitions in the given file (including definitions nested in other messages), and assign Haskell names to them.

definedFieldType :: FieldDescriptorProto -> Env QName -> Definition QName Source #

Look up the Haskell name for the type of a given field (message or enum).

definedType :: Text -> Env QName -> Definition QName Source #

Look up the Haskell name for the type of a given type.