docs: def binary(self):
          """
          return encoded representation
          """
          if isinstance(self.value, int):
              return b_chr(_TAG_ATOM_CACHE_REF) + b_chr(self.value)
          elif isinstance(self.value, TypeUnicode):
              value_encoded = self.value.encode('utf-8')
              length = len(value_encoded)
              if length <= 255:
                  return (
                      b_chr(_TAG_SMALL_ATOM_UTF8_EXT) +
                      b_chr(length) + value_encoded
                  )
              elif length <= 65535:
                  return (
                      b_chr(_TAG_ATOM_UTF8_EXT) +
                      struct.pack(b'>H', length) + value_encoded
                  )
              else:
                  raise OutputException('uint16 overflow')
          elif isinstance(self.value, bytes):
              length = len(self.value)
              if length <= 255:
                  return b_chr(_TAG_SMALL_ATOM_EXT) + b_chr(length) + self.value
              elif length <= 65535:
                  return (
                      b_chr(_TAG_ATOM_EXT) +
                      struct.pack(b'>H', length) + self.value
                  )
              else:
                  raise OutputException('uint16 overflow')
          else:
              raise OutputException('unknown atom type')