Ricerca…


Osservazioni

Per utilizzare i buffer del protocollo con Haskell è necessario installare il pacchetto htprotoc :

  1. Clona il progetto da Github
  2. Usa Stack per costruire e installare

Ora dovresti trovare l'eseguibile hprotoc in $HOME/.local/bin/ .

Creazione, costruzione e utilizzo di un semplice file .proto

Cerchiamo innanzitutto di creare un semplice file .proto person.proto

package Protocol;

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

Dopo aver salvato ora possiamo creare i file Haskell che possiamo usare nel nostro progetto eseguendo

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

Dovremmo ottenere un risultato simile a questo:

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 creerà una nuova cartella Protocol nella directory corrente con Person.hs che possiamo semplicemente importare nel nostro progetto haskell:

import Protocol (Person)

Come passaggio successivo, se si utilizza l'aggiunta dello stack

   protocol-buffers
 , protocol-buffers-descriptor

build-depends: e

Protocol

a exposed-modules nel tuo file .cabal .

Se otteniamo ora un messaggio in arrivo da uno stream, il messaggio avrà il tipo ByteString .

Per trasformare il ByteString (che ovviamente dovrebbe contenere dati "Person" codificati) nel nostro tipo di dati Haskell, dobbiamo chiamare la funzione messageGet che importiamo

import Text.ProtocolBuffers (messageGet)

che consente di creare un valore di tipo Person usando:

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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow