Haskell Language
Google-protocolbuffers
Zoeken…
Opmerkingen
Om protocolbuffers met Haskell te gebruiken, moet u het htprotoc pakket 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