建立構建並使用簡單的 .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