Haskell Language
Google Protocol Buffers
Buscar..
Observaciones
Para usar Protocol Buffers con Haskell debes instalar el paquete htprotoc
:
Ahora debería encontrar el ejecutable hprotoc
en $HOME/.local/bin/
.
Creando, construyendo y usando un simple archivo .proto
Primero vamos a crear un sencillo .proto
archivo person.proto
package Protocol;
message Person {
required string firstName = 1;
required string lastName = 2;
optional int32 age = 3;
}
Después de guardar, ahora podemos crear los archivos Haskell que podemos usar en nuestro proyecto ejecutando
$HOME/.local/bin/hprotoc --proto_path=. --haskell_out=. person.proto
Deberíamos obtener una salida similar a esta:
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
creará una nueva carpeta Protocol
en el directorio actual con Person.hs
que simplemente podemos importar en nuestro proyecto de haskell:
import Protocol (Person)
Como siguiente paso, si usa Stack, agregue
protocol-buffers
, protocol-buffers-descriptor
para build-depends:
y
Protocol
a exposed-modules
en su archivo .cabal
.
Si recibimos ahora un mensaje entrante de una transmisión, el mensaje tendrá el tipo ByteString
.
Para transformar el ByteString
(que obviamente debería contener datos de "Persona" codificados) en nuestro tipo de datos Haskell, debemos llamar a la función messageGet
que importamos por
import Text.ProtocolBuffers (messageGet)
que permite crear un valor de tipo Person
utilizando:
transformRawPerson :: ByteString -> Maybe Person
transformRawPerson raw = case messageGet raw of
Left _ -> Nothing
Right (person, _) -> Just person