Suche…


Bemerkungen

Um Protocol Buffers mit Haskell zu verwenden, sollten Sie das htprotoc Paket installieren:

  1. Klonen Sie das Projekt aus Github
  2. Verwenden Sie Stack zum Erstellen und 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


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow