Haskell Language
Буферы протокола Google
Поиск…
замечания
Чтобы использовать протокольные буферы с Haskell, вы должны установить пакет htprotoc
:
Теперь вы должны найти исполняемый файл hprotoc
в $HOME/.local/bin/
.
Создание, создание и использование простого файла .proto
Давайте сначала создадим простой .proto
файл person.proto
package Protocol;
message Person {
required string firstName = 1;
required string lastName = 2;
optional int32 age = 3;
}
После сохранения мы можем теперь создавать файлы Haskell, которые мы можем использовать в нашем проекте, запустив
$HOME/.local/bin/hprotoc --proto_path=. --haskell_out=. person.proto
Мы должны получить аналогичный результат:
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
создаст новую папку Protocol
в текущем каталоге с Person.hs
которую мы можем просто импортировать в наш проект haskell:
import Protocol (Person)
В качестве следующего шага, если использовать Stack add
protocol-buffers
, protocol-buffers-descriptor
build-depends:
и
Protocol
для exposed-modules
в вашем файле .cabal
.
Если мы получим входящее сообщение из потока, сообщение будет иметь тип ByteString
.
Чтобы преобразовать ByteString
(который, очевидно, должен содержать закодированные данные Person) в наш тип данных Haskell, нам нужно вызвать функцию messageGet
которую мы импортируем по
import Text.ProtocolBuffers (messageGet)
который позволяет создать значение типа Person
используя:
transformRawPerson :: ByteString -> Maybe Person
transformRawPerson raw = case messageGet raw of
Left _ -> Nothing
Right (person, _) -> Just person