UNPKG

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
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; }