JSON.parse_machine: def of qasim-bend-kit@0.1.0.2 Import: import qasim-bend-kit@0.1.0.2/libs/JSON.bend as JSON Lines 697-816 of qasim-bend-kit@0.1.0.2/libs/JSON.bend: https://jend.leeeet.dev/read.txt?path=qasim-bend-kit@0.1.0.2/libs/JSON.bend&start_line=697&end_line=816 import Base def parse_machine(fuel: Nat, state: ParserState) -> Result<&1, &1, Error, Parsed>: match fuel: case 0n: Fail{Error{}} case 1n+p: match state: case Complete{parsed}: Done{parsed} case ParseValue{+clean, +kont}: match clean: case SNil{}: Fail{Error{}} case SCon{+h, +t}: match h: case 'n': parse_machine(p, ParsedResult{null_token(clean, String.starts_with(clean, "null")), kont}) case 't': parse_machine(p, ParsedResult{true_token(clean, String.starts_with(clean, "true")), kont}) case 'f': parse_machine(p, ParsedResult{false_token(clean, String.starts_with(clean, "false")), kont}) case '"': +budget = p parse_machine(budget, StringResult{scan_string_machine(budget, ScanText{t, SNil{}}), kont}) case '[': parse_machine(p, ArrayStart{whitespace(t), Nil{}, True{}, kont}) case '{': parse_machine(p, ObjectStart{whitespace(t), Nil{}, True{}, kont}) case '-': parse_machine(p, ParsedResult{parse_number(clean), kont}) case _: parse_machine(p, ParsedResult{number_from_digit(clean, Char.is_digit(h)), kont}) case ParsedResult{result, kont}: match result: case Fail{e}: Fail{e} case Done{parsed}: match parsed: case Parsed{value, rest}: parse_machine(p, resume_value(value, rest, kont)) case StringResult{result, kont}: match result: case Fail{e}: Fail{e} case Done{scan}: match scan: case StringScan{value, rest}: parse_machine(p, resume_value(Str{value}, rest, kont)) case ArrayStart{clean, acc, empty_allowed, kont}: match clean: case SNil{}: Fail{Error{}} case SCon{h, t}: match h: case ']': match empty_allowed: case True{}: parse_machine(p, resume_value(Arr{List.reverse(&2, Value, acc)}, t, kont)) case False{}: Fail{Error{}} case _: parse_machine(p, ParseValue{clean, InArray{acc, kont}}) case ArrayAfter{value, clean, acc, kont}: match clean: case SNil{}: Fail{Error{}} case SCon{h, t}: match h: case ']': parse_machine(p, resume_value(Arr{List.reverse(&2, Value, value <> acc)}, t, kont)) case ',': parse_machine(p, ArrayStart{whitespace(t), value <> acc, False{}, kont}) case _: Fail{Error{}} case ObjectStart{clean, acc, empty_allowed, kont}: match clean: case SNil{}: Fail{Error{}} case SCon{h, t}: match h: case '}': match empty_allowed: case True{}: parse_machine(p, resume_value(Obj{List.reverse(&2, Sigma<&2, &2, String, key => Value>, acc)}, t, kont)) case False{}: Fail{Error{}} case '"': +budget = p parse_machine(budget, ObjectKey{scan_string_machine(budget, ScanText{t, SNil{}}), acc, kont}) case _: Fail{Error{}} case ObjectKey{result, acc, kont}: match result: case Fail{e}: Fail{e} case Done{scan}: match scan: case StringScan{key, rest}: parse_machine(p, ObjectColon{key, whitespace(rest), acc, kont}) case ObjectColon{key, clean, acc, kont}: match clean: case SNil{}: Fail{Error{}} case SCon{h, t}: match h: case ':': parse_machine(p, ParseValue{whitespace(t), InObject{key, acc, kont}}) case _: Fail{Error{}} case ObjectAfter{key, value, clean, acc, kont}: match clean: case SNil{}: Fail{Error{}} case SCon{h, t}: match h: case '}': parse_machine(p, resume_value(Obj{List.reverse(&2, Sigma<&2, &2, String, key => Value>, (key, value) <> acc)}, t, kont)) case ',': parse_machine(p, ObjectStart{whitespace(t), (key, value) <> acc, False{}, kont}) case _: Fail{Error{}} Uses (28): https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Bool https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Char https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Char.is_digit https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=List https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=List.reverse https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Nat https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Result https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Sigma https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=String https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=String.starts_with https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=U32 https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Word.Con https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Word.Nil https://jend.leeeet.dev/definition.txt?path=qasim-bend-kit@0.1.0.2/libs/JSON.bend&name=Error https://jend.leeeet.dev/definition.txt?path=qasim-bend-kit@0.1.0.2/libs/JSON.bend&name=Parsed https://jend.leeeet.dev/definition.txt?path=qasim-bend-kit@0.1.0.2/libs/JSON.bend&name=ParserKont https://jend.leeeet.dev/definition.txt?path=qasim-bend-kit@0.1.0.2/libs/JSON.bend&name=ParserState https://jend.leeeet.dev/definition.txt?path=qasim-bend-kit@0.1.0.2/libs/JSON.bend&name=StringScan https://jend.leeeet.dev/definition.txt?path=qasim-bend-kit@0.1.0.2/libs/JSON.bend&name=StringScanState https://jend.leeeet.dev/definition.txt?path=qasim-bend-kit@0.1.0.2/libs/JSON.bend&name=Value https://jend.leeeet.dev/definition.txt?path=qasim-bend-kit@0.1.0.2/libs/JSON.bend&name=false_token https://jend.leeeet.dev/definition.txt?path=qasim-bend-kit@0.1.0.2/libs/JSON.bend&name=null_token https://jend.leeeet.dev/definition.txt?path=qasim-bend-kit@0.1.0.2/libs/JSON.bend&name=number_from_digit https://jend.leeeet.dev/definition.txt?path=qasim-bend-kit@0.1.0.2/libs/JSON.bend&name=parse_number https://jend.leeeet.dev/definition.txt?path=qasim-bend-kit@0.1.0.2/libs/JSON.bend&name=resume_value https://jend.leeeet.dev/definition.txt?path=qasim-bend-kit@0.1.0.2/libs/JSON.bend&name=scan_string_machine https://jend.leeeet.dev/definition.txt?path=qasim-bend-kit@0.1.0.2/libs/JSON.bend&name=true_token https://jend.leeeet.dev/definition.txt?path=qasim-bend-kit@0.1.0.2/libs/JSON.bend&name=whitespace