123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- var Individual = require('individual')
- var VERSION_KEY = '1';
- var ERROR_CACHE_KEY = '__RUST_RESULT_ERROR_UUID@' + VERSION_KEY
- var OK_CACHE_KEY = '__RUST_RESULT_OK_UUID@' + VERSION_KEY
- var ERROR_UUID = Individual(ERROR_CACHE_KEY, fakeUUID('Error'))
- var OK_UUID = Individual(OK_CACHE_KEY, fakeUUID('Ok'))
- function Ok(v) {
- this.v = v
- this[OK_UUID] = true
- }
- function Err(err) {
- this.err = err
- this[ERROR_UUID] = true
- }
- function createOk(v) {
- if (isObject(v) && OK_UUID in v) {
- return v.v
- } else if (isObject(v) && ERROR_UUID in v) {
- return undefined
- } else {
- if (v === undefined) {
- throw Error('rust-result: Cannot box `undefined` in Result.Ok')
- }
- return new Ok(v)
- }
- }
- function createErr(err) {
- if (isObject(err) && ERROR_UUID in err) {
- return err.err
- } else if (isObject(err) && OK_UUID in err) {
- return undefined
- } else {
- if (!isError(err)) {
- throw Error('rust-result: Cannot box a non-error in Result.Err')
- }
- return new Err(err)
- }
- }
- function isOk(v) {
- return createOk(v) !== undefined
- }
- function isErr(err) {
- return createErr(err) !== undefined
- }
- module.exports = {
- isOk: isOk,
- Ok: createOk,
- isErr: isErr,
- Err: createErr
- }
- function fakeUUID(word) {
- return 'rust-result:' + word + ':' +
- Math.random().toString(32).slice(2) + ':' +
- Math.random().toString(32).slice(2) + ':' +
- Math.random().toString(32).slice(2) + ':' +
- Math.random().toString(32).slice(2) + ':'
- }
- function isObject(o) {
- return typeof o === 'object' && o !== null
- }
- function isError(e) {
- return isObject(e) &&
- (Object.prototype.toString.call(e) === '[object Error]' ||
- /* istanbul ignore next */ e instanceof Error)
- }
|