···44 ---------------------------------------------------------------------------*)
5566module Unknown = struct
77- type t = (string * Jsont.json) list
77+ type t = Jsont.json
8899- let empty = []
1010- let is_empty = function [] -> true | _ -> false
99+ let empty = Jsont.Object ([], Jsont.Meta.none)
1010+ let is_empty = function Jsont.Object ([], _) -> true | _ -> false
1111end
12121313type t = {
···6464let jsont =
6565 let kind = "Attachment" in
6666 let doc = "An attachment object" in
6767- let unknown_mems :
6868- (Unknown.t, Jsont.json, Jsont.mem list) Jsont.Object.Mems.map =
6969- let open Jsont.Object.Mems in
7070- let dec_empty () = [] in
7171- let dec_add _meta (name : string) value acc =
7272- ((name, Jsont.Meta.none), value) :: acc
7373- in
7474- let dec_finish _meta mems =
7575- List.rev_map (fun ((name, _meta), value) -> (name, value)) mems
7676- in
7777- let enc =
7878- {
7979- enc =
8080- (fun (type acc)
8181- (f : Jsont.Meta.t -> string -> Jsont.json -> acc -> acc)
8282- unknown
8383- (acc : acc)
8484- ->
8585- List.fold_left
8686- (fun acc (name, value) -> f Jsont.Meta.none name value acc)
8787- acc unknown);
8888- }
8989- in
9090- map ~kind:"Unknown members" Jsont.json ~dec_empty ~dec_add ~dec_finish ~enc
9191- in
9267 let create_obj url mime_type title size_in_bytes duration_in_seconds unknown =
9368 create ~url ~mime_type ?title ?size_in_bytes ?duration_in_seconds ~unknown
9469 ()
···10075 |> Jsont.Object.opt_mem "size_in_bytes" Jsont.int64 ~enc:size_in_bytes
10176 |> Jsont.Object.opt_mem "duration_in_seconds" Jsont.int
10277 ~enc:duration_in_seconds
103103- |> Jsont.Object.keep_unknown unknown_mems ~enc:unknown
7878+ |> Jsont.Object.keep_unknown Jsont.json_mems ~enc:unknown
10479 |> Jsont.Object.finish
+3-3
lib/attachment.mli
···1818(** {1 Unknown Fields} *)
19192020module Unknown : sig
2121- type t = (string * Jsont.json) list
2222- (** Unknown/unrecognized JSON object members. Useful for preserving fields
2323- from custom extensions or future spec versions. *)
2121+ type t = Jsont.json
2222+ (** Unknown/unrecognized JSON object members as a generic JSON object.
2323+ Useful for preserving fields from custom extensions or future spec versions. *)
24242525 val empty : t
2626 (** [empty] is the empty list of unknown fields. *)
+4-30
lib/author.ml
···44 ---------------------------------------------------------------------------*)
5566module Unknown = struct
77- type t = (string * Jsont.json) list
77+ type t = Jsont.json
8899- let empty = []
1010- let is_empty = function [] -> true | _ -> false
99+ let empty = Jsont.Object ([], Jsont.Meta.none)
1010+ let is_empty = function Jsont.Object ([], _) -> true | _ -> false
1111end
12121313type t = {
···4444let jsont =
4545 let kind = "Author" in
4646 let doc = "An author object with at least one field set" in
4747- (* Custom mems map for Unknown.t that strips metadata from names *)
4848- let unknown_mems :
4949- (Unknown.t, Jsont.json, Jsont.mem list) Jsont.Object.Mems.map =
5050- let open Jsont.Object.Mems in
5151- let dec_empty () = [] in
5252- let dec_add _meta (name : string) value acc =
5353- ((name, Jsont.Meta.none), value) :: acc
5454- in
5555- let dec_finish _meta mems =
5656- List.rev_map (fun ((name, _meta), value) -> (name, value)) mems
5757- in
5858- let enc =
5959- {
6060- enc =
6161- (fun (type acc)
6262- (f : Jsont.Meta.t -> string -> Jsont.json -> acc -> acc)
6363- unknown
6464- (acc : acc)
6565- ->
6666- List.fold_left
6767- (fun acc (name, value) -> f Jsont.Meta.none name value acc)
6868- acc unknown);
6969- }
7070- in
7171- map ~kind:"Unknown members" Jsont.json ~dec_empty ~dec_add ~dec_finish ~enc
7272- in
7347 (* Constructor that matches the jsont object map pattern *)
7448 let create_obj name url avatar unknown =
7549 create ?name ?url ?avatar ~unknown ()
···7852 |> Jsont.Object.opt_mem "name" Jsont.string ~enc:name
7953 |> Jsont.Object.opt_mem "url" Jsont.string ~enc:url
8054 |> Jsont.Object.opt_mem "avatar" Jsont.string ~enc:avatar
8181- |> Jsont.Object.keep_unknown unknown_mems ~enc:unknown
5555+ |> Jsont.Object.keep_unknown Jsont.json_mems ~enc:unknown
8256 |> Jsont.Object.finish
+3-3
lib/author.mli
···1717(** {1 Unknown Fields} *)
18181919module Unknown : sig
2020- type t = (string * Jsont.json) list
2121- (** Unknown/unrecognized JSON object members. Useful for preserving fields
2222- from custom extensions or future spec versions. *)
2020+ type t = Jsont.json
2121+ (** Unknown/unrecognized JSON object members as a generic JSON object.
2222+ Useful for preserving fields from custom extensions or future spec versions. *)
23232424 val empty : t
2525 (** [empty] is the empty list of unknown fields. *)
+4-29
lib/hub.ml
···44 ---------------------------------------------------------------------------*)
5566module Unknown = struct
77- type t = (string * Jsont.json) list
77+ type t = Jsont.json
8899- let empty = []
1010- let is_empty = function [] -> true | _ -> false
99+ let empty = Jsont.Object ([], Jsont.Meta.none)
1010+ let is_empty = function Jsont.Object ([], _) -> true | _ -> false
1111end
12121313type t = { type_ : string; url : string; unknown : Unknown.t }
···2222let jsont =
2323 let kind = "Hub" in
2424 let doc = "A hub endpoint" in
2525- let unknown_mems :
2626- (Unknown.t, Jsont.json, Jsont.mem list) Jsont.Object.Mems.map =
2727- let open Jsont.Object.Mems in
2828- let dec_empty () = [] in
2929- let dec_add _meta (name : string) value acc =
3030- ((name, Jsont.Meta.none), value) :: acc
3131- in
3232- let dec_finish _meta mems =
3333- List.rev_map (fun ((name, _meta), value) -> (name, value)) mems
3434- in
3535- let enc =
3636- {
3737- enc =
3838- (fun (type acc)
3939- (f : Jsont.Meta.t -> string -> Jsont.json -> acc -> acc)
4040- unknown
4141- (acc : acc)
4242- ->
4343- List.fold_left
4444- (fun acc (name, value) -> f Jsont.Meta.none name value acc)
4545- acc unknown);
4646- }
4747- in
4848- map ~kind:"Unknown members" Jsont.json ~dec_empty ~dec_add ~dec_finish ~enc
4949- in
5025 let create_obj type_ url unknown = create ~type_ ~url ~unknown () in
5126 Jsont.Object.map ~kind ~doc create_obj
5227 |> Jsont.Object.mem "type" Jsont.string ~enc:type_
5328 |> Jsont.Object.mem "url" Jsont.string ~enc:url
5454- |> Jsont.Object.keep_unknown unknown_mems ~enc:unknown
2929+ |> Jsont.Object.keep_unknown Jsont.json_mems ~enc:unknown
5530 |> Jsont.Object.finish
+3-3
lib/hub.mli
···1717(** {1 Unknown Fields} *)
18181919module Unknown : sig
2020- type t = (string * Jsont.json) list
2121- (** Unknown/unrecognized JSON object members. Useful for preserving fields
2222- from custom extensions or future spec versions. *)
2020+ type t = Jsont.json
2121+ (** Unknown/unrecognized JSON object members as a generic JSON object.
2222+ Useful for preserving fields from custom extensions or future spec versions. *)
23232424 val empty : t
2525 (** [empty] is the empty list of unknown fields. *)
+4-30
lib/item.ml
···44 ---------------------------------------------------------------------------*)
5566module Unknown = struct
77- type t = (string * Jsont.json) list
77+ type t = Jsont.json
8899- let empty = []
1010- let is_empty = function [] -> true | _ -> false
99+ let empty = Jsont.Object ([], Jsont.Meta.none)
1010+ let is_empty = function Jsont.Object ([], _) -> true | _ -> false
1111end
12121313type content = [ `Html of string | `Text of string | `Both of string * string ]
···166166 let enc_references t = t.references in
167167 let enc_unknown t = t.unknown in
168168169169- let unknown_mems :
170170- (Unknown.t, Jsont.json, Jsont.mem list) Jsont.Object.Mems.map =
171171- let open Jsont.Object.Mems in
172172- let dec_empty () = [] in
173173- let dec_add _meta (name : string) value acc =
174174- ((name, Jsont.Meta.none), value) :: acc
175175- in
176176- let dec_finish _meta mems =
177177- List.rev_map (fun ((name, _meta), value) -> (name, value)) mems
178178- in
179179- let enc =
180180- {
181181- enc =
182182- (fun (type acc)
183183- (f : Jsont.Meta.t -> string -> Jsont.json -> acc -> acc)
184184- unknown
185185- (acc : acc)
186186- ->
187187- List.fold_left
188188- (fun acc (name, value) -> f Jsont.Meta.none name value acc)
189189- acc unknown);
190190- }
191191- in
192192- map ~kind:"Unknown members" Jsont.json ~dec_empty ~dec_add ~dec_finish ~enc
193193- in
194194-195169 Jsont.Object.map ~kind ~doc make_from_json
196170 |> Jsont.Object.mem "id" Jsont.string ~enc:enc_id
197171 |> Jsont.Object.opt_mem "content_html" Jsont.string ~enc:enc_content_html
···214188 (Jsont.list Reference.jsont)
215189 ~enc:enc_references
216190 |> Jsont.Object.opt_mem "_extensions" Jsont.json_object ~enc:(fun _t -> None)
217217- |> Jsont.Object.keep_unknown unknown_mems ~enc:enc_unknown
191191+ |> Jsont.Object.keep_unknown Jsont.json_mems ~enc:enc_unknown
218192 |> Jsont.Object.finish
+3-3
lib/item.mli
···2727(** {1 Unknown Fields} *)
28282929module Unknown : sig
3030- type t = (string * Jsont.json) list
3131- (** Unknown/unrecognized JSON object members. Useful for preserving fields
3232- from custom extensions or future spec versions. *)
3030+ type t = Jsont.json
3131+ (** Unknown/unrecognized JSON object members as a generic JSON object.
3232+ Useful for preserving fields from custom extensions or future spec versions. *)
33333434 val empty : t
3535 (** [empty] is the empty list of unknown fields. *)
+4-29
lib/jsonfeed.ml
···1212module Item = Item
13131414module Unknown = struct
1515- type t = (string * Jsont.json) list
1515+ type t = Jsont.json
16161717- let empty = []
1818- let is_empty = function [] -> true | _ -> false
1717+ let empty = Jsont.Object ([], Jsont.Meta.none)
1818+ let is_empty = function Jsont.Object ([], _) -> true | _ -> false
1919end
20202121type t = {
···8585let jsont =
8686 let kind = "JSON Feed" in
8787 let doc = "A JSON Feed document" in
8888- let unknown_mems :
8989- (Unknown.t, Jsont.json, Jsont.mem list) Jsont.Object.Mems.map =
9090- let open Jsont.Object.Mems in
9191- let dec_empty () = [] in
9292- let dec_add _meta (name : string) value acc =
9393- ((name, Jsont.Meta.none), value) :: acc
9494- in
9595- let dec_finish _meta mems =
9696- List.rev_map (fun ((name, _meta), value) -> (name, value)) mems
9797- in
9898- let enc =
9999- {
100100- enc =
101101- (fun (type acc)
102102- (f : Jsont.Meta.t -> string -> Jsont.json -> acc -> acc)
103103- unknown
104104- (acc : acc)
105105- ->
106106- List.fold_left
107107- (fun acc (name, value) -> f Jsont.Meta.none name value acc)
108108- acc unknown);
109109- }
110110- in
111111- map ~kind:"Unknown members" Jsont.json ~dec_empty ~dec_add ~dec_finish ~enc
112112- in
1138811489 (* Helper constructor that sets version automatically *)
11590 let make_from_json _version title home_page_url feed_url description
···149124 |> Jsont.Object.opt_mem "expired" Jsont.bool ~enc:expired
150125 |> Jsont.Object.opt_mem "hubs" (Jsont.list Hub.jsont) ~enc:hubs
151126 |> Jsont.Object.mem "items" (Jsont.list Item.jsont) ~enc:items
152152- |> Jsont.Object.keep_unknown unknown_mems ~enc:unknown
127127+ |> Jsont.Object.keep_unknown Jsont.json_mems ~enc:unknown
153128 |> Jsont.Object.finish
154129155130(* Encoding and Decoding *)
+3-3
lib/jsonfeed.mli
···1717 optional fields. *)
18181919module Unknown : sig
2020- type t = (string * Jsont.json) list
2121- (** Unknown or unrecognized JSON object members. Useful for preserving fields
2222- from custom extensions or future spec versions. *)
2020+ type t = Jsont.json
2121+ (** Unknown or unrecognized JSON object members as a generic JSON object.
2222+ Useful for preserving fields from custom extensions or future spec versions. *)
23232424 val empty : t
2525 (** [empty] is the empty list of unknown fields. *)
+4-29
lib/reference.ml
···44 ---------------------------------------------------------------------------*)
5566module Unknown = struct
77- type t = (string * Jsont.json) list
77+ type t = Jsont.json
8899- let empty = []
1010- let is_empty = function [] -> true | _ -> false
99+ let empty = Jsont.Object ([], Jsont.Meta.none)
1010+ let is_empty = function Jsont.Object ([], _) -> true | _ -> false
1111end
12121313type t = {
···3434let jsont =
3535 let kind = "Reference" in
3636 let doc = "A reference to a cited source" in
3737- let unknown_mems :
3838- (Unknown.t, Jsont.json, Jsont.mem list) Jsont.Object.Mems.map =
3939- let open Jsont.Object.Mems in
4040- let dec_empty () = [] in
4141- let dec_add _meta (name : string) value acc =
4242- ((name, Jsont.Meta.none), value) :: acc
4343- in
4444- let dec_finish _meta mems =
4545- List.rev_map (fun ((name, _meta), value) -> (name, value)) mems
4646- in
4747- let enc =
4848- {
4949- enc =
5050- (fun (type acc)
5151- (f : Jsont.Meta.t -> string -> Jsont.json -> acc -> acc)
5252- unknown
5353- (acc : acc)
5454- ->
5555- List.fold_left
5656- (fun acc (name, value) -> f Jsont.Meta.none name value acc)
5757- acc unknown);
5858- }
5959- in
6060- map ~kind:"Unknown members" Jsont.json ~dec_empty ~dec_add ~dec_finish ~enc
6161- in
6237 let create_obj url doi cito unknown = create ~url ?doi ?cito ~unknown () in
6338 Jsont.Object.map ~kind ~doc create_obj
6439 |> Jsont.Object.mem "url" Jsont.string ~enc:url
6540 |> Jsont.Object.opt_mem "doi" Jsont.string ~enc:doi
6641 |> Jsont.Object.opt_mem "cito" (Jsont.list Cito.jsont) ~enc:cito
6767- |> Jsont.Object.keep_unknown unknown_mems ~enc:unknown
4242+ |> Jsont.Object.keep_unknown Jsont.json_mems ~enc:unknown
6843 |> Jsont.Object.finish
+3-3
lib/reference.mli
···1919(** {1 Unknown Fields} *)
20202121module Unknown : sig
2222- type t = (string * Jsont.json) list
2323- (** Unknown/unrecognized JSON object members. Useful for preserving fields
2424- from custom extensions or future spec versions. *)
2222+ type t = Jsont.json
2323+ (** Unknown/unrecognized JSON object members as a generic JSON object.
2424+ Useful for preserving fields from custom extensions or future spec versions. *)
25252626 val empty : t
2727 (** [empty] is the empty list of unknown fields. *)