Use visibility of field in SalsaField in #[salsa::interned] getters

This commit is contained in:
Mihail Mihov 2022-08-31 23:49:09 +03:00
parent 3df74dc0ac
commit 55f20344d1

View file

@ -90,10 +90,11 @@ impl InternedStruct {
.map(|field| { .map(|field| {
let field_name = field.name(); let field_name = field.name();
let field_ty = field.ty(); let field_ty = field.ty();
let field_vis = field.vis();
let field_get_name = field.get_name(); let field_get_name = field.get_name();
if field.is_clone_field() { if field.is_clone_field() {
parse_quote! { parse_quote! {
#vis fn #field_get_name(self, db: &#db_dyn_ty) -> #field_ty { #field_vis fn #field_get_name(self, db: &#db_dyn_ty) -> #field_ty {
let (jar, runtime) = <_ as salsa::storage::HasJar<#jar_ty>>::jar(db); let (jar, runtime) = <_ as salsa::storage::HasJar<#jar_ty>>::jar(db);
let ingredients = <#jar_ty as salsa::storage::HasIngredientsFor< #id_ident >>::ingredient(jar); let ingredients = <#jar_ty as salsa::storage::HasIngredientsFor< #id_ident >>::ingredient(jar);
std::clone::Clone::clone(&ingredients.data(runtime, self).#field_name) std::clone::Clone::clone(&ingredients.data(runtime, self).#field_name)
@ -101,7 +102,7 @@ impl InternedStruct {
} }
} else { } else {
parse_quote! { parse_quote! {
#vis fn #field_get_name<'db>(self, db: &'db #db_dyn_ty) -> &'db #field_ty { #field_vis fn #field_get_name<'db>(self, db: &'db #db_dyn_ty) -> &'db #field_ty {
let (jar, runtime) = <_ as salsa::storage::HasJar<#jar_ty>>::jar(db); let (jar, runtime) = <_ as salsa::storage::HasJar<#jar_ty>>::jar(db);
let ingredients = <#jar_ty as salsa::storage::HasIngredientsFor< #id_ident >>::ingredient(jar); let ingredients = <#jar_ty as salsa::storage::HasIngredientsFor< #id_ident >>::ingredient(jar);
&ingredients.data(runtime, self).#field_name &ingredients.data(runtime, self).#field_name