from typing import AnyStr, Optional, overload


@overload
def utf8bytes(maybe_text: AnyStr) -> bytes:
    pass


@overload
def utf8bytes(maybe_text: None) -> None:
    pass


def utf8bytes(maybe_text):
    if maybe_text is None:
        return None
    if isinstance(maybe_text, bytes):
        return maybe_text
    return maybe_text.encode("utf-8")


@overload
def utf8text(maybe_bytes: AnyStr, errors="strict") -> str:
    pass


@overload
def utf8text(maybe_bytes: None, errors="strict") -> None:
    pass


def utf8text(maybe_bytes, errors="strict") -> Optional[str]:
    if maybe_bytes is None:
        return None
    if isinstance(maybe_bytes, str):
        return maybe_bytes
    return maybe_bytes.decode("utf-8", errors)
