Use visibility of field in SalsaField in #[salsa::tracked] struct getters and setters

This commit is contained in:
Mihail Mihov 2022-08-31 23:48:53 +03:00
parent 784828ec42
commit 3df74dc0ac

View file

@ -91,11 +91,12 @@ impl TrackedStruct {
let id_field_names: Vec<_> = self.id_fields().map(SalsaField::name).collect(); let id_field_names: Vec<_> = self.id_fields().map(SalsaField::name).collect();
let id_field_get_names: Vec<_> = self.id_fields().map(SalsaField::get_name).collect(); let id_field_get_names: Vec<_> = self.id_fields().map(SalsaField::get_name).collect();
let id_field_tys: Vec<_> = self.id_fields().map(SalsaField::ty).collect(); let id_field_tys: Vec<_> = self.id_fields().map(SalsaField::ty).collect();
let id_field_vises: Vec<_> = self.id_fields().map(SalsaField::vis).collect();
let id_field_clones: Vec<_> = self.id_fields().map(SalsaField::is_clone_field).collect(); let id_field_clones: Vec<_> = self.id_fields().map(SalsaField::is_clone_field).collect();
let id_field_getters: Vec<syn::ImplItemMethod> = id_field_indices.iter().zip(&id_field_get_names).zip(&id_field_tys).zip(&id_field_clones).map(|(((field_index, field_get_name), field_ty), is_clone_field)| let id_field_getters: Vec<syn::ImplItemMethod> = id_field_indices.iter().zip(&id_field_get_names).zip(&id_field_tys).zip(&id_field_vises).zip(&id_field_clones).map(|((((field_index, field_get_name), field_ty), field_vis), is_clone_field)|
if !*is_clone_field { if !*is_clone_field {
parse_quote! { parse_quote! {
pub 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< #ident >>::ingredient(__jar); let __ingredients = <#jar_ty as salsa::storage::HasIngredientsFor< #ident >>::ingredient(__jar);
@ -104,7 +105,7 @@ impl TrackedStruct {
} }
} else { } else {
parse_quote! { parse_quote! {
pub fn #field_get_name<'db>(self, __db: &'db #db_dyn_ty) -> #field_ty #field_vis fn #field_get_name<'db>(self, __db: &'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< #ident >>::ingredient(__jar); let __ingredients = <#jar_ty as salsa::storage::HasIngredientsFor< #ident >>::ingredient(__jar);
@ -117,16 +118,17 @@ impl TrackedStruct {
let value_field_indices = self.value_field_indices(); let value_field_indices = self.value_field_indices();
let value_field_names: Vec<_> = self.value_fields().map(SalsaField::name).collect(); let value_field_names: Vec<_> = self.value_fields().map(SalsaField::name).collect();
let value_field_vises: Vec<_> = self.value_fields().map(SalsaField::vis).collect();
let value_field_tys: Vec<_> = self.value_fields().map(SalsaField::ty).collect(); let value_field_tys: Vec<_> = self.value_fields().map(SalsaField::ty).collect();
let value_field_get_names: Vec<_> = self.value_fields().map(SalsaField::get_name).collect(); let value_field_get_names: Vec<_> = self.value_fields().map(SalsaField::get_name).collect();
let value_field_clones: Vec<_> = self let value_field_clones: Vec<_> = self
.value_fields() .value_fields()
.map(SalsaField::is_clone_field) .map(SalsaField::is_clone_field)
.collect(); .collect();
let value_field_getters: Vec<syn::ImplItemMethod> = value_field_indices.iter().zip(&value_field_get_names).zip(&value_field_tys).zip(&value_field_clones).map(|(((field_index, field_get_name), field_ty), is_clone_field)| let value_field_getters: Vec<syn::ImplItemMethod> = value_field_indices.iter().zip(&value_field_get_names).zip(&value_field_tys).zip(&value_field_vises).zip(&value_field_clones).map(|((((field_index, field_get_name), field_ty), field_vis), is_clone_field)|
if !*is_clone_field { if !*is_clone_field {
parse_quote! { parse_quote! {
pub 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< #ident >>::ingredient(__jar); let __ingredients = <#jar_ty as salsa::storage::HasIngredientsFor< #ident >>::ingredient(__jar);
@ -135,7 +137,7 @@ impl TrackedStruct {
} }
} else { } else {
parse_quote! { parse_quote! {
pub fn #field_get_name<'db>(self, __db: &'db #db_dyn_ty) -> #field_ty #field_vis fn #field_get_name<'db>(self, __db: &'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< #ident >>::ingredient(__jar); let __ingredients = <#jar_ty as salsa::storage::HasIngredientsFor< #ident >>::ingredient(__jar);