Haskell Language
Google Protocol Buffers
Ricerca…
Osservazioni
Per utilizzare i buffer del protocollo con Haskell è necessario installare il pacchetto htprotoc
:
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