proto-lens-protoc-0.3.1.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) #

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 #

Constructors

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

Defined in Data.ProtoLens.Compiler.Definitions

Methods

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

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

data MessageInfo n #

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

Constructors

MessageInfo 

Fields

Instances
Functor MessageInfo # 
Instance details

Defined in Data.ProtoLens.Compiler.Definitions

Methods

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

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

data FieldInfo #

Information about a single field of a proto message.

data OneofInfo #

Constructors

OneofInfo 

Fields

data OneofCase #

Constructors

OneofCase 

Fields

data FieldName #

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 #

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.

Instances
Eq Symbol # 
Instance details

Defined in Data.ProtoLens.Compiler.Definitions

Methods

(==) :: Symbol -> Symbol -> Bool #

(/=) :: Symbol -> Symbol -> Bool #

Ord Symbol # 
Instance details

Defined in Data.ProtoLens.Compiler.Definitions

IsString Symbol # 
Instance details

Defined in Data.ProtoLens.Compiler.Definitions

Methods

fromString :: String -> Symbol #

Semigroup Symbol # 
Instance details

Defined in Data.ProtoLens.Compiler.Definitions

Monoid Symbol # 
Instance details

Defined in Data.ProtoLens.Compiler.Definitions

promoteSymbol :: Symbol -> Type #

Construct a promoted, type-level string.

data EnumInfo n #

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

Instances
Functor EnumInfo # 
Instance details

Defined in Data.ProtoLens.Compiler.Definitions

Methods

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

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

data EnumValueInfo n #

Information about a single value case of a proto enum.

Constructors

EnumValueInfo 

Fields

Instances
Functor EnumValueInfo # 
Instance details

Defined in Data.ProtoLens.Compiler.Definitions

Methods

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

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

collectDefinitions :: FileDescriptorProto -> Env Name #

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 #

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

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

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