OCaml library for JSONfeed parsing and creation
1(*---------------------------------------------------------------------------
2 Copyright (c) 2024 Anil Madhavapeddy. All rights reserved.
3 SPDX-License-Identifier: ISC
4 ---------------------------------------------------------------------------*)
5
6module Unknown = struct
7 type t = Jsont.json
8
9 let empty = Jsont.Object ([], Jsont.Meta.none)
10 let is_empty = function Jsont.Object ([], _) -> true | _ -> false
11end
12
13type t = { type_ : string; url : string; unknown : Unknown.t }
14
15let create ~type_ ~url ?(unknown = Unknown.empty) () = { type_; url; unknown }
16let type_ t = t.type_
17let url t = t.url
18let unknown t = t.unknown
19let equal a b = a.type_ = b.type_ && a.url = b.url
20let pp ppf t = Format.fprintf ppf "%s: %s" t.type_ t.url
21
22let jsont =
23 let kind = "Hub" in
24 let doc = "A hub endpoint" in
25 let create_obj type_ url unknown = create ~type_ ~url ~unknown () in
26 Jsont.Object.map ~kind ~doc create_obj
27 |> Jsont.Object.mem "type" Jsont.string ~enc:type_
28 |> Jsont.Object.mem "url" Jsont.string ~enc:url
29 |> Jsont.Object.keep_unknown Jsont.json_mems ~enc:unknown
30 |> Jsont.Object.finish