def mask_str(value: str) -> str: """Mask a word.""" if len(value) < 2: return "*" return f"{value[0]}{'*' * (len(value) - 1)}" def mask_email(email: str) -> str: """Mask an email address.""" if "@" not in email: return mask_str(email) local, domain = email.split("@") parts = local.split(".") domain_name, domain_tld = domain.split(".", maxsplit=1) return f"{'.'.join(map(mask_str, parts))}@{mask_str(domain_name)}.{domain_tld}" def mask_phone_number(phone_number: str) -> str: """Mask a phone number.""" return "*" * len(phone_number)