Template
Example use of this module
module Items = struct
type t = string list
let to_key_value_pairs items =
let items =
List.map ~f:(fun item -> Printf.sprintf "- %s" item) items
|> String.concat ~sep:"\n"
in
[ "items", items ]
;;
end
module ItemsTemplate = Make (Items)
module Person = struct
type t =
{ name : string
; age : int
; items : string list
}
let items_template = ItemsTemplate.create {|items
-----------
{{items}}|}
let to_key_value_pairs person =
[ "name", person.name
; "age", Int.to_string person.age
; "items", ItemsTemplate.render items_template person.items
]
;;
end
module PersonTemplate = Make (Person)
let template =
PersonTemplate.create
{|
Hello, {{ name }}!
Your age is {{ age }}.
What do You need from this list
{{items}}
|}
let person =
{ Person.name = "John Doe"; age = 30; items = [ "milk"; "eggs"; "toast" ] }
let rendered = PersonTemplate.render template person
let () = printf "%s\n" rendered;
"Hello, John Doe!
Your age is 30.
What do You need from this list
items
-----------
- milk
- eggs
- toast"
module type RENDERABLE = sig ... end
The RENDERABLE module type defines an interface for types that can be converted to key-value pairs for use in templating.
module Make_Template (R : RENDERABLE) : sig ... end
The Make functor creates a templating module for a given RENDERABLE type. Supports variable replacement with the syntax {{variable}}
module type PARSABLE = sig ... end
module Make_parser (P : PARSABLE) : sig ... end