import { expected, success } from '../result'; import { create, Codec } from '../runtype'; export interface Enum extends Codec { readonly tag: 'enum'; readonly enumObject: TEnum; } export function Enum( name: string, e: TEnum, ): Enum { const values = Object.values(e); const enumValues = new Set( values.some(v => typeof v === 'number') ? values.filter(v => typeof v === 'number') : values, ); return create>( 'enum', value => (enumValues.has(value as any) ? success(value as any) : expected(name, value)), { enumObject: e, show: () => name, }, ); }