diff --git a/src/kicad_sexpr/decode.gleam b/src/kicad_sexpr/decode.gleam index 048019e..5150369 100644 --- a/src/kicad_sexpr/decode.gleam +++ b/src/kicad_sexpr/decode.gleam @@ -84,6 +84,16 @@ pub fn string(then next: NextFn(String, a)) -> Decoder(a) { } } +pub fn name_string(then next: NextFn(String, a)) -> Decoder(a) { + fn(sexprs: List(SExpr)) { + case sexprs { + [] -> Error(UnexpectedEndOfAttributes(String)) + [parse.Name(value), ..sexprs] -> next(value)(sexprs) + [sexpr, ..] -> Error(IncorrectExprType(got: sexpr, expected: String)) + } + } +} + pub fn float(then next: NextFn(Float, a)) -> Decoder(a) { fn(sexprs: List(SExpr)) { case sexprs { @@ -254,10 +264,10 @@ pub fn failure(error: DecodeError) -> Decoder(a) { } pub fn run( - structurer: fn(NextFn(a, a)) -> Decoder(b), + decoder: fn(NextFn(a, a)) -> Decoder(b), on source: SExpr, ) -> Result(b, DecodeError) { - use #(value, rest) <- result.try(structurer(success)([source])) + use #(value, rest) <- result.try(decoder(success)([source])) use <- bool.guard(rest != [], Error(UnexpectedTrailingAttributes(rest))) Ok(value) }