File tree Expand file tree Collapse file tree 4 files changed +45
-13
lines changed Expand file tree Collapse file tree 4 files changed +45
-13
lines changed Original file line number Diff line number Diff line change @@ -250,10 +250,18 @@ fn constructor(ctx: CallContext) -> Result<JsUndefined> {
250
250
// AudioBuffer, PeriodicWave
251
251
case ' interface' :
252
252
return `
253
- let some_ ${ simple_slug} _js = options_js. get :: < & str , JsObject > ( "${m.name}" ) ?;
253
+ let some_ ${ simple_slug} _js = options_js. get :: < & str , JsUnknown > ( "${m.name}" ) ?;
254
254
let ${ slug} = if let Some ( ${ simple_slug} _js) = some_${ simple_slug} _js {
255
- let ${ simple_slug} _napi = ctx. env . unwrap :: < ${ d. napiName ( idl) } > ( & ${ simple_slug} _js) ?;
256
- Some ( ${ simple_slug} _napi. unwrap ( ) . clone ( ) )
255
+ // nullable options
256
+ match ${ simple_slug} _js. get_type ( ) ? {
257
+ ValueType :: Object => {
258
+ let ${ simple_slug} _js = ${ simple_slug} _js. coerce_to_object ( ) ?;
259
+ let ${ simple_slug} _napi = ctx. env . unwrap :: < ${ d. napiName ( idl) } > ( & ${ simple_slug} _js) ?;
260
+ Some ( ${ simple_slug} _napi. unwrap ( ) . clone ( ) )
261
+ } ,
262
+ ValueType :: Null => None ,
263
+ _ => unreachable ! ( ) ,
264
+ }
257
265
} else {
258
266
None
259
267
} ;
Original file line number Diff line number Diff line change @@ -146,10 +146,18 @@ fn constructor(ctx: CallContext) -> Result<JsUndefined> {
146
146
let options = if let Ok ( either_options) = ctx. try_get :: < JsObject > ( 1 ) {
147
147
match either_options {
148
148
Either :: A ( options_js) => {
149
- let some_buffer_js = options_js. get :: < & str , JsObject > ( "buffer" ) ?;
149
+ let some_buffer_js = options_js. get :: < & str , JsUnknown > ( "buffer" ) ?;
150
150
let buffer = if let Some ( buffer_js) = some_buffer_js {
151
- let buffer_napi = ctx. env . unwrap :: < NapiAudioBuffer > ( & buffer_js) ?;
152
- Some ( buffer_napi. unwrap ( ) . clone ( ) )
151
+ // nullable options
152
+ match buffer_js. get_type ( ) ? {
153
+ ValueType :: Object => {
154
+ let buffer_js = buffer_js. coerce_to_object ( ) ?;
155
+ let buffer_napi = ctx. env . unwrap :: < NapiAudioBuffer > ( & buffer_js) ?;
156
+ Some ( buffer_napi. unwrap ( ) . clone ( ) )
157
+ }
158
+ ValueType :: Null => None ,
159
+ _ => unreachable ! ( ) ,
160
+ }
153
161
} else {
154
162
None
155
163
} ;
Original file line number Diff line number Diff line change @@ -130,10 +130,18 @@ fn constructor(ctx: CallContext) -> Result<JsUndefined> {
130
130
let options = if let Ok ( either_options) = ctx. try_get :: < JsObject > ( 1 ) {
131
131
match either_options {
132
132
Either :: A ( options_js) => {
133
- let some_buffer_js = options_js. get :: < & str , JsObject > ( "buffer" ) ?;
133
+ let some_buffer_js = options_js. get :: < & str , JsUnknown > ( "buffer" ) ?;
134
134
let buffer = if let Some ( buffer_js) = some_buffer_js {
135
- let buffer_napi = ctx. env . unwrap :: < NapiAudioBuffer > ( & buffer_js) ?;
136
- Some ( buffer_napi. unwrap ( ) . clone ( ) )
135
+ // nullable options
136
+ match buffer_js. get_type ( ) ? {
137
+ ValueType :: Object => {
138
+ let buffer_js = buffer_js. coerce_to_object ( ) ?;
139
+ let buffer_napi = ctx. env . unwrap :: < NapiAudioBuffer > ( & buffer_js) ?;
140
+ Some ( buffer_napi. unwrap ( ) . clone ( ) )
141
+ }
142
+ ValueType :: Null => None ,
143
+ _ => unreachable ! ( ) ,
144
+ }
137
145
} else {
138
146
None
139
147
} ;
Original file line number Diff line number Diff line change @@ -166,11 +166,19 @@ fn constructor(ctx: CallContext) -> Result<JsUndefined> {
166
166
0.
167
167
} ;
168
168
169
- let some_periodic_wave_js = options_js. get :: < & str , JsObject > ( "periodicWave" ) ?;
169
+ let some_periodic_wave_js = options_js. get :: < & str , JsUnknown > ( "periodicWave" ) ?;
170
170
let periodic_wave = if let Some ( periodic_wave_js) = some_periodic_wave_js {
171
- let periodic_wave_napi =
172
- ctx. env . unwrap :: < NapiPeriodicWave > ( & periodic_wave_js) ?;
173
- Some ( periodic_wave_napi. unwrap ( ) . clone ( ) )
171
+ // nullable options
172
+ match periodic_wave_js. get_type ( ) ? {
173
+ ValueType :: Object => {
174
+ let periodic_wave_js = periodic_wave_js. coerce_to_object ( ) ?;
175
+ let periodic_wave_napi =
176
+ ctx. env . unwrap :: < NapiPeriodicWave > ( & periodic_wave_js) ?;
177
+ Some ( periodic_wave_napi. unwrap ( ) . clone ( ) )
178
+ }
179
+ ValueType :: Null => None ,
180
+ _ => unreachable ! ( ) ,
181
+ }
174
182
} else {
175
183
None
176
184
} ;
You can’t perform that action at this time.
0 commit comments