open Ppx_yojson_conv_lib.Yojson_conv.Primitives type t = { link : string; summary : string; tags : string list; published : string; author : string; } type mastodon_tag = { kind : string; [@key "type"] name : string; href : string; } [@@deriving yojson] [@@yojson.allow_extra_fields] type mastodon_object = { tag : mastodon_tag list } [@@deriving yojson] [@@yojson.allow_extra_fields] type mastodon_post = { actor : string; published : string; obj : mastodon_object; [@key "object"] } [@@deriving yojson] [@@yojson.allow_extra_fields] let post_of_mastodon_post = function | { actor; published; obj = { tag } } -> let tags = List.map (fun { name; _ } -> name) tag in { link = actor; summary = published; tags; published; author = actor } let get_tld (link : string) = Uri.of_string link |> Uri.host_with_default ~default:"" let db = ref [] let add (entry : t) = db := entry :: !db; print_endline (entry.link ^ " added to db"); print_endline ("New db size: " ^ string_of_int (List.length !db)) let get_all () = print_endline ("db size: " ^ string_of_int (List.length !db)); !db