Source code for fastcs.datatypes.enum
import enum
from dataclasses import dataclass
from functools import cached_property
from typing import Generic, TypeVar
from fastcs.datatypes.datatype import DataType
Enum_T = TypeVar("Enum_T", bound=enum.Enum)
"""A builtin Enum type"""
[docs]
@dataclass(frozen=True)
class Enum(Generic[Enum_T], DataType[Enum_T]):
enum_cls: type[Enum_T]
def __post_init__(self):
if not issubclass(self.enum_cls, enum.Enum):
raise ValueError("Enum class has to take an Enum.")
def index_of(self, value: Enum_T) -> int:
return self.members.index(value)
@cached_property
def members(self) -> list[Enum_T]:
return list(self.enum_cls)
@cached_property
def names(self) -> list[str]:
return [member.name for member in self.members]
@property
def dtype(self) -> type[Enum_T]:
return self.enum_cls
@property
def initial_value(self) -> Enum_T:
return self.members[0]