Re: EOF handling, and reading zero/one/many values
Lassi Kortela 21 Jan 2020 22:33 UTC
>>> I propose that if json-reader gets an eof-object before reading
>>> any part of a JSON value, that it return the eof-object.
>>
>> What is the rationale?
>
> To allow you to create a loop that reads multiple JSON representations
> from an input stream and has a clear way to terminate the loop rather
> than having to catch an exception.
Agreed. These cases would be useful to support with standard procedures:
1. Read at most one JSON value from port.
- Return eof-object if there are no values.
2. Read exactly one JSON value from port.
- Error if there are no values.
- Error if there is more than one value.
The natural implementation of 2 is a simple wrapper around 1, so it's
nice to expose 1 to users of the library as well.
This may be too fancy:
3. Read all JSON values from port and return them as a list.
- Return empty list if there are no values.
The natural name for procedure 2 is `json-read`, which is in the current
draft (though the draft doesn't say what the procedure does if it
encounters end-of-file or more than one value).
One natural name for procedure 1 is `json-read?` with a question mark,
by analogy to the question mark in regexps. Scheme uses ? for
predicates, so it can be a bit misleading. Another possible name:
`json-read-maybe`.
Or procedure 1 could be called `json-read` (after all, Scheme `read`
returns eof-object if it doesn't find any more data). And procedure 2
could then be called `json-read-one` or `json-read-1` or something.