text: # import base64
  # import json
  # from typing import List
  # from typing import Optional
  #
  # from tracardi.domain.storage_result import StorageResult
  # from tracardi.domain.value_object.storage_info import StorageInfo
  # from tracardi.service.storage.collection_crud import CollectionCrud
  # from tracardi.domain.named_entity import NamedEntity
  # from tracardi.service.storage.crud import StorageCrud
  #
  #
  # class Credential(NamedEntity):
  #     description: Optional[str] = ''
  #     type: str
  #     group: List[str] = ["General"]
  #     enabled: bool = True
  #     data: dict
  #
  #
  # class CredentialRecord(NamedEntity):
  #     description: Optional[str] = ''
  #     type: str
  #     enabled: bool = True
  #     data: str
  #     group: List[str] = ["General"]
  #
  #     @staticmethod
  #     def encode(credential: Credential) -> 'CredentialRecord':
  #         json_data = json.dumps(credential.data)
  #         b64_data = base64.b64encode(json_data.encode('utf-8'))
  #
  #         return CredentialRecord(
  #             id=credential.id,
  #             name=credential.name,
  #             description=credential.description,
  #             type=credential.type,
  #             enabled=credential.enabled,
  #             group=credential.group,
  #             data=b64_data
  #         )
  #
  #     def decode(self) -> Credential:
  #         decoded = base64.b64decode(self.data)
  #         data = json.loads(decoded)
  #
  #         return Credential(
  #             id=self.id,
  #             name=self.name,
  #             description=self.description,
  #             type=self.type,
  #             enabled=self.enabled,
  #             group=self.group,
  #             data=data
  #         )
  #
  #     # Persistence
  #
  #     def storage(self) -> StorageCrud:
  #         return StorageCrud("credential", CredentialRecord, entity=self)
  #
  #     @staticmethod
  #     def storage_info() -> StorageInfo:
  #         return StorageInfo(
  #             'credential',
  #             CredentialRecord
  #         )
  #
  #
  # class CredentialRecords(list):
  #
  #     def bulk(self) -> CollectionCrud:
  #         return CollectionCrud("credential", self)
  #
  #     @staticmethod
  #     def decode(records: StorageResult) -> List[Credential]:
  #         return [CredentialRecord.decode(CredentialRecord(**record)) for record in records]
  