mirror of https://github.com/Wilfred/difftastic/
27 lines
958 B
Plaintext
27 lines
958 B
Plaintext
// An "opaque" error is used as a portable error type for an underlying error
|
|
// which is implementation-specific. It provides a function which can be used to
|
|
// produce a string describing the error, and a small storage area for arbitrary
|
|
// implementation-specific storage.
|
|
//
|
|
// The following example shows the usage of this type for custom errors:
|
|
//
|
|
// fn wraperror(err: myerror) error::opaque = {
|
|
// static assert(size(myerror) <= size(error::opaque_data));
|
|
// let wrapped = opaque { strerror = &opaque_strerror, ... };
|
|
// let myptr = &wrapped.data: *myerror;
|
|
// *myptr = err;
|
|
// };
|
|
//
|
|
// fn opaque_strerror(err: *opaque_data) const str = {
|
|
// let ptr = &err: *myerr;
|
|
// return strerror(*ptr);
|
|
// };
|
|
export type opaque = struct {
|
|
strerror: *fn(op: *opaque_data) const str,
|
|
data: opaque_data,
|
|
}!;
|
|
|
|
// Up to 24 bytes of arbitrary data that the opaque error type may use for
|
|
// domain-specific storage.
|
|
export type opaque_data = [24]u8;
|