option-t
Version:
A toolkit of Nullable/Option/Result type implementation in ECMAScript. Their APIs are inspired by Rust's `Option<T>` and `Result<T, E>`.
94 lines (93 loc) • 3.17 kB
JavaScript
import { isNotNullOrUndefined, } from '../../maybe/core/maybe.js';
import { isNotNull, expectNotNull, } from '../../nullable/core/nullable.js';
import { expectNotUndefined, isNotUndefined, } from '../../undefinable/core/undefinable.js';
import { createSome, createNone, isSome, unwrapSome, } from '../plain_option/option.js';
import { createClassicNone, createClassicSome } from './classic_option.js';
/**
* Return `PlainOption`'s `Some(T)` with the inner T if _classic_ is `ClassicSome(T)`.
* Otherwise, return `PlainOption`'s `None`.
*/
export function compatToPlainOption(classic) {
if (classic.isSome) {
const val = classic.unwrap();
const result = createSome(val);
return result;
}
const result = createNone();
return result;
}
/**
* Return `ClassicNone` if _plain_ is `PlainOption`'s `None`.
* Otherwise, return `ClassicSome(T)` with _plain_'s inner value `T`.
*/
export function compatToClassicOption(plain) {
if (isSome(plain)) {
const val = unwrapSome(plain);
const result = createClassicSome(val);
return result;
}
const result = createClassicNone();
return result;
}
const ERR_MSG_CANNOT_CONVERT_TO_NULLABLE = `ClassicOption<T>'s inner value is null. This type cannot be converted to Nullable<T>`;
/**
* Return the inner `T` if _input_ is `ClassicSome(T)`.
* Otherwise, return `null.
*/
export function compatToNullableFromClassicOption(input) {
if (input.isNone) {
return null;
}
const inner = input.unwrap();
const value = expectNotNull(inner, ERR_MSG_CANNOT_CONVERT_TO_NULLABLE);
return value;
}
/**
* Return `ClassicNone` if _input_ is `null`.
* Otherwise, return `ClassicSome(T)` with _input_ `T`.
*/
export function compatToClassicOptionFromNullable(input) {
if (isNotNull(input)) {
const result = createClassicSome(input);
return result;
}
const result = createClassicNone();
return result;
}
const ERR_MSG_CANNOT_CONVERT_TO_UNDEFINABLE = `ClassicOption<T>'s inner value is undefined. This type cannot be converted to Undefinable<T>`;
/**
* Return the inner `T` if _input_ is `ClassicSome(T)`.
* Otherwise, return `null.
*/
export function compatToUndefinableFromClassicOption(input) {
if (input.isNone) {
return undefined;
}
const inner = input.unwrap();
const value = expectNotUndefined(inner, ERR_MSG_CANNOT_CONVERT_TO_UNDEFINABLE);
return value;
}
/**
* Return `ClassicNone` if _input_ is `undefined`.
* Otherwise, return `ClassicSome(T)` with _input_ `T`.
*/
export function compatToClassicOptionFromUndefinable(input) {
if (isNotUndefined(input)) {
const result = createClassicSome(input);
return result;
}
const result = createClassicNone();
return result;
}
/**
* Return `ClassicNone` if _input_ is `null` or `undefined`.
* Otherwise, return `ClassicSome(T)` with _input_ `T`.
*/
export function compatToClassicOptionFromMaybe(input) {
if (isNotNullOrUndefined(input)) {
const result = createClassicSome(input);
return result;
}
const result = createClassicNone();
return result;
}