OCaml library for JSONfeed parsing and creation
at v1.1.0 1.3 kB view raw
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 = { 14 url : string; 15 doi : string option; 16 cito : Cito.t list option; 17 unknown : Unknown.t; 18} 19 20let create ~url ?doi ?cito ?(unknown = Unknown.empty) () = 21 { url; doi; cito; unknown } 22 23let url t = t.url 24let doi t = t.doi 25let cito t = t.cito 26let unknown t = t.unknown 27let equal a b = String.equal a.url b.url 28 29let pp ppf t = 30 let open Format in 31 fprintf ppf "%s" t.url; 32 Option.iter (fprintf ppf " [DOI: %s]") t.doi 33 34let jsont = 35 let kind = "Reference" in 36 let doc = "A reference to a cited source" in 37 let create_obj url doi cito unknown = create ~url ?doi ?cito ~unknown () in 38 Jsont.Object.map ~kind ~doc create_obj 39 |> Jsont.Object.mem "url" Jsont.string ~enc:url 40 |> Jsont.Object.opt_mem "doi" Jsont.string ~enc:doi 41 |> Jsont.Object.opt_mem "cito" (Jsont.list Cito.jsont) ~enc:cito 42 |> Jsont.Object.keep_unknown Jsont.json_mems ~enc:unknown 43 |> Jsont.Object.finish