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