Szukaj…


Uwagi

Aby używać buforów protokołów z Haskellem, powinieneś zainstalować pakiet htprotoc :

  1. Sklonuj projekt z Github
  2. Użyj stosu, aby zbudować i zainstalować

Powinieneś teraz znaleźć hprotoc wykonywalny hprotoc w $HOME/.local/bin/ .

Tworzenie, budowanie i używanie prostego pliku .proto

Niech najpierw stworzyć prosty .proto plików person.proto

package Protocol;

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

Po zapisaniu możemy teraz utworzyć pliki Haskell, które możemy wykorzystać w naszym projekcie poprzez uruchomienie

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

Powinniśmy uzyskać wynik podobny do tego:

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 utworzy nowy folder Protocol w bieżącym katalogu z Person.hs który możemy po prostu zaimportować do naszego projektu haskell:

import Protocol (Person)

Jako następny krok, jeśli używasz Stosu dodaj

   protocol-buffers
 , protocol-buffers-descriptor

do build-depends: i

Protocol

do exposed-modules w pliku .cabal .

Jeśli otrzymamy teraz wiadomość przychodzącą ze strumienia, wiadomość będzie miała typ ByteString .

Aby przekształcić ByteString (który oczywiście powinien zawierać zakodowane dane „Person”) na nasz typ danych Haskell, musimy wywołać funkcję messageGet którą importujemy

import Text.ProtocolBuffers (messageGet)

który umożliwia utworzenie wartości typu Person przy użyciu:

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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow