package oxbow

  1. Overview
  2. Docs
Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source

Source file extent.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
open! Ppx_yojson_conv_lib.Yojson_conv

type t =
  | Px of int [@name "px"]
  | Pct of float [@name "pct"]
[@@deriving yojson]

let resolve ~ref:reference = function
  | Px n -> n
  | Pct f ->
    let r = float_of_int reference in
    f /. 100. *. r |> Float.round |> int_of_float
;;

let to_string = function
  | Px n -> Printf.sprintf "%d" n
  | Pct f -> Printf.sprintf "%f%%" f
;;

let of_string str =
  let error = Error (Printf.sprintf "bad extent: %s" str) in
  match String.trim str with
  | s when String.ends_with ~suffix:"%" s ->
    (match String.split_on_char '%' s with
     | s :: _ ->
       (match float_of_string_opt s with
        | None -> error
        | Some f -> Ok (Pct f))
     | _ -> error)
  | s ->
    (match int_of_string_opt s with
     | None -> error
     | Some n -> Ok (Px n))
;;