ucg/std/schema.ucg

16 lines
352 B
Plaintext
Raw Normal View History

let one_of = module {
val=NULL,
types=[],
} => {
let reducer = macro(acc, t) => acc{
ok = acc.ok || (acc.val is t),
};
let any = macro(val, types) => reduce reducer {ok=false, val=val}, types;
let result = any(mod.val, mod.types).ok;
};
let must = macro(m, msg) => select m.result, fail msg, {
true = m.result,
};