Every case carries a PathStep so the walk that produced the failure can point at the specific cursor position that refused. The default enum toString keeps the structural representation for testability; message gives a human-readable diagnostic.
Input String didn't parse as JSON. Surfaced only by the Json | String overloads; when the caller passes a Json directly this case cannot fire. The wrapped ParsingFailure carries circe's line/column diagnostics.
Input String didn't parse as JSON. Surfaced only by the Json | String overloads; when the caller passes a Json directly this case cannot fire. The wrapped ParsingFailure carries circe's line/column diagnostics.