1
1
use std:: ptr;
2
2
3
3
use env:: NapiEnv ;
4
- use result:: NapiResult ;
4
+ use result:: { NapiError , NapiResult } ;
5
5
use sys;
6
6
7
- use super :: NapiValue ;
7
+ use super :: { NapiArray , NapiBoolean , NapiNull , NapiNumber , NapiObject ,
8
+ NapiString , NapiUndefined , NapiValue , NapiValueInternal ,
9
+ NapiValueType } ;
8
10
9
11
#[ derive( Clone , Copy , Debug ) ]
10
12
pub struct NapiAny < ' a > {
@@ -25,6 +27,91 @@ impl<'a> NapiAny<'a> {
25
27
pub fn with_value ( env : & ' a NapiEnv , value : sys:: napi_value ) -> Self {
26
28
Self { env, value }
27
29
}
30
+
31
+ pub fn as_undefined ( & self ) -> NapiResult < NapiUndefined < ' a > > {
32
+ match self . value_type ( ) ? {
33
+ NapiValueType :: Undefined => {
34
+ Ok ( NapiUndefined :: construct ( self . env ( ) , self . as_sys_value ( ) ) )
35
+ }
36
+ _ => Err ( NapiError :: type_error (
37
+ self . env ( ) ,
38
+ & NapiString :: from_str ( self . env ( ) , "undefined expected" ) ?,
39
+ ) ) ,
40
+ }
41
+ }
42
+
43
+ pub fn as_null ( & self ) -> NapiResult < NapiNull < ' a > > {
44
+ match self . value_type ( ) ? {
45
+ NapiValueType :: Null => {
46
+ Ok ( NapiNull :: construct ( self . env ( ) , self . as_sys_value ( ) ) )
47
+ }
48
+ _ => Err ( NapiError :: type_error (
49
+ self . env ( ) ,
50
+ & NapiString :: from_str ( self . env ( ) , "null expected" ) ?,
51
+ ) ) ,
52
+ }
53
+ }
54
+
55
+ pub fn as_boolean ( & self ) -> NapiResult < NapiBoolean < ' a > > {
56
+ match self . value_type ( ) ? {
57
+ NapiValueType :: Boolean => {
58
+ Ok ( NapiBoolean :: construct ( self . env ( ) , self . as_sys_value ( ) ) )
59
+ }
60
+ _ => Err ( NapiError :: type_error (
61
+ self . env ( ) ,
62
+ & NapiString :: from_str ( self . env ( ) , "boolean expected" ) ?,
63
+ ) ) ,
64
+ }
65
+ }
66
+
67
+ pub fn as_number ( & self ) -> NapiResult < NapiNumber < ' a > > {
68
+ match self . value_type ( ) ? {
69
+ NapiValueType :: Number => {
70
+ Ok ( NapiNumber :: construct ( self . env ( ) , self . as_sys_value ( ) ) )
71
+ }
72
+ _ => Err ( NapiError :: type_error (
73
+ self . env ( ) ,
74
+ & NapiString :: from_str ( self . env ( ) , "number expected" ) ?,
75
+ ) ) ,
76
+ }
77
+ }
78
+
79
+ pub fn as_string ( & self ) -> NapiResult < NapiString < ' a > > {
80
+ match self . value_type ( ) ? {
81
+ NapiValueType :: String => {
82
+ Ok ( NapiString :: construct ( self . env ( ) , self . as_sys_value ( ) ) )
83
+ }
84
+ _ => Err ( NapiError :: type_error (
85
+ self . env ( ) ,
86
+ & NapiString :: from_str ( self . env ( ) , "string expected" ) ?,
87
+ ) ) ,
88
+ }
89
+ }
90
+
91
+ pub fn as_object ( & self ) -> NapiResult < NapiObject < ' a > > {
92
+ match self . value_type ( ) ? {
93
+ NapiValueType :: Object |
94
+ NapiValueType :: String |
95
+ NapiValueType :: Function => {
96
+ Ok ( NapiObject :: construct ( self . env ( ) , self . as_sys_value ( ) ) )
97
+ }
98
+ _ => Err ( NapiError :: type_error (
99
+ self . env ( ) ,
100
+ & NapiString :: from_str ( self . env ( ) , "object expected" ) ?,
101
+ ) ) ,
102
+ }
103
+ }
104
+
105
+ pub fn as_array ( & self ) -> NapiResult < NapiArray < ' a > > {
106
+ if self . is_array ( ) ? {
107
+ Ok ( NapiArray :: construct ( self . env ( ) , self . as_sys_value ( ) ) )
108
+ } else {
109
+ Err ( NapiError :: type_error (
110
+ self . env ( ) ,
111
+ & NapiString :: from_str ( self . env ( ) , "array expected" ) ?,
112
+ ) )
113
+ }
114
+ }
28
115
}
29
116
30
117
impl < ' a > NapiValue < ' a > for NapiAny < ' a > {
0 commit comments