module arch.node.engines.identity_management_messages;

import prelude open;
import arch.node.types.identities open;

type RequestGenerateIdentity :=
  mkRequestGenerateIdentity@{
    backend : Backend;
    params : IDParams;
    capabilities : Capabilities;
  };

type ReplyGenerateIdentity :=
  mkReplyGenerateIdentity@{
    commitmentEngine : Option EngineID;
    decryptionEngine : Option EngineID;
    externalIdentity : EngineID;
    err : Option String;
  };

type RequestConnectIdentity :=
  mkRequestConnectIdentity@{
    externalIdentity : EngineID;
    backend : Backend;
    capabilities : Capabilities;
  };

type ReplyConnectIdentity :=
  mkConnectIdentityReply@{
    commitmentEngine : Option EngineID;
    decryptionEngine : Option EngineID;
    err : Option String;
  };

type RequestDeleteIdentity :=
  mkRequestDeleteIdentity@{
    externalIdentity : EngineID;
    backend : Backend;
  };

type ReplyDeleteIdentity :=
  mkReplyDeleteIdentity@{
    err : Option String;
  };

type IdentityManagementMsg :=
  | MsgIdentityManagementGenerateIdentityRequest RequestGenerateIdentity
  | MsgIdentityManagementGenerateIdentityReply ReplyGenerateIdentity
  | MsgIdentityManagementConnectIdentityRequest RequestConnectIdentity
  | MsgIdentityManagementConnectIdentityReply ReplyConnectIdentity
  | MsgIdentityManagementDeleteIdentityRequest RequestDeleteIdentity
  | MsgIdentityManagementDeleteIdentityReply ReplyDeleteIdentity;