melobot.typ._enum 源代码
from enum import Enum
from logging import CRITICAL, DEBUG, ERROR, INFO, WARNING
from typing_extensions import Any, Callable, assert_never
[文档]
class VoidType(Enum):
"""空类型,需要区别于 `None` 时使用
.. code:: python
# 有些时候 `None` 也是合法值,因此需要一个额外的哨兵值:
def foo(val: Any | VoidType = VoidType.VOID) -> None:
...
"""
VOID = type("_VOID", (), {})
class ExitCode(Enum):
NORMAL = 0
ERROR = 1
RESTART = 2
# TODO: 考虑在最低支持 3.11 后,使用 logging.getLevelNamesMapping 兼容部分场景
[文档]
class LogLevel(int, Enum):
"""日志等级枚举"""
CRITICAL = CRITICAL
ERROR = ERROR
WARNING = WARNING
INFO = INFO
DEBUG = DEBUG
[文档]
class LogicMode(Enum):
"""逻辑模式枚举类型"""
AND = "and"
OR = "or"
NOT = "not"
XOR = "xor"
[文档]
def get_operator(self) -> Callable[[Any, Any], bool]:
match self:
case LogicMode.AND:
return lambda x, y: x and y
case LogicMode.OR:
return lambda x, y: x or y
case LogicMode.NOT:
return lambda x, _: not x
case LogicMode.XOR:
return lambda x, y: x ^ y
case _:
assert_never(f"不正确的逻辑类型 {self}")