package sihl-type
Source file email_template.ml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47type t = { id : string ; name : string ; content_text : string ; content_html : string ; created_at : Ptime.t [@to_yojson Sihl_core.Time.ptime_to_yojson] [@of_yojson Sihl_core.Time.ptime_of_yojson] } [@@deriving yojson, show, eq, fields] let set_name name template = { template with name } let set_text content_text template = { template with content_text } let set_html content_html template = { template with content_html } let make ?text ?html name = { id = Uuidm.v `V4 |> Uuidm.to_string ; name ; content_text = text |> Option.value ~default:"" ; content_html = html |> Option.value ~default:"" ; created_at = Ptime_clock.now () } ;; let replace_element str k v = let regexp = Str.regexp @@ "{" ^ k ^ "}" in Str.global_replace regexp v str ;; let render data template = let rec render_value data value = match data with | [] -> value | (k, v) :: data -> render_value data @@ replace_element value k v in let text = render_value data template.content_text in let html = render_value data template.content_html in text, html ;; module Data = struct type t = (string * string) list [@@deriving show, eq] let empty = [] let add ~key ~value data = List.cons (key, value) data let make data = data end