Haskell Language
Googles protokollbuffertar
Sök…
Anmärkningar
För att använda protokollbuffertar med Haskell bör du installera htprotoc
paketet:
Du bör nu hitta hprotoc
körbar i $HOME/.local/bin/
.
Skapa, bygga och använda en enkel .proto-fil
Låt oss först skapa en enkel .proto
fil person.proto
package Protocol;
message Person {
required string firstName = 1;
required string lastName = 2;
optional int32 age = 3;
}
Efter att vi har sparat kan vi nu skapa Haskell-filer som vi kan använda i vårt projekt genom att köra
$HOME/.local/bin/hprotoc --proto_path=. --haskell_out=. person.proto
Vi borde få en produkt som liknar detta:
Loading filepath: "/<path-to-project>/person.proto"
All proto files loaded
Haskell name mangling done
Recursive modules resolved
./Protocol/Person.hs
./Protocol.hs
Processing complete, have a nice day.
hprotoc
kommer att skapa en ny mapp Protocol
i den aktuella katalogen med Person.hs
som vi helt enkelt kan importera in i vårt Haskell projekt:
import Protocol (Person)
Som nästa steg, om du använder Stack lägg till
protocol-buffers
, protocol-buffers-descriptor
att build-depends:
och
Protocol
till exposed-modules
i din .cabal
fil.
Om vi nu får ett inkommande meddelande från en ström har meddelandet typen ByteString
.
För att omvandla ByteString
(som bör naturligtvis innehålla kodade "person" data) i vår Haskell datatyp måste vi anropa funktionen messageGet
som vi importerar från
import Text.ProtocolBuffers (messageGet)
vilket gör det möjligt att skapa ett värde av typen Person
hjälp av:
transformRawPerson :: ByteString -> Maybe Person
transformRawPerson raw = case messageGet raw of
Left _ -> Nothing
Right (person, _) -> Just person