@@ -2,26 +2,27 @@ use std::str::FromStr;
22
33
44pub struct ExtractedType < ' s > {
5- pub tp : & ' s str ,
5+ pub tp_str : & ' s str ,
6+ pub tp : proc_macro2:: TokenStream ,
67}
78
89
910impl < ' s > ExtractedType < ' s > {
1011
1112 pub fn get_type_and_wrapper ( & ' s self ) ->( & ' s str , bool ) {
1213
13- if let Some ( start_index) = self . tp . find ( '<' ) {
14- let Some ( end_index) = self . tp . find ( ">" ) else {
15- return ( self . tp , false ) ;
14+ if let Some ( start_index) = self . tp_str . find ( '<' ) {
15+ let Some ( end_index) = self . tp_str . find ( ">" ) else {
16+ return ( self . tp_str , false ) ;
1617 } ;
1718
18- let type_str = & self . tp [ start_index + 1 ..end_index] . trim ( ) ;
19+ let type_str = & self . tp_str [ start_index + 1 ..end_index] . trim ( ) ;
1920
2021 return ( type_str, true ) ;
2122 }
2223
2324
24- ( self . tp , false )
25+ ( self . tp_str , false )
2526 }
2627
2728 pub fn get_as_value_fn ( & self ) ->proc_macro2:: TokenStream {
@@ -38,28 +39,30 @@ impl<'s> ExtractedType<'s> {
3839 }
3940 }
4041
41- let value = format ! ( "as_{}" , self . tp) ;
42+ let value = format ! ( "as_{}" , tp) ;
4243
4344 let fn_name = proc_macro2:: TokenStream :: from_str ( value. as_str ( ) ) . unwrap ( ) ;
4445
4546
47+ let tp = & self . tp ;
48+
4649 quote:: quote! {
4750 pub fn #fn_name( & self ) -> #tp {
4851 self . 0
49- }
52+ }
5053 }
5154 }
5255}
5356
54- pub fn extract_type < ' s > ( input_as_string : & ' s str ) -> ( proc_macro2 :: TokenStream , ExtractedType < ' s > ) {
57+ pub fn extract_type < ' s > ( input_as_string : & ' s str ) -> ExtractedType < ' s > {
5558 let open_index = input_as_string. find ( "(" ) . unwrap ( ) ;
5659 let close_index = input_as_string. find ( ")" ) . unwrap ( ) ;
5760
5861 let type_str = & input_as_string[ open_index + 1 ..close_index] . trim ( ) ;
5962
6063 let type_tokens = proc_macro2:: TokenStream :: from_str ( type_str) ;
6164 match type_tokens {
62- Ok ( tokens) => ( tokens , ExtractedType { tp : type_str } ) ,
65+ Ok ( tokens) => ExtractedType { tp_str : type_str, tp : tokens } ,
6366 Err ( _) => {
6467 panic ! ( "Invalid type: {}" , type_str) ;
6568 }
0 commit comments