blob: 8f41ddbf4e2aac2eb8a164d4661a7e5b3c1b3ca3 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
use errors;
use io;
// Invalid PNG data was encountered.
export type invalid = !void;
// PNG data using unsupported features was encountered.
export type unsupported = !void;
// All errors which could be returned from this module.
export type error = !(io::error | invalid | unsupported);
// Returns a human-friendly error string.
export fn strerror(err: error) const str = {
match (err) {
case let err: io::error =>
return io::strerror(err);
case invalid =>
return "Invalid PNG format";
case unsupported =>
return "Provided PNG file requires unsupported features";
};
};
fn wraperror(err: (invalid | unsupported)) errors::opaque_ = {
static assert(size((invalid | unsupported)) <= size(errors::opaque_data));
let wrapped = errors::opaque_ { strerror = &opaque_strerror, ... };
let ptr = &wrapped.data: *error;
*ptr = err;
return wrapped;
};
fn opaque_strerror(err: *errors::opaque_data) const str = {
return strerror(*(err: *(invalid | unsupported)));
};
|