Sök…


Anmärkningar

För att använda protokollbuffertar med Haskell bör du installera htprotoc paketet:

  1. Klona projektet från Github
  2. Använd Stack för att bygga och installera

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


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow