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