-record(codec, { to_json :: fun((any()) -> gleam@json:json()), from_json :: fun((gleam@dynamic:dynamic()) -> {ok, any()} | {error, list(gleam@dynamic:decode_error())}) }).