From 76825f2524a1b77c9ed1bff081c2f8b103df5920 Mon Sep 17 00:00:00 2001 From: Stavros Polymenis Date: Sun, 15 Jan 2017 10:27:20 +0000 Subject: [PATCH] improved Ymd lens interface --- src/web.ml | 2 +- src/ymd.ml | 11 ++++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/web.ml b/src/web.ml index b58f7b7..33dc193 100644 --- a/src/web.ml +++ b/src/web.ml @@ -56,7 +56,7 @@ let ymd_of_body_pairs pairs = let open Ymd in let open Lens.Infix in ListLabels.fold_left ~f:(fun a (k,vl) -> with_kv a (k, List.hd vl) ) ~init:(blank ()) pairs - |> ((ymd_meta |-- Meta.lens_date |-- Date.edited) ^= Some (Ptime_clock.now ())) + |> ((ymd_meta |-- Meta.lens_date |-- Date.lens_edited) ^= Some (Ptime_clock.now ())) let ymd_of_req req = Lwt.map ymd_of_body_pairs (App.urlencoded_pairs_of_body req) diff --git a/src/ymd.ml b/src/ymd.ml index d3034a8..a0c2d41 100644 --- a/src/ymd.ml +++ b/src/ymd.ml @@ -7,7 +7,7 @@ module Date = struct type t = { edited: Ptime.t option; published: Ptime.t option; - } [@@deriving lens] + } [@@deriving lens { prefix = true }] let rfc_string date = match date with Some t -> Ptime.to_rfc3339 t | None -> "";; @@ -80,6 +80,11 @@ module Meta = struct uuid: Id.t } [@@deriving lens { prefix = true }] + let ( |@ ) l v = Lens.Infix. ( v |. l ) + let ( |. ) = Lens.Infix.( |. ) + let ( |- ) = Lens.Infix.( |-- ) + let ( -| ) = Lens.Infix.( --| ) + let blank ?(uuid=(Id.generate ())) () = { title = ""; author = Author.({ name = ""; email = "" }); @@ -145,8 +150,8 @@ let with_meta_kv meta (k,v) = | "name" -> of_str meta (lens_author |-- Author.name ) v | "email" -> of_str meta (lens_author |-- Author.email) v | "abstract" -> of_str meta lens_abstract v - | "published" -> ((lens_date |-- Date.published) ^= Date.of_string v) meta - | "edited" -> ((lens_date |-- Date.edited ) ^= Date.of_string v) meta + | "published" -> ((lens_date |-- Date.lens_published) ^= Date.of_string v) meta + | "edited" -> ((lens_date |-- Date.lens_edited ) ^= Date.of_string v) meta | "topics" -> of_str_list meta lens_topics v | "keywords" -> of_str_list meta lens_keywords v | "categories"->