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 :=
  mkReplyConnectIdentity@{
    commitmentEngine : Option EngineID;
    decryptionEngine : Option EngineID;
    err : Option String;
  };

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

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

type IdentityManagementMsg :=
  | GenerateIdentityRequest RequestGenerateIdentity
  | GenerateIdentityReply ReplyGenerateIdentity
  | ConnectIdentityRequest RequestConnectIdentity
  | ConnectIdentityReply ReplyConnectIdentity
  | DeleteIdentityRequest RequestDeleteIdentity
  | DeleteIdentityReply ReplyDeleteIdentity;