Generate srcset images for a variety of resolutions from OCaml
at main 54 lines 1.8 kB view raw
1(* Copyright (c) 2024, Anil Madhavapeddy <anil@recoil.org> 2 3 Permission to use, copy, modify, and/or distribute this software for 4 any purpose with or without fee is hereby granted, provided that the 5 above copyright notice and this permission notice appear in all 6 copies. 7 8 THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL 9 WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED 10 WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE 11 AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL 12 DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA 13 OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 14 TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 15 PERFORMANCE OF THIS SOFTWARE. *) 16 17module MS = Map.Make (String) 18 19type t = { 20 name : string; 21 slug : string; 22 origin : string; 23 dims : int * int; 24 variants : (int * int) MS.t; 25} 26 27let v name slug origin variants dims = { name; slug; origin; variants; dims } 28let name t = t.name 29let slug t = t.slug 30let origin t = t.origin 31let dims t = t.dims 32let variants t = t.variants 33 34(** JSON codec for dimension pairs, encoded as a 2-element array. *) 35let dims_json_t = 36 let open Jsont in 37 let dec w h = (w, h) in 38 let enc (w, h) i = if i = 0 then w else h in 39 t2 ~dec ~enc uint16 40 41let json_t = 42 let open Jsont in 43 let open Jsont.Object in 44 map ~kind:"Entry" v 45 |> mem "name" string ~enc:name 46 |> mem "slug" string ~enc:slug 47 |> mem "origin" string ~enc:origin 48 |> mem "variants" (as_string_map dims_json_t) ~enc:variants 49 |> mem "dims" dims_json_t ~enc:dims 50 |> finish 51 52let list = Jsont.list json_t 53let list_to_json entries = Jsont_bytesrw.encode_string list ~format:Jsont.Indent entries 54let list_of_json = Jsont_bytesrw.decode_string list