refactor(napi): Either now perform ValidateNapiValue::validate rather than type_of

This commit is contained in:
LongYinan 2022-07-05 17:00:45 +08:00
parent 81b07ce5a6
commit 53cab27bc4
No known key found for this signature in database
GPG key ID: C3666B7FC82ADAD7
28 changed files with 179 additions and 157 deletions

View file

@ -62,6 +62,7 @@ Generated by [AVA](https://avajs.dev).
export function either4(input: string | number | boolean | Obj): number␊
export function receiveClassOrNumber(either: number | JsClassForEither): number␊
export function receiveMutClassOrNumber(either: number | JsClassForEither): number␊
export function receiveDifferentClass(either: JsClassForEither | AnotherClassForEither): number␊
export function returnEitherClass(input: number): number | JsClassForEither␊
export function eitherFromOption(): JsClassForEither | undefined␊
/** default enum values are continuos i32s start from 0 */␊
@ -276,6 +277,9 @@ Generated by [AVA](https://avajs.dev).
export class JsClassForEither {␊
constructor()␊
}␊
export class AnotherClassForEither {␊
constructor()␊
}␊
export class Fib {␊
[Symbol.iterator](): Iterator<number, void, number>
constructor()␊

View file

@ -99,6 +99,8 @@ import {
overrideIndividualArgOnFunctionWithCbArg,
createObjectWithClassField,
receiveObjectWithClassField,
AnotherClassForEither,
receiveDifferentClass,
} from '../'
test('export const', (t) => {
@ -500,6 +502,13 @@ test('receive class reference in either', (t) => {
t.is(receiveMutClassOrNumber(c), 100)
})
test('receive different class', (t) => {
const a = new JsClassForEither()
const b = new AnotherClassForEither()
t.is(receiveDifferentClass(a), 42)
t.is(receiveDifferentClass(b), 100)
})
test('return either class', (t) => {
t.is(returnEitherClass(1), 1)
t.true(returnEitherClass(-1) instanceof JsClassForEither)

View file

@ -52,6 +52,7 @@ export interface Obj {
export function either4(input: string | number | boolean | Obj): number
export function receiveClassOrNumber(either: number | JsClassForEither): number
export function receiveMutClassOrNumber(either: number | JsClassForEither): number
export function receiveDifferentClass(either: JsClassForEither | AnotherClassForEither): number
export function returnEitherClass(input: number): number | JsClassForEither
export function eitherFromOption(): JsClassForEither | undefined
/** default enum values are continuos i32s start from 0 */
@ -266,6 +267,9 @@ export class ClassWithFactory {
export class JsClassForEither {
constructor()
}
export class AnotherClassForEither {
constructor()
}
export class Fib {
[Symbol.iterator](): Iterator<number, void, number>
constructor()

View file

@ -67,6 +67,17 @@ impl JsClassForEither {
}
}
#[napi]
struct AnotherClassForEither {}
#[napi]
impl AnotherClassForEither {
#[napi(constructor)]
pub fn new() -> Self {
Self {}
}
}
#[napi]
fn receive_class_or_number(either: Either<u32, &JsClassForEither>) -> u32 {
match either {
@ -83,6 +94,14 @@ fn receive_mut_class_or_number(either: Either<u32, &mut JsClassForEither>) -> u3
}
}
#[napi]
fn receive_different_class(either: Either<&JsClassForEither, &AnotherClassForEither>) -> u32 {
match either {
Either::A(_) => 42,
Either::B(_) => 100,
}
}
#[napi]
fn return_either_class(input: i32) -> Either<u32, JsClassForEither> {
if input > 0 {