[−][src]Crate lark_error
Types for tracking errors through queries.
Here is how it works:
- Queries that can themselves report errors return
WithError<T>
; the errors contained in that value were discovered during executing that query. - If another query uses the result of a query that returns
WithError
, it can just useinto_value
to ignore the errors --WithError
always includes some form of sentinel value that you can use (i.e., you can just ignore the errors and try to get on with life). - In the worst case, one can you
Result<T, ErrorReported>
and haveErr(ErrorReported)
act as a sentintel value for "failed to produce a value because of some error". This is not preferred because now downstream queries have to care whether you propagated an error or not, but sometimes it's the best/easiest thing to do.- To help with this, the
or_sentinel!
query acts as a kind of?
operator for bridging aResult<T, ErrorReported>
into aU
whereU
has a proper sentinel -- if the result isErr(ErrorReported)
, it creates the error-sentinel forU
and returns it. - This relies on the
ErrorSentinel
trait, which defines the error-sentinel for a given type.
- To help with this, the
This scheme is not the most ergonomic and I would like to change it, but it will do for now. -nikomatsakis
Macros
or_return_sentinel | A kind of |
Structs
Diagnostic | A span with an associated label. TODO: We may want to merge this with what's available in error reporting |
ErrorReported | Unit type used in |
WithError | Used to indicate an operation that may report an error. Note that
there is a subtle -- but important! -- difference between
|
Traits
ErrorSentinel | |
ResultExt |