rust-result.js
Mimic Rust's std::result
.
Installation
npm install rust-result
Usage
var fs = require('fs');
var Result = require('./');
// If you want async just get a promise or something.
var readFile = function (path, encoding) {
try {
return Result.Ok(fs.readFileSync(path, encoding))
}
catch (ex) {
return Result.Err(ex)
}
}
var result = readFile(__filename);
var v, err;
if (Result.isOk(result)) {
v = Result.Ok(result);
console.log('got ' + v.length + ' bytes')
}
else if (Result.isErr(result)) {
err = Result.Err(result);
console.error('oops!', err.message)
}
result = readFile(__filename + 'I do not exist')
if (Result.isOk(result)) {
v = Result.Ok(result)
console.log('got ' + v.length + ' bytes')
}
else if (Result.isErr(result)) {
err = Result.Err(result)
console.error('oops!', err.message)
}
Documentation
type OkResult<T> : {
v: T
}
type ErrResult<E <: Error> : {
err: E
}
rust-result : {
Ok: ((T) => OkResult<T>) |
((OkResult<T>) => T) |
((ErrResult<E>) => void),
isOk: ((OkResult<T>) => true) |
((ErrResult<E>) => false)
Err: ((E <: Error) => ErrResult<E>) |
((ErrResult<E>) => E) |
((OkResult<T>) => void),
isErr: ((ErrResult<E>) => true) |
((OkResult<T>) => false)
}
Result.Ok
The Result.Ok
function is overloaded to do one of two things.
It can create a new Ok
instance or it can check whether
the argument is an instance of Ok
If you call Result.Ok
with a plain value it will return an
instance of Ok
that boxes your plain value.
If you call Result.Ok
with either an Err
or an Ok
instance
then it will return undefined
for the Err
and return the
value boxed in the Ok
Result.isOk
The Result.isOk
function just checks whether the argument
is an instance of Ok
.
This predicate function returns true if you pass it an Ok
and
returns false if you pass it an Err
Result.Err
The Result.Err
function is overloaded to do one of two things.
It can create a new Err
instance or it can check whether
the argument is an instance of Err
If you call Result.Err
with a plain error it will return an
instance of Err
that boxes your plain error.
If you call Result.Err
with either an Err
or an Ok
instance
then it will return undefined
for the Ok
and return the
value err in the Err
Result.isErr
The Result.isErr
function just checks whether the argument
is an instance of Err
.
This predicate function returns true if you pass it an Err
and
returns false if you pass it an Ok