Buscar..


Observaciones

Para usar Protocol Buffers con Haskell debes instalar el paquete htprotoc :

  1. Clona el proyecto desde Github.
  2. Usa Stack para construir e instalar

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


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow