Safe Haskell | None |
---|---|
Language | Haskell2010 |
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).
- type Env n = Map Text (Definition n)
- data Definition n
- = Message (MessageInfo n)
- | Enum (EnumInfo n)
- data MessageInfo n = MessageInfo {}
- data FieldInfo = FieldInfo {}
- data OneofInfo = OneofInfo {}
- data OneofCase = OneofCase {}
- data FieldName = FieldName {}
- data Symbol
- nameFromSymbol :: Symbol -> Name
- promoteSymbol :: Symbol -> Type
- data EnumInfo n = EnumInfo {
- enumName :: n
- enumDescriptor :: EnumDescriptorProto
- enumValues :: [EnumValueInfo n]
- data EnumValueInfo n = EnumValueInfo {}
- qualifyEnv :: ModuleName -> Env Name -> Env QName
- unqualifyEnv :: Env Name -> Env QName
- collectDefinitions :: FileDescriptorProto -> Env Name
- definedFieldType :: FieldDescriptorProto -> Env QName -> Definition QName
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 MessageInfo n Source #
All the information needed to define or use a proto message type.
MessageInfo | |
|
Information about a single field of a proto message.
OneofInfo | |
|
OneofCase | |
|
FieldName | |
|
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
.
nameFromSymbol :: Symbol -> Name Source #
promoteSymbol :: Symbol -> Type Source #
Construct a promoted, type-level string.
All the information needed to define or use a proto enum type.
EnumInfo | |
|
qualifyEnv :: ModuleName -> Env Name -> Env QName Source #
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).