Recherche…


Remarques

Pour utiliser les tampons de protocole avec Haskell, vous devez installer le package htprotoc :

  1. Cloner le projet depuis Github
  2. Utilisez Stack pour construire et installer

Vous devriez maintenant trouver l'exécutable hprotoc dans $HOME/.local/bin/ .

Créer, construire et utiliser un simple fichier .proto

Laissez - nous d' abord créer un simple .proto fichier person.proto

package Protocol;

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

Après la sauvegarde, nous pouvons maintenant créer les fichiers Haskell que nous pouvons utiliser dans notre projet en exécutant

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

Nous devrions obtenir une sortie similaire à celle-ci:

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 va créer un nouveau dossier Protocol dans le répertoire courant avec Person.hs que nous pouvons simplement importer dans notre projet haskell:

import Protocol (Person)

Comme étape suivante, si vous utilisez Stack, ajoutez

   protocol-buffers
 , protocol-buffers-descriptor

build-depends: et

Protocol

aux exposed-modules dans votre fichier .cabal .

Si nous recevons maintenant un message entrant d'un flux, le message aura le type ByteString .

Pour transformer le ByteString (qui doit évidemment contenir des données "Person" encodées) dans notre type de données Haskell, nous devons appeler la fonction messageGet que nous importons par

import Text.ProtocolBuffers (messageGet)

qui permet de créer une valeur de type Person utilisant:

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
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow