module arch.node.engines.storage_messages;

import arch.node.types.storage open;

import arch.node.types.basics open;
import arch.node.types.crypto open;
import arch.node.types.identities open;
import arch.node.types.messages open;

type ChunkGetRequest :=
  mkChunkRequest@{
    chunk : ChunkID;
    children : Either Bool Nat;
  };

type ChunkGetReplyOk :=
  | ChunkGetReplyOkContent Chunk
  | ChunkGetReplyOkCommitment (Set ChunkCommitment);

type ChunkGetReplyError := | ChunkGetReplyErrorNotFound;

ChunkGetReply : Type := Result ChunkGetReplyOk ChunkGetReplyError;

type ChunkPutRequestOk := | ChunkPutRequestOkSuccess;

type ChunkPutReplyOk :=
  | ChunkPutReplyOkStored
  | ChunkPutReplyOkExists;

type ChunkPutReplyError := | ChunkPutReplyErrorFailed;

ChunkPutReply : Type := Result ChunkPutReplyOk ChunkPutReplyError;

type StorageMsg :=
  | StorageMsgChunkGetRequest ChunkGetRequest
  | StorageMsgChunkGetReply ChunkGetReply
  | StorageMsgChunkPutRequest Chunk
  | StorageMsgChunkPutReply ChunkPutReply;