mutoid
Version:
Reactive library for data fetching, caching, state management
20 lines (19 loc) • 663 B
JavaScript
import * as t from 'io-ts';
const initLiteral = t.literal('init');
const submittedLiteral = t.literal('submitted');
const failLiteral = t.literal('fail');
const doneLiteral = t.literal('done');
export function resourceT(failCodec, doneCodec, name = `Resource<${failCodec.name}, ${doneCodec.name}>`) {
return t.union([
t.strict({ _tag: initLiteral }),
t.strict({ _tag: submittedLiteral }),
t.strict({
_tag: failLiteral,
error: failCodec,
}, `Fail<${failCodec.name}>`),
t.strict({
_tag: doneLiteral,
data: doneCodec,
}, `Right<${doneCodec.name}>`),
], name);
}