Skip to content

Commit 92b9e0f

Browse files
committed
Fixes
1 parent ec9ea1d commit 92b9e0f

2 files changed

Lines changed: 18 additions & 12 deletions

File tree

macros/src/data_wrapper/generate.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,13 @@ pub fn generate(
66
) -> Result<proc_macro::TokenStream, syn::Error> {
77
let struct_name = &ast.ident;
88

9-
let (tp, tp_as_str) = crate::utils::extract_type(input_as_string.as_str());
9+
let extracted_tp = crate::utils::extract_type(input_as_string.as_str());
1010

11-
let as_value_fn = tp_as_str.get_as_value_fn();
1211

12+
13+
let as_value_fn = extracted_tp.get_as_value_fn();
14+
15+
let tp = &extracted_tp.tp;
1316

1417
let result = quote! {
1518

macros/src/utils.rs

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,26 +2,27 @@ use std::str::FromStr;
22

33

44
pub struct ExtractedType<'s> {
5-
pub tp: &'s str,
5+
pub tp_str: &'s str,
6+
pub tp: proc_macro2::TokenStream,
67
}
78

89

910
impl<'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

Comments
 (0)