Generate srcset images for a variety of resolutions from OCaml
at 03916e12be55ca1aefdb4e08fc22b2789689a0c4 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 *) 17 18module MS = Map.Make (String) 19 20type t = { 21 name : string; 22 slug : string; 23 origin : string; 24 dims : int * int; 25 variants : (int * int) MS.t; 26} 27 28let v name slug origin variants dims = { name; slug; origin; variants; dims } 29let origin { origin; _ } = origin 30let slug { slug; _ } = slug 31let name { name; _ } = name 32let dims { dims; _ } = dims 33let variants { variants; _ } = variants 34 35let dims_json_t = 36 let open Jsont in 37 let dec x y = (x, y) in 38 let enc (w, h) = function 0 -> w | _ -> 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 es = Jsont_bytesrw.encode_string list ~format:Jsont.Indent es 54let list_of_json = Jsont_bytesrw.decode_string list