proto-lens 0.6.0.0 → 0.7.0.0
raw patch · 4 files changed
+54/−5 lines, 4 filesdep ~basedep ~ghc-primnew-uploaderPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: base, ghc-prim
API changes (from Hackage documentation)
+ Data.ProtoLens.Encoding.Wire: buildMessageSet :: FieldSet -> Builder
+ Data.ProtoLens.Encoding.Wire: parseMessageSetTaggedValueFromWire :: Word64 -> Parser TaggedValue
+ Data.ProtoLens.Message: packedFileDescriptor :: Message msg => Proxy msg -> ByteString
+ Data.ProtoLens.Message: packedMessageDescriptor :: Message msg => Proxy msg -> ByteString
Files
- Changelog.md +9/−0
- proto-lens.cabal +5/−5
- src/Data/ProtoLens/Encoding/Wire.hs +26/−0
- src/Data/ProtoLens/Message.hs +14/−0
Changelog.md view
@@ -1,5 +1,14 @@ # Changelog for `proto-lens` +## v0.7.0.0+- Support GHC 8.10.+- Add a method to `Data.ProtoLens.Message` for getting the `DescriptorProto`+ of a given message. For a simpler API, see `Data.ProtoLens.Descriptor`+ from `proto-lens-protobuf-types`.+- Bump ghc-source-gen to version 0.4.0.0.+- Bump upper bound to allow base-4.14.+- Bump upper bound to allow ghc-prim-0.6.+ ## v0.6.0.0 ### Breaking Changes
proto-lens.cabal view
@@ -1,13 +1,13 @@ cabal-version: 1.12 --- This file has been generated from package.yaml by hpack version 0.31.2.+-- This file has been generated from package.yaml by hpack version 0.33.0. -- -- see: https://github.com/sol/hpack ----- hash: 5006405422ef969b41707de8219c7bbf95f72fb7bb41c12a2f22d30086de9113+-- hash: d71629464ee51493ce31ad480ec5872af89ba3c917588b69a61484409a22896c name: proto-lens-version: 0.6.0.0+version: 0.7.0.0 synopsis: A lens-based implementation of protocol buffers in Haskell. description: The proto-lens library provides an API for protocol buffers using modern Haskell language and library patterns. Specifically, it provides: .@@ -60,11 +60,11 @@ hs-source-dirs: src build-depends:- base >=4.10 && <4.14+ base >=4.10 && <4.15 , bytestring ==0.10.* , containers >=0.5 && <0.7 , deepseq ==1.4.*- , ghc-prim >=0.4 && <0.6+ , ghc-prim >=0.4 && <0.7 , lens-family >=1.2 && <2.1 , parsec ==3.1.* , pretty ==1.1.*
src/Data/ProtoLens/Encoding/Wire.hs view
@@ -16,7 +16,9 @@ , joinTypeAndTag , parseFieldSet , buildFieldSet+ , buildMessageSet , parseTaggedValueFromWire+ , parseMessageSetTaggedValueFromWire ) where import Control.DeepSeq (NFData(..))@@ -63,6 +65,15 @@ putVarInt (joinTypeAndTag tag (wireValueToInt wv)) <> buildWireValue wv +-- builds in legacy MessageSet format.+-- See https://github.com/protocolbuffers/protobuf/blob/dec4939439d9ca2adf2bb14edccf876c2587faf2/src/google/protobuf/descriptor.proto#L444+buildTaggedValueAsMessageSet :: TaggedValue -> Builder+buildTaggedValueAsMessageSet (TaggedValue (Tag t) wv) =+ buildTaggedValue ( TaggedValue 1 StartGroup)+ <> buildTaggedValue (TaggedValue 2 (VarInt $ fromIntegral t))+ <> buildTaggedValue (TaggedValue 3 wv)+ <> buildTaggedValue (TaggedValue 1 EndGroup)+ buildWireValue :: WireValue -> Builder buildWireValue (VarInt w) = putVarInt w buildWireValue (Fixed64 w) = putFixed64 w@@ -98,6 +109,18 @@ 5 -> Fixed32 <$> getFixed32 _ -> fail $ "Unknown wire type " ++ show w +parseMessageSetTaggedValueFromWire :: Word64 -> Parser TaggedValue+parseMessageSetTaggedValueFromWire t =+ parseTaggedValueFromWire t >>= \v -> case v of+ TaggedValue 1 StartGroup -> parseTaggedValue >>= \ft -> case ft of+ TaggedValue 2 (VarInt f) -> parseTaggedValue >>= \dt -> case dt of+ TaggedValue 3 (Lengthy b) -> parseTaggedValue >>= \et -> case et of+ TaggedValue 1 EndGroup -> return $ TaggedValue (Tag $ fromIntegral f) (Lengthy b)+ _ -> fail "missing end_group"+ _ -> fail "missing message"+ _ -> fail "missing field tag"+ _ -> return v+ splitTypeAndTag :: Word64 -> (Tag, Word8) splitTypeAndTag w = (fromIntegral $ w `shiftR` 3, fromIntegral (w .&. 7)) @@ -117,3 +140,6 @@ buildFieldSet :: FieldSet -> Builder buildFieldSet = mconcat . map buildTaggedValue ++buildMessageSet :: FieldSet -> Builder+buildMessageSet = mconcat . map buildTaggedValueAsMessageSet
src/Data/ProtoLens/Message.hs view
@@ -75,6 +75,20 @@ -- @"packagename.messagename"@. messageName :: Proxy msg -> T.Text + -- | The serialized protobuffer message descriptor for this type.+ --+ -- For a friendlier version which returns the actual descriptor type,+ -- use @Data.ProtoLens.Descriptor.messageDescriptor@+ -- from the @proto-lens-protobuf-types@ package.+ packedMessageDescriptor :: Proxy msg -> B.ByteString++ -- | The serialized protobuffer file message descriptor containing this type.+ --+ -- For a friendlier version which returns the actual file descriptor type,+ -- use @Data.ProtoLens.Descriptor.fileDescriptor@+ -- from the @proto-lens-protobuf-types@ package.+ packedFileDescriptor :: Proxy msg -> B.ByteString+ -- | A message with all fields set to their default values. -- -- Satisfies @encodeMessage defMessage == ""@ and @decodeMessage "" == Right defMessage@.