"""Helpers for working with enums."""
from collections.abc import Callable
import contextlib
from enum import Enum
from typing import TYPE_CHECKING, Any, TypeVar

# https://github.com/python/mypy/issues/5107
if TYPE_CHECKING:
    _LruCacheT = TypeVar("_LruCacheT", bound=Callable)

    def lru_cache(func: _LruCacheT) -> _LruCacheT:
        """Stub for lru_cache."""

else:
    from functools import lru_cache

_EnumT = TypeVar("_EnumT", bound=Enum)


@lru_cache
def try_parse_enum(cls: type[_EnumT], value: Any) -> _EnumT | None:
    """Try to parse the value into an Enum.

    Return None if parsing fails.
    """
    with contextlib.suppress(ValueError):
        return cls(value)
    return None