diff --git a/src/parsers.ts b/src/parsers.ts index 850b6a3..16b9513 100644 --- a/src/parsers.ts +++ b/src/parsers.ts @@ -6,6 +6,7 @@ export * from './parsers/float' export * from './parsers/integer' export * from './parsers/letter' export * from './parsers/nothing' +export * from './parsers/oneOf' export * from './parsers/regexp' export * from './parsers/rest' export * from './parsers/run' diff --git a/src/parsers/oneOf.ts b/src/parsers/oneOf.ts new file mode 100644 index 0000000..906a01c --- /dev/null +++ b/src/parsers/oneOf.ts @@ -0,0 +1,26 @@ +import { type Parser } from '../state' + +export function oneOf(chars: string): Parser { + const charset = [...chars] + + return { + parse(input, pos) { + const nextPos = pos + 1 + const char = input.substring(pos, nextPos) + + if (charset.includes(char)) { + return { + isOk: true, + pos: nextPos, + value: char + } + } + + return { + isOk: false, + pos, + expected: `one of: ${charset.join(', ')}` + } + } + } +}