use crate::state::CheckerState;
use tsz_solver::TypeId;
impl<'a> CheckerState<'a> {
pub(crate) fn get_private_brand(&self, type_id: TypeId) -> Option<String> {
tsz_solver::type_queries::get_private_brand_name(self.ctx.types, type_id)
}
pub(crate) fn types_have_same_private_brand(&self, type1: TypeId, type2: TypeId) -> bool {
match (self.get_private_brand(type1), self.get_private_brand(type2)) {
(Some(brand1), Some(brand2)) => brand1 == brand2,
_ => false,
}
}
pub(crate) fn get_private_field_name_from_brand(&self, type_id: TypeId) -> Option<String> {
tsz_solver::type_queries::get_private_field_name(self.ctx.types, type_id)
}
pub(crate) fn private_brand_mismatch_error(
&self,
source: TypeId,
target: TypeId,
) -> Option<String> {
let source_brand = self.get_private_brand(source)?;
let target_brand = self.get_private_brand(target)?;
if source_brand == target_brand {
return None;
}
let field_name = self
.get_private_field_name_from_brand(source)
.unwrap_or_else(|| "[private field]".to_string());
Some(format!(
"Property '{}' in type '{}' refers to a different member that cannot be accessed from within type '{}'.",
field_name,
self.format_type(source),
self.format_type(target)
))
}
}