proto-lens-0.3.1.0: A lens-based implementation of protocol buffers in Haskell.

Safe HaskellNone
LanguageHaskell2010

Data.ProtoLens.Message

Contents

Description

Datatypes for reflection of protocol buffer messages.

Synopsis

Reflection of Messages

class Default msg => Message msg where #

Every protocol buffer is an instance of Message. This class enables serialization by providing reflection of all of the fields that may be used by this type.

Minimal complete definition

messageName, fieldsByTag, unknownFields

Methods

messageName :: Proxy msg -> Text #

A unique identifier for this type, of the format "packagename.messagename".

fieldsByTag :: Map Tag (FieldDescriptor msg) #

The fields of the proto, indexed by their (integer) tag.

fieldsByTextFormatName :: Map String (FieldDescriptor msg) #

This map is keyed by the name of the field used for text format protos. This is just the field name for every field except for group fields, which use their Message type name in text protos instead of their field name. For example, "optional group Foo" has the field name "foo" but in this map it is stored with the key Foo.

unknownFields :: Lens' msg FieldSet #

Access the unknown fields of a Message.

Instances
Message UninterpretedOption'NamePart # 
Instance details

Defined in Proto.Google.Protobuf.Descriptor

Message UninterpretedOption # 
Instance details

Defined in Proto.Google.Protobuf.Descriptor

Message SourceCodeInfo'Location # 
Instance details

Defined in Proto.Google.Protobuf.Descriptor

Message SourceCodeInfo # 
Instance details

Defined in Proto.Google.Protobuf.Descriptor

Message ServiceOptions # 
Instance details

Defined in Proto.Google.Protobuf.Descriptor

Message ServiceDescriptorProto # 
Instance details

Defined in Proto.Google.Protobuf.Descriptor

Message OneofDescriptorProto # 
Instance details

Defined in Proto.Google.Protobuf.Descriptor

Message MethodOptions # 
Instance details

Defined in Proto.Google.Protobuf.Descriptor

Message MethodDescriptorProto # 
Instance details

Defined in Proto.Google.Protobuf.Descriptor

Message MessageOptions # 
Instance details

Defined in Proto.Google.Protobuf.Descriptor

Message GeneratedCodeInfo'Annotation # 
Instance details

Defined in Proto.Google.Protobuf.Descriptor

Message GeneratedCodeInfo # 
Instance details

Defined in Proto.Google.Protobuf.Descriptor

Message FileOptions # 
Instance details

Defined in Proto.Google.Protobuf.Descriptor

Message FileDescriptorSet # 
Instance details

Defined in Proto.Google.Protobuf.Descriptor

Message FileDescriptorProto # 
Instance details

Defined in Proto.Google.Protobuf.Descriptor

Message FieldOptions # 
Instance details

Defined in Proto.Google.Protobuf.Descriptor

Message FieldDescriptorProto # 
Instance details

Defined in Proto.Google.Protobuf.Descriptor

Message EnumValueOptions # 
Instance details

Defined in Proto.Google.Protobuf.Descriptor

Message EnumValueDescriptorProto # 
Instance details

Defined in Proto.Google.Protobuf.Descriptor

Message EnumOptions # 
Instance details

Defined in Proto.Google.Protobuf.Descriptor

Message EnumDescriptorProto # 
Instance details

Defined in Proto.Google.Protobuf.Descriptor

Message DescriptorProto'ReservedRange # 
Instance details

Defined in Proto.Google.Protobuf.Descriptor

Message DescriptorProto'ExtensionRange # 
Instance details

Defined in Proto.Google.Protobuf.Descriptor

Message DescriptorProto # 
Instance details

Defined in Proto.Google.Protobuf.Descriptor

Message CodeGeneratorResponse'File # 
Instance details

Defined in Proto.Google.Protobuf.Compiler.Plugin

Message CodeGeneratorResponse # 
Instance details

Defined in Proto.Google.Protobuf.Compiler.Plugin

Message CodeGeneratorRequest # 
Instance details

Defined in Proto.Google.Protobuf.Compiler.Plugin

newtype Tag #

A tag that identifies a particular field of the message when converting to/from the wire format.

Constructors

Tag 

Fields

Instances
Eq Tag # 
Instance details

Defined in Data.ProtoLens.Encoding.Wire

Methods

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

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

Num Tag # 
Instance details

Defined in Data.ProtoLens.Encoding.Wire

Methods

(+) :: Tag -> Tag -> Tag #

(-) :: Tag -> Tag -> Tag #

(*) :: Tag -> Tag -> Tag #

negate :: Tag -> Tag #

abs :: Tag -> Tag #

signum :: Tag -> Tag #

fromInteger :: Integer -> Tag #

Ord Tag # 
Instance details

Defined in Data.ProtoLens.Encoding.Wire

Methods

compare :: Tag -> Tag -> Ordering #

(<) :: Tag -> Tag -> Bool #

(<=) :: Tag -> Tag -> Bool #

(>) :: Tag -> Tag -> Bool #

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

max :: Tag -> Tag -> Tag #

min :: Tag -> Tag -> Tag #

Show Tag # 
Instance details

Defined in Data.ProtoLens.Encoding.Wire

Methods

showsPrec :: Int -> Tag -> ShowS #

show :: Tag -> String #

showList :: [Tag] -> ShowS #

NFData Tag # 
Instance details

Defined in Data.ProtoLens.Encoding.Wire

Methods

rnf :: Tag -> () #

data FieldDescriptor msg where #

A description of a specific field of a protocol buffer.

The String parameter is the name of the field from the .proto file, as used in TextFormat, with the same behavior for groups as fieldsByTextFormatName. (Haddock doesn't support per-argument docs for GADTs.)

Constructors

FieldDescriptor :: String -> FieldTypeDescriptor value -> FieldAccessor msg value -> FieldDescriptor msg 

fieldDescriptorName :: FieldDescriptor msg -> String #

The original name of the field in the .proto file.

isRequired :: FieldDescriptor msg -> Bool #

Whether the given field is required. Specifically, if its FieldAccessor is a Required PlainField.

data FieldAccessor msg value where #

A Lens for accessing the value of an individual field in a protocol buffer message.

Constructors

PlainField :: WireDefault value -> Lens' msg value -> FieldAccessor msg value 
OptionalField :: Lens' msg (Maybe value) -> FieldAccessor msg value 
RepeatedField :: Packing -> Lens' msg [value] -> FieldAccessor msg value 
MapField :: (Ord key, Message entry) => Lens' entry key -> Lens' entry value -> Lens' msg (Map key value) -> FieldAccessor msg entry 

data WireDefault value where #

The default value (if any) for a PlainField on the wire.

Constructors

Required :: WireDefault value 
Optional :: (FieldDefault value, Eq value) => WireDefault value 

data Packing #

How a given repeated field is transmitted on the wire format.

Constructors

Packed 
Unpacked 

data FieldTypeDescriptor value where #

A description of the type of a given field value.

Instances
Show (FieldTypeDescriptor value) # 
Instance details

Defined in Data.ProtoLens.Message

class FieldDefault value where #

A proto3 field type with an implicit default value.

This is distinct from Default to avoid orphan instances, and because Bool doesn't necessarily have a good Default instance for general usage.

Minimal complete definition

fieldDefault

Methods

fieldDefault :: value #

Instances
FieldDefault Bool # 
Instance details

Defined in Data.ProtoLens.Message

Methods

fieldDefault :: Bool #

FieldDefault Double # 
Instance details

Defined in Data.ProtoLens.Message

FieldDefault Float # 
Instance details

Defined in Data.ProtoLens.Message

Methods

fieldDefault :: Float #

FieldDefault Int32 # 
Instance details

Defined in Data.ProtoLens.Message

Methods

fieldDefault :: Int32 #

FieldDefault Int64 # 
Instance details

Defined in Data.ProtoLens.Message

Methods

fieldDefault :: Int64 #

FieldDefault Word32 # 
Instance details

Defined in Data.ProtoLens.Message

FieldDefault Word64 # 
Instance details

Defined in Data.ProtoLens.Message

FieldDefault ByteString # 
Instance details

Defined in Data.ProtoLens.Message

FieldDefault Text # 
Instance details

Defined in Data.ProtoLens.Message

Methods

fieldDefault :: Text #

FieldDefault FileOptions'OptimizeMode # 
Instance details

Defined in Proto.Google.Protobuf.Descriptor

FieldDefault FieldOptions'JSType # 
Instance details

Defined in Proto.Google.Protobuf.Descriptor

FieldDefault FieldOptions'CType # 
Instance details

Defined in Proto.Google.Protobuf.Descriptor

FieldDefault FieldDescriptorProto'Type # 
Instance details

Defined in Proto.Google.Protobuf.Descriptor

FieldDefault FieldDescriptorProto'Label # 
Instance details

Defined in Proto.Google.Protobuf.Descriptor

class (Enum a, Bounded a) => MessageEnum a where #

A class for protocol buffer enums that enables safe decoding.

Minimal complete definition

maybeToEnum, showEnum, readEnum

Methods

maybeToEnum :: Int -> Maybe a #

Convert the given Int to an enum value. Returns Nothing if no corresponding value was defined in the .proto file.

showEnum :: a -> String #

Get the name of this enum as defined in the .proto file. Used for the human-readable output in Data.ProtoLens.TextFormat.

readEnum :: String -> Maybe a #

Convert the given String to an enum value. Returns Nothing if no corresponding value was defined in the .proto file.

Building protocol buffers

class Default a where #

A class for types with a default value.

Methods

def :: a #

The default value for this type.

Instances
Default Double 
Instance details

Defined in Data.Default.Class

Methods

def :: Double #

Default Float 
Instance details

Defined in Data.Default.Class

Methods

def :: Float #

Default Int 
Instance details

Defined in Data.Default.Class

Methods

def :: Int #

Default Int8 
Instance details

Defined in Data.Default.Class

Methods

def :: Int8 #

Default Int16 
Instance details

Defined in Data.Default.Class

Methods

def :: Int16 #

Default Int32 
Instance details

Defined in Data.Default.Class

Methods

def :: Int32 #

Default Int64 
Instance details

Defined in Data.Default.Class

Methods

def :: Int64 #

Default Integer 
Instance details

Defined in Data.Default.Class

Methods

def :: Integer #

Default Ordering 
Instance details

Defined in Data.Default.Class

Methods

def :: Ordering #

Default Word 
Instance details

Defined in Data.Default.Class

Methods

def :: Word #

Default Word8 
Instance details

Defined in Data.Default.Class

Methods

def :: Word8 #

Default Word16 
Instance details

Defined in Data.Default.Class

Methods

def :: Word16 #

Default Word32 
Instance details

Defined in Data.Default.Class

Methods

def :: Word32 #

Default Word64 
Instance details

Defined in Data.Default.Class

Methods

def :: Word64 #

Default () 
Instance details

Defined in Data.Default.Class

Methods

def :: () #

Default All 
Instance details

Defined in Data.Default.Class

Methods

def :: All #

Default Any 
Instance details

Defined in Data.Default.Class

Methods

def :: Any #

Default CShort 
Instance details

Defined in Data.Default.Class

Methods

def :: CShort #

Default CUShort 
Instance details

Defined in Data.Default.Class

Methods

def :: CUShort #

Default CInt 
Instance details

Defined in Data.Default.Class

Methods

def :: CInt #

Default CUInt 
Instance details

Defined in Data.Default.Class

Methods

def :: CUInt #

Default CLong 
Instance details

Defined in Data.Default.Class

Methods

def :: CLong #

Default CULong 
Instance details

Defined in Data.Default.Class

Methods

def :: CULong #

Default CLLong 
Instance details

Defined in Data.Default.Class

Methods

def :: CLLong #

Default CULLong 
Instance details

Defined in Data.Default.Class

Methods

def :: CULLong #

Default CFloat 
Instance details

Defined in Data.Default.Class

Methods

def :: CFloat #

Default CDouble 
Instance details

Defined in Data.Default.Class

Methods

def :: CDouble #

Default CPtrdiff 
Instance details

Defined in Data.Default.Class

Methods

def :: CPtrdiff #

Default CSize 
Instance details

Defined in Data.Default.Class

Methods

def :: CSize #

Default CSigAtomic 
Instance details

Defined in Data.Default.Class

Methods

def :: CSigAtomic #

Default CClock 
Instance details

Defined in Data.Default.Class

Methods

def :: CClock #

Default CTime 
Instance details

Defined in Data.Default.Class

Methods

def :: CTime #

Default CUSeconds 
Instance details

Defined in Data.Default.Class

Methods

def :: CUSeconds #

Default CSUSeconds 
Instance details

Defined in Data.Default.Class

Methods

def :: CSUSeconds #

Default CIntPtr 
Instance details

Defined in Data.Default.Class

Methods

def :: CIntPtr #

Default CUIntPtr 
Instance details

Defined in Data.Default.Class

Methods

def :: CUIntPtr #

Default CIntMax 
Instance details

Defined in Data.Default.Class

Methods

def :: CIntMax #

Default CUIntMax 
Instance details

Defined in Data.Default.Class

Methods

def :: CUIntMax #

Default UninterpretedOption'NamePart # 
Instance details

Defined in Proto.Google.Protobuf.Descriptor

Default UninterpretedOption # 
Instance details

Defined in Proto.Google.Protobuf.Descriptor

Default SourceCodeInfo'Location # 
Instance details

Defined in Proto.Google.Protobuf.Descriptor

Default SourceCodeInfo # 
Instance details

Defined in Proto.Google.Protobuf.Descriptor

Methods

def :: SourceCodeInfo #

Default ServiceOptions # 
Instance details

Defined in Proto.Google.Protobuf.Descriptor

Methods

def :: ServiceOptions #

Default ServiceDescriptorProto # 
Instance details

Defined in Proto.Google.Protobuf.Descriptor

Default OneofDescriptorProto # 
Instance details

Defined in Proto.Google.Protobuf.Descriptor

Default MethodOptions # 
Instance details

Defined in Proto.Google.Protobuf.Descriptor

Methods

def :: MethodOptions #

Default MethodDescriptorProto # 
Instance details

Defined in Proto.Google.Protobuf.Descriptor

Default MessageOptions # 
Instance details

Defined in Proto.Google.Protobuf.Descriptor

Methods

def :: MessageOptions #

Default GeneratedCodeInfo'Annotation # 
Instance details

Defined in Proto.Google.Protobuf.Descriptor

Default GeneratedCodeInfo # 
Instance details

Defined in Proto.Google.Protobuf.Descriptor

Default FileOptions'OptimizeMode # 
Instance details

Defined in Proto.Google.Protobuf.Descriptor

Default FileOptions # 
Instance details

Defined in Proto.Google.Protobuf.Descriptor

Methods

def :: FileOptions #

Default FileDescriptorSet # 
Instance details

Defined in Proto.Google.Protobuf.Descriptor

Default FileDescriptorProto # 
Instance details

Defined in Proto.Google.Protobuf.Descriptor

Default FieldOptions'JSType # 
Instance details

Defined in Proto.Google.Protobuf.Descriptor

Default FieldOptions'CType # 
Instance details

Defined in Proto.Google.Protobuf.Descriptor

Default FieldOptions # 
Instance details

Defined in Proto.Google.Protobuf.Descriptor

Methods

def :: FieldOptions #

Default FieldDescriptorProto'Type # 
Instance details

Defined in Proto.Google.Protobuf.Descriptor

Default FieldDescriptorProto'Label # 
Instance details

Defined in Proto.Google.Protobuf.Descriptor

Default FieldDescriptorProto # 
Instance details

Defined in Proto.Google.Protobuf.Descriptor

Default EnumValueOptions # 
Instance details

Defined in Proto.Google.Protobuf.Descriptor

Default EnumValueDescriptorProto # 
Instance details

Defined in Proto.Google.Protobuf.Descriptor

Default EnumOptions # 
Instance details

Defined in Proto.Google.Protobuf.Descriptor

Methods

def :: EnumOptions #

Default EnumDescriptorProto # 
Instance details

Defined in Proto.Google.Protobuf.Descriptor

Default DescriptorProto'ReservedRange # 
Instance details

Defined in Proto.Google.Protobuf.Descriptor

Default DescriptorProto'ExtensionRange # 
Instance details

Defined in Proto.Google.Protobuf.Descriptor

Default DescriptorProto # 
Instance details

Defined in Proto.Google.Protobuf.Descriptor

Default CodeGeneratorResponse'File # 
Instance details

Defined in Proto.Google.Protobuf.Compiler.Plugin

Default CodeGeneratorResponse # 
Instance details

Defined in Proto.Google.Protobuf.Compiler.Plugin

Default CodeGeneratorRequest # 
Instance details

Defined in Proto.Google.Protobuf.Compiler.Plugin

Default [a] 
Instance details

Defined in Data.Default.Class

Methods

def :: [a] #

Default (Maybe a) 
Instance details

Defined in Data.Default.Class

Methods

def :: Maybe a #

Integral a => Default (Ratio a) 
Instance details

Defined in Data.Default.Class

Methods

def :: Ratio a #

Default a => Default (IO a) 
Instance details

Defined in Data.Default.Class

Methods

def :: IO a #

(Default a, RealFloat a) => Default (Complex a) 
Instance details

Defined in Data.Default.Class

Methods

def :: Complex a #

Default (First a) 
Instance details

Defined in Data.Default.Class

Methods

def :: First a #

Default (Last a) 
Instance details

Defined in Data.Default.Class

Methods

def :: Last a #

Default a => Default (Dual a) 
Instance details

Defined in Data.Default.Class

Methods

def :: Dual a #

Default (Endo a) 
Instance details

Defined in Data.Default.Class

Methods

def :: Endo a #

Num a => Default (Sum a) 
Instance details

Defined in Data.Default.Class

Methods

def :: Sum a #

Num a => Default (Product a) 
Instance details

Defined in Data.Default.Class

Methods

def :: Product a #

Default r => Default (e -> r) 
Instance details

Defined in Data.Default.Class

Methods

def :: e -> r #

(Default a, Default b) => Default (a, b) 
Instance details

Defined in Data.Default.Class

Methods

def :: (a, b) #

(Default a, Default b, Default c) => Default (a, b, c) 
Instance details

Defined in Data.Default.Class

Methods

def :: (a, b, c) #

(Default a, Default b, Default c, Default d) => Default (a, b, c, d) 
Instance details

Defined in Data.Default.Class

Methods

def :: (a, b, c, d) #

(Default a, Default b, Default c, Default d, Default e) => Default (a, b, c, d, e) 
Instance details

Defined in Data.Default.Class

Methods

def :: (a, b, c, d, e) #

(Default a, Default b, Default c, Default d, Default e, Default f) => Default (a, b, c, d, e, f) 
Instance details

Defined in Data.Default.Class

Methods

def :: (a, b, c, d, e, f) #

(Default a, Default b, Default c, Default d, Default e, Default f, Default g) => Default (a, b, c, d, e, f, g) 
Instance details

Defined in Data.Default.Class

Methods

def :: (a, b, c, d, e, f, g) #

build :: Default a => (a -> a) -> a #

Utility function for building a message from a default value. For example:

instance Default A where ...
x, y :: Lens' A Int
m :: A
m = build ((x .~ 5) . (y .~ 7))

Proto registries

data Registry #

A set of known message types. Can help encode/decode protobufs containing Data.ProtoLens.Any values in a more human-readable text format.

Registries can be combined using their Monoid instance.

See the withRegistry functions in TextFormat

Instances
Semigroup Registry # 
Instance details

Defined in Data.ProtoLens.Message

Monoid Registry # 
Instance details

Defined in Data.ProtoLens.Message

register :: forall msg. Message msg => Proxy msg -> Registry #

Build a Registry containing a single proto type.

Example: > register (Proxy :: Proxy Proto.My.Proto.Type)

lookupRegistered :: Text -> Registry -> Maybe SomeMessageType #

Look up a message type by name (e.g., "type.googleapis.com/google.protobuf.FloatValue"). The URL corresponds to the field google.protobuf.Any.type_url.

data SomeMessageType where #

Constructors

SomeMessageType :: Message msg => Proxy msg -> SomeMessageType 

Any messages

Utilities for constructing protocol buffer lenses

maybeLens :: b -> Lens' (Maybe b) b #

A helper lens for accessing optional fields. This is used as part of code generation, and should generally not be needed explicitly.

Note that maybeLens does not satisfy the lens laws, which expect that set l (view l x) == x. For example,

set (maybeLens 'a') (view (maybeLens 'a') Nothing) == Just 'a'

However, this is the behavior generally expected by users, and only matters if we're explicitly checking whether a field is set.

Internal utilities for parsing protocol buffers

reverseRepeatedFields :: Map k (FieldDescriptor msg) -> msg -> msg #

Reverse every repeated (list) field in the message.

During parsing, we store fields temporarily in reverse order, and then un-reverse them at the end. This helps avoid the quadratic blowup from repeatedly appending to lists. TODO: Benchmark how much of a problem this is in practice, and whether it's still a net win for small protobufs. If we decide on it more permanently, consider moving it to a more internal module.

Unknown fields

discardUnknownFields :: Message msg => msg -> msg #