moverox_codegen/
move_type.rs1use std::collections::HashMap;
2
3use move_syn::{Type, TypePath};
4use proc_macro2::{Ident, TokenStream};
5use quote::{ToTokens, quote};
6use unsynn::ToTokens as _;
7
8pub(super) fn to_rust_with_substitutions(
11 this: &Type,
12 address_map: &HashMap<Ident, TokenStream>,
13) -> TokenStream {
14 let type_args = this
15 .type_args
16 .as_ref()
17 .map_or_else(TokenStream::new, |type_args| {
18 let types = type_args
19 .types()
20 .map(|ty| to_rust_with_substitutions(ty, address_map));
21 quote!(<#(#types),*>)
22 });
23
24 let path = if let TypePath::Full {
25 named_address,
26 module,
27 r#type: type_,
28 ..
29 } = &this.path
30 {
31 let prefix: &dyn ToTokens = address_map
32 .get(named_address)
33 .map_or(named_address, |path| path);
34 quote!(#prefix::#module::#type_)
35 } else {
36 this.path.to_token_stream()
37 };
38
39 quote! {
40 #path #type_args
41 }
42}