@@ -3,10 +3,10 @@ use std::cell::Ref;
33use std:: cell:: RefCell ;
44use std:: cell:: RefMut ;
55use std:: collections:: HashMap ;
6+ use std:: convert:: TryInto ;
67use std:: ffi:: CStr ;
78use std:: fmt;
89use std:: sync:: Arc ;
9- use std:: convert:: TryInto ;
1010type Result < T , E = i32 > = core:: result:: Result < T , E > ;
1111use std:: os:: raw:: { c_char, c_double, c_float, c_int, c_long, c_short, c_void} ;
1212extern "C" {
@@ -62,11 +62,18 @@ impl Class {
6262 }
6363
6464 pub fn init ( & self , fields : Vec < MetacallValue > ) -> Instance {
65- self . constructor . as_ref ( ) . unwrap ( ) . invoke ( fields) . unwrap ( )
65+ self . constructor
66+ . as_ref ( )
67+ . expect ( "Unable to get ref of constructor." )
68+ . invoke ( fields)
69+ . expect ( "Invoke return error." )
6670 }
6771
6872 pub fn call ( & self , attr : & str , args : Vec < MetacallValue > ) -> Result < MetacallValue > {
69- let attr = self . class_methods . get ( attr) . unwrap ( ) ;
73+ let attr = self
74+ . class_methods
75+ . get ( attr)
76+ . expect ( format ! ( "Unable to get {} from {}" , attr, self . name) . as_str ( ) ) ;
7077
7178 attr. clone ( ) . invoke ( args)
7279 }
@@ -216,11 +223,19 @@ impl Instance {
216223
217224 /// Lookup an attribute on the instance via the registered `Class`
218225 pub fn get_attr ( & self , name : & str , class : & Class ) -> Result < MetacallValue > {
219- let attr = class. attributes . get ( name) . unwrap ( ) . clone ( ) ;
226+ let attr = class
227+ . attributes
228+ . get ( name)
229+ . expect ( format ! ( "Unable to find attribute {} from {}" , name, self . name( ) ) . as_str ( ) )
230+ . clone ( ) ;
220231 attr. invoke ( self )
221232 }
222233 pub fn set_attr ( & mut self , name : & str , value : MetacallValue , class : & Class ) {
223- let attr = class. attr_setters . get ( name) . unwrap ( ) . clone ( ) ;
234+ let attr = class
235+ . attr_setters
236+ . get ( name)
237+ . expect ( format ! ( "Unable to find attribute {} from {}" , name, self . name( ) ) . as_str ( ) )
238+ . clone ( ) ;
224239 attr. invoke ( value, self )
225240 }
226241
@@ -238,7 +253,9 @@ impl Instance {
238253 args : Vec < MetacallValue > ,
239254 class : & Class ,
240255 ) -> Result < MetacallValue > {
241- let method = class. get_method ( name) . unwrap ( ) ;
256+ let method = class
257+ . get_method ( name)
258+ . expect ( format ! ( "Unable to find method {} from {}" , name, self . name( ) ) . as_str ( ) ) ;
242259 method. invoke ( self , args)
243260 }
244261}
@@ -343,7 +360,9 @@ impl AttributeGetter {
343360 {
344361 Self ( Arc :: new ( move |receiver| {
345362 let borrowed_receiver = receiver. borrow ( ) ;
346- let receiver = Ok ( borrowed_receiver. downcast_ref :: < T > ( ) . unwrap ( ) ) ;
363+ let receiver = Ok ( borrowed_receiver
364+ . downcast_ref :: < T > ( )
365+ . expect ( "Unable to downcast" ) ) ;
347366 receiver. map ( & f) . and_then ( |v| v. to_meta_result ( ) )
348367 } ) )
349368 }
@@ -364,7 +383,9 @@ impl AttributeSetter {
364383 {
365384 Self ( Arc :: new ( move |value, receiver| {
366385 let mut borrowed_receiver = receiver. borrow_mut ( ) ;
367- let receiver = borrowed_receiver. downcast_mut :: < T > ( ) . unwrap ( ) ;
386+ let receiver = borrowed_receiver
387+ . downcast_mut :: < T > ( )
388+ . expect ( "Unable to downcast" ) ;
368389 f ( FromMeta :: from_meta ( value) . unwrap ( ) , receiver)
369390 } ) )
370391 }
@@ -388,7 +409,9 @@ impl InstanceMethod {
388409 Self ( Arc :: new (
389410 move |receiver : & Instance , args : Vec < MetacallValue > | {
390411 let borrowed_receiver = receiver. borrow ( ) ;
391- let receiver = Ok ( borrowed_receiver. downcast_ref :: < T > ( ) . unwrap ( ) ) ;
412+ let receiver = Ok ( borrowed_receiver
413+ . downcast_ref :: < T > ( )
414+ . expect ( "Unable to downcast" ) ) ;
392415
393416 let args = Args :: from_meta_list ( & args) ;
394417
@@ -605,11 +628,21 @@ impl TryFrom<i32> for PrimitiveMetacallProtocolTypes {
605628
606629 fn try_from ( v : i32 ) -> Result < Self , Self :: Error > {
607630 match v {
608- x if x == PrimitiveMetacallProtocolTypes :: Short as i32 => Ok ( PrimitiveMetacallProtocolTypes :: Short ) ,
609- x if x == PrimitiveMetacallProtocolTypes :: Int as i32 => Ok ( PrimitiveMetacallProtocolTypes :: Int ) ,
610- x if x == PrimitiveMetacallProtocolTypes :: Long as i32 => Ok ( PrimitiveMetacallProtocolTypes :: Long ) ,
611- x if x == PrimitiveMetacallProtocolTypes :: Float as i32 => Ok ( PrimitiveMetacallProtocolTypes :: Float ) ,
612- x if x == PrimitiveMetacallProtocolTypes :: Double as i32 => Ok ( PrimitiveMetacallProtocolTypes :: Double ) ,
631+ x if x == PrimitiveMetacallProtocolTypes :: Short as i32 => {
632+ Ok ( PrimitiveMetacallProtocolTypes :: Short )
633+ }
634+ x if x == PrimitiveMetacallProtocolTypes :: Int as i32 => {
635+ Ok ( PrimitiveMetacallProtocolTypes :: Int )
636+ }
637+ x if x == PrimitiveMetacallProtocolTypes :: Long as i32 => {
638+ Ok ( PrimitiveMetacallProtocolTypes :: Long )
639+ }
640+ x if x == PrimitiveMetacallProtocolTypes :: Float as i32 => {
641+ Ok ( PrimitiveMetacallProtocolTypes :: Float )
642+ }
643+ x if x == PrimitiveMetacallProtocolTypes :: Double as i32 => {
644+ Ok ( PrimitiveMetacallProtocolTypes :: Double )
645+ }
613646 _ => Err ( ( ) ) ,
614647 }
615648 }
@@ -621,11 +654,17 @@ macro_rules! convert_to {
621654 let id = value_type_id( $val) ;
622655
623656 match id. try_into( ) {
624- Ok ( PrimitiveMetacallProtocolTypes :: Short ) => Ok ( metacall_value_to_short( $val) as $t) ,
657+ Ok ( PrimitiveMetacallProtocolTypes :: Short ) => {
658+ Ok ( metacall_value_to_short( $val) as $t)
659+ }
625660 Ok ( PrimitiveMetacallProtocolTypes :: Int ) => Ok ( metacall_value_to_int( $val) as $t) ,
626661 Ok ( PrimitiveMetacallProtocolTypes :: Long ) => Ok ( metacall_value_to_long( $val) as $t) ,
627- Ok ( PrimitiveMetacallProtocolTypes :: Float ) => Ok ( metacall_value_to_float( $val) as $t) ,
628- Ok ( PrimitiveMetacallProtocolTypes :: Double ) => Ok ( metacall_value_to_double( $val) as $t) ,
662+ Ok ( PrimitiveMetacallProtocolTypes :: Float ) => {
663+ Ok ( metacall_value_to_float( $val) as $t)
664+ }
665+ Ok ( PrimitiveMetacallProtocolTypes :: Double ) => {
666+ Ok ( metacall_value_to_double( $val) as $t)
667+ }
629668 Err ( _) => {
630669 println!( "receive id: {}, should be [2-6]" , id) ;
631670 panic!( "received mismatch type" ) ;
@@ -670,7 +709,10 @@ impl FromMeta for String {
670709 fn from_meta ( val : MetacallValue ) -> Result < Self > {
671710 Ok ( unsafe {
672711 let s = metacall_value_to_string ( val) ;
673- CStr :: from_ptr ( s) . to_str ( ) . unwrap ( ) . to_owned ( )
712+ CStr :: from_ptr ( s)
713+ . to_str ( )
714+ . expect ( "Unable to cast Cstr to str" )
715+ . to_owned ( )
674716 } )
675717 }
676718}
0 commit comments