open Utilities.Aliases type version = { major: int; minor: int; patch: int } type help = { short: string; long: string } type meta = { version: version; help: help; status: int } type output = { main: string; log: string } type os = Unknown | FreeBSD | Void | Alpine type host = { os: os; name: string } type schema = { meta: meta; output: output; host: host } let seed: schema = { meta = { version = { major = 0; minor = 8; patch = 0; }; help = { short = ""; long = ""; }; status = 0; }; output = { (* could be lists of strings or lists of a dedicated type with message, log level, time and origin in code (e.g. module and function) *) main = ""; log = ""; }; host = { os = Unknown; name = "Unknown Host"; }; } let format_version (version: version): string = "v" ^ str_int version.major ^ "." ^ str_int version.minor ^ "." ^ str_int version.patch