Zoeken…


Opmerkingen

Om protocolbuffers met Haskell te gebruiken, moet u het htprotoc pakket installeren:

  1. Kloon het project van Github
  2. Gebruik Stack om te bouwen en installeren

Je zou nu het hprotoc uitvoerbare bestand moeten vinden in $HOME/.local/bin/ .

Een eenvoudig .proto-bestand maken, bouwen en gebruiken

Laten we eerst een eenvoudig .proto bestand person.proto

package Protocol;

message Person {
    required string firstName = 1;
    required string lastName  = 2;
    optional int32  age       = 3;
}

Na het opslaan kunnen we nu de Haskell-bestanden maken die we in ons project kunnen gebruiken door te draaien

$HOME/.local/bin/hprotoc --proto_path=. --haskell_out=. person.proto

We moeten een soortgelijke output krijgen:

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 zal een nieuwe map te maken Protocol in de huidige directory met Person.hs die we gewoon kunnen importeren in onze haskell project:

import Protocol (Person)

Als een volgende stap, als u Stack gebruikt, voegt u toe

   protocol-buffers
 , protocol-buffers-descriptor

om te build-depends: en

Protocol

naar exposed-modules in uw .cabal bestand.

Als we nu een inkomend bericht van een stream ontvangen, heeft het bericht het type ByteString .

Om de ByteString (die uiteraard gecodeerde "Persoonsgegevens" moet bevatten) om te zetten in ons Haskell-gegevenstype, moeten we de functie messageGet die we importeren door

import Text.ProtocolBuffers (messageGet)

waarmee u een waarde van het type Person met:

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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow