javascript - 如何在 ReasonML 中进行 protobuf?

标签 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"

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

有没有一种无需安装任何 native 库即可解决此问题的干净方法?无论包含什么,都必须提供源代码,以便 bucklescript 能够将其编译成 JS。

想到的解决方案是生成通用依赖项(例如 Pbrt)以及原型(prototype)实现。有没有人找到解决这个问题的方法?

最佳答案

有一个 bucklescript runtime和一个 demo project展示如何使用它。

我自己还没有尝试过,但据我了解,您必须将 bucklescript protobuf 运行时添加为普通的 bucklescript 依赖项

npm install bs-ocaml-protoc-json

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

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

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

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

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

关于javascript - 如何在 ReasonML 中进行 protobuf?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49594975/

相关文章:

python - 获得 fastpython protobuf 支持的问题

javascript - HTML 标题菜单下拉无法单击

javascript - Google map React 卡在 'loading map...' 中

javascript - 悬停时的 Jquery 将类添加到另一个元素根本不起作用

javascript - python 和谐吗?

module - 如何在 OCaml 中使用集合?

c - OCaml 垃圾收集幻像类型

OCaml - 使用类型信息进行预处理

go - 在 connect-go 拦截器中修改 responsebody

javascript - 使用 protobufjs 的基本 typescript 示例