Haskell Language
Bufory protokołu Google
Szukaj…
Uwagi
Aby używać buforów protokołów z Haskellem, powinieneś zainstalować pakiet htprotoc
:
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