创建构建并使用简单的 .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
将使用 Person.hs
在当前目录中创建一个新的文件夹 Protocol
,我们可以将其导入到我们的 haskell 项目中:
import Protocol (Person)
下一步,如果使用 Stack add
protocol-buffers
, protocol-buffers-descriptor
到 build-depends:
和
Protocol
你的 .cabal
文件中的 exposed-modules
。
如果我们现在从流中获得传入消息,则消息将具有 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