docs: def encode_ulid(value: hints.Buffer) -> str:
      """
      Encode the given buffer to a :class:`~str` using Base32 encoding.
  
      .. note:: This uses an optimized strategy from the `NUlid` project for encoding ULID
          bytes specifically and is not meant for arbitrary encoding.
  
      :param value: Bytes to encode
      :type value: :class:`~bytes`, :class:`~bytearray`, or :class:`~memoryview`
      :return: Value encoded as a Base32 string
      :rtype: :class:`~str`
      :raises ValueError: when the value is not 16 bytes
      """
      length = len(value)
      if length != 16:
          raise ValueError('Expects 16 bytes for timestamp + randomness; got {}'.format(length))
  
      encoding = ENCODING
  
      return \
          encoding[(value[0] & 224) >> 5] + \
          encoding[value[0] & 31] + \
          encoding[(value[1] & 248) >> 3] + \
          encoding[((value[1] & 7) << 2) | ((value[2] & 192) >> 6)] + \
          encoding[((value[2] & 62) >> 1)] + \
          encoding[((value[2] & 1) << 4) | ((value[3] & 240) >> 4)] + \
          encoding[((value[3] & 15) << 1) | ((value[4] & 128) >> 7)] + \
          encoding[(value[4] & 124) >> 2] + \
          encoding[((value[4] & 3) << 3) | ((value[5] & 224) >> 5)] + \
          encoding[value[5] & 31] + \
          encoding[(value[6] & 248) >> 3] + \
          encoding[((value[6] & 7) << 2) | ((value[7] & 192) >> 6)] + \
          encoding[(value[7] & 62) >> 1] + \
          encoding[((value[7] & 1) << 4) | ((value[8] & 240) >> 4)] + \
          encoding[((value[8] & 15) << 1) | ((value[9] & 128) >> 7)] + \
          encoding[(value[9] & 124) >> 2] + \
          encoding[((value[9] & 3) << 3) | ((value[10] & 224) >> 5)] + \
          encoding[value[10] & 31] + \
          encoding[(value[11] & 248) >> 3] + \
          encoding[((value[11] & 7) << 2) | ((value[12] & 192) >> 6)] + \
          encoding[(value[12] & 62) >> 1] + \
          encoding[((value[12] & 1) << 4) | ((value[13] & 240) >> 4)] + \
          encoding[((value[13] & 15) << 1) | ((value[14] & 128) >> 7)] + \
          encoding[(value[14] & 124) >> 2] + \
          encoding[((value[14] & 3) << 3) | ((value[15] & 224) >> 5)] + \
          encoding[value[15] & 31]