如何在ReasonML中进行protobuf?

时间:2018-04-01 05:03:03

标签: javascript ocaml protocol-buffers reason bucklescript

我有一组protobuf类型,我想生成用于序列化的reasonML代码。到目前为止我发现的是ocaml-protoc,它无法在我的系统上安装。使用docker,

FROM ocaml/opam:alpine
RUN opam remote add dev git://github.com/mirage/mirage-dev
RUN opam depext -i mirage

RUN opam depext conf-m4.1
RUN yes | opam install ocaml-protoc

然后运行命令:

docker run \
        --mount type=bind,source=$(PWD)/../src/proto,target=/home/opam/ocaml \
        --mount type=bind,source="$(PWD)"/../../proto,target=/home/opam/proto \
        -ti eb1b1ed36a35 \
        ocaml-protoc -ml_out=/home/opam/ocaml /home/opam/proto/chat.proto > /dev/null"

我已经能够编译一组ml / mli文件。但是,这些文件依赖于某些未安装的库,例如Pbrt。摘录:

let rec decode_friend_event_etype d = 
  match Pbrt.Decoder.int_as_varint d with
  | 0 -> (Chat_types.Arrival:Chat_types.friend_event_etype)
  | 1 -> (Chat_types.Departure:Chat_types.friend_event_etype)
  | _ -> Pbrt.Decoder.malformed_variant "friend_event_etype"

-------------- ^

在没有安装任何本机库的情况下,是否有一种解决此问题的简洁方法?无论包含什么都必须提供源代码,以便bucklescript能够将其编译成JS。

可以想到的解决方案是生成公共依赖项(例如Pbrt)以及proto实现。有没有人找到解决这个问题的方法?

1 个答案:

答案 0 :(得分:1)

bucklescript runtimedemo project显示如何使用它。

我自己没有尝试过,但据我所知,你必须将bucklescript protobuf运行时添加为普通的bucklescript依赖

npm install bs-ocaml-protoc-json

将其添加到bs-dependencies in bsconfig.json

{
  ...
  "bs-dependencies": [ "bs-ocaml-protoc-json"]
}

然后使用ocaml-protoc标志生成带-bs的特定于bucklescript的代码:

ocaml-protoc -bs -ml_out=/home/opam/ocaml /home/opam/proto/chat.proto

您现在应该在/home/opam/ocaml中生成生成的源代码,假设您有一个正确设置的bucklescript项目作为源文件夹,应该能够使用bsb -make-world