module arch.node.engines.local_time_series_storage_messages;

import prelude open;

syntax alias TSStorageDBQuery := String;
syntax alias TSStorageDBData := String;
syntax alias EpochTimestamp := Nat;

type GetDataTSStorageDBRequest :=
  mkGetDataTSStorageDBRequest@{
    query : TSStorageDBQuery;
  };

type GetDataTSStorageDBReply :=
  mkGetDataTSStorageDBReply@{
    query : TSStorageDBQuery;
    data : TSStorageDBData;
  };

type RecordDataTSStorageDBRequest :=
  mkRecordDataTSStorageDBRequest@{
    query : TSStorageDBQuery;
  };

type RecordDataTSStorageDBReply :=
  mkRecordDataTSStorageDBReply@{
    query : TSStorageDBQuery;
    success : Bool;
  };

type DeleteDataTSStorageDBRequest :=
  mkDeleteDataTSStorageDBRequest@{
    query : TSStorageDBQuery;
  };

type DeleteDataTSStorageDBReply :=
  mkDeleteDataTSStorageDBReply@{
    query : TSStorageDBQuery;
    success : Bool;
  };

type DataChangedTSStorageDB :=
  mkDataChangedTSStorageDB@{
    query : TSStorageDBQuery;
    data : TSStorageDBData;
    timestamp : EpochTimestamp;
  };

type LocalTSStorageMsg :=
  | LocalTSStorageMsgGetRequest GetDataTSStorageDBRequest
  | LocalTSStorageMsgGetReply GetDataTSStorageDBReply
  | LocalTSStorageMsgRecordRequest RecordDataTSStorageDBRequest
  | LocalTSStorageMsgRecordReply RecordDataTSStorageDBReply
  | LocalTSStorageMsgDeleteRequest DeleteDataTSStorageDBRequest
  | LocalTSStorageMsgDeleteReply DeleteDataTSStorageDBReply
  | LocalTSStorageMsgDataChanged DataChangedTSStorageDB;