如何使用atdgen序列化外部类型?

时间:2014-08-21 12:47:42

标签: ocaml

我在我的项目中使用Core和atdgen。

我有以下记录,我想在JSON中序列化:

type person = {
  (* ... *)
  birth : Time.t;
  (* ... *)
}

是否可以在我的atd文件中告诉如何将Time.t值序列化为字符串(通过调用Time.to_string)?

2 个答案:

答案 0 :(得分:2)

尽管@ everiq的答案有效,但有一种更简单的方法可以将JSON字符串转换为自定义类型。至少对我而言。

type time = string wrap <ocaml t="Core.Std.Time.t"
  wrap="Core.Std.Time.of_string" unwrap="Core.Std.Time.to_string">

type person = {
  (* ... *)
  birth : time;
  (* ... *)
}

答案 1 :(得分:0)

你可以在这样的模块中包装Time.t:

type time <ocaml_json module="TimeWrapper" t="t"> = abstract

然后在TimeWrapper中定义自己的读/写函数:

(* timeWrapper.mli *)
type t
val read_t : Yojson.Safe.lexer_state -> Lexing.lexbuf -> t
val write_t : Bi_outbuf.t -> t -> unit