Haskell Language
Google Protokollpuffer
Suche…
Bemerkungen
Um Protocol Buffers mit Haskell zu verwenden, sollten Sie das htprotoc Paket installieren:
Sie sollten nun die hprotoc Datei von hprotoc in $HOME/.local/bin/ .
Erstellen, Erstellen und Verwenden einer einfachen .proto-Datei
Lassen Sie uns zunächst eine einfache .proto Datei person.proto
package Protocol;
message Person {
required string firstName = 1;
required string lastName = 2;
optional int32 age = 3;
}
Nach dem Speichern können wir nun die Haskell-Dateien erstellen, die wir in unserem Projekt verwenden können, indem wir sie ausführen
$HOME/.local/bin/hprotoc --proto_path=. --haskell_out=. person.proto
Wir sollten eine ähnliche Ausgabe erhalten:
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 erstellt im aktuellen Verzeichnis mit Person.hs einen neuen Ordner Protocol den wir einfach in unser Hash-Projekt importieren können:
import Protocol (Person)
Als nächsten Schritt, wenn Sie Stack hinzufügen
protocol-buffers
, protocol-buffers-descriptor
zu build-depends: und
Protocol
zu exposed-modules in Ihrer .cabal Datei.
Wenn wir jetzt eine eingehende Nachricht von einem Stream erhalten, hat die Nachricht den Typ ByteString .
Um den ByteString (der offensichtlich verschlüsselte Personendaten enthalten sollte) in unseren Haskell-Datentyp messageGet , müssen wir die Funktion messageGet der wir importieren
import Text.ProtocolBuffers (messageGet)
Damit können Sie einen Wert des Typs Person erstellen, indem Sie
transformRawPerson :: ByteString -> Maybe Person
transformRawPerson raw = case messageGet raw of
Left _ -> Nothing
Right (person, _) -> Just person