// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.

syntax = "proto3";

package datapath;

message SnapshotRead {
  repeated ReadRange ranges = 1;
}

message SnapshotReadOutput {
  repeated ReadRangeOutput ranges = 1;
  bool read_disabled = 2;
  repeated string regions_if_read_disabled = 3;
  bool read_is_strongly_consistent = 4;
  string primary_if_not_strongly_consistent = 5;
}

message ReadRange {
  bytes start = 1;
  bytes end = 2;
  int32 limit = 3;
  bool reverse = 4;
}

message ReadRangeOutput {
  repeated KvEntry values = 1;
}

message AtomicWrite {
  repeated KvCheck kv_checks = 1;
  repeated KvMutation kv_mutations = 2;
  repeated Enqueue enqueues = 3;
}

message AtomicWriteOutput {
  AtomicWriteStatus status = 1;
  bytes versionstamp = 2;
  string primary_if_write_disabled = 3;
}

message KvCheck {
  bytes key = 1;
  bytes versionstamp = 2; // 10-byte raw versionstamp
}

message KvMutation {
  bytes key = 1;
  KvValue value = 2;
  KvMutationType mutation_type = 3;
  int64 expire_at_ms = 4;
}

message KvValue {
  bytes data = 1;
  KvValueEncoding encoding = 2;
}

message KvEntry {
  bytes key = 1;
  bytes value = 2;
  KvValueEncoding encoding = 3;
  bytes versionstamp = 4;
}

enum KvMutationType {
  M_UNSPECIFIED = 0;
  M_SET = 1;
  M_CLEAR = 2;
  M_SUM = 3;
  M_MAX = 4;
  M_MIN = 5;
}

enum KvValueEncoding {
  VE_UNSPECIFIED = 0;
  VE_V8 = 1;
  VE_LE64 = 2;
  VE_BYTES = 3;
}

enum AtomicWriteStatus {
  AW_UNSPECIFIED = 0;
  AW_SUCCESS = 1;
  AW_CHECK_FAILURE = 2;
  AW_UNSUPPORTED_WRITE = 3;
  AW_USAGE_LIMIT_EXCEEDED = 4;
  AW_WRITE_DISABLED = 5;
  AW_QUEUE_BACKLOG_LIMIT_EXCEEDED = 6;
}

message Enqueue {
  bytes payload = 1;
  int64 deadline_ms = 2;
  repeated bytes kv_keys_if_undelivered = 3;
  repeated uint32 backoff_schedule = 4;
}