use types::c; // Returned when an error occurs in an SDL function. export type error = !str; // Converts an SDL error into a human-friendly string. export fn strerror(err: error) str = { return err: str; }; @symbol("SDL_GetError") fn SDL_GetError() const *c::char; export fn wrapvoid(ret: int) (void | error) = { wrapint(ret)?; }; export fn wrapint(ret: int) (int | error) = { if (ret < 0) { return c::tostr(SDL_GetError()): error; }; return ret; }; export fn wrapptr(ret: nullable *opaque) (*opaque | error) = { match (ret) { case let v: *opaque => return v; case null => return c::tostr(SDL_GetError()): error; }; };