from __future__ import annotations from enum import IntEnum from pydantic import BaseModel, ConfigDict, Field, field_validator class SystemVisibilityBit(IntEnum): UI_HISTORY = 0 CONTEXT_ASSEMBLY = 1 class VisibilityMask(BaseModel): model_config = ConfigDict(extra="forbid") value: int = Field(..., ge=0, le=(1 << 63) - 1) @classmethod def from_bits(cls, *, bits: list[int]) -> "VisibilityMask": mask = 0 for bit in bits: validate_visibility_bit(bit=bit) mask |= 1 << bit return cls(value=mask) def contains(self, *, bit: int) -> bool: validate_visibility_bit(bit=bit) return bool(self.value & (1 << bit)) class VisibilityBitRef(BaseModel): model_config = ConfigDict(extra="forbid") bit: int = Field(..., ge=0, le=63) @field_validator("bit") @classmethod def _validate_bit(cls, value: int) -> int: validate_visibility_bit(bit=value) return value def validate_visibility_bit(*, bit: int) -> None: if bit < 0 or bit > 63: raise ValueError("visibility bit must be in range [0, 63]") def bit_mask(*, bit: int) -> int: validate_visibility_bit(bit=bit) return 1 << bit