syntax = "proto3";

package mvccpb;

option java_multiple_files = true;
option java_package = "io.helidon.config.etcd.internal.client.proto";

message KeyValue {
    // key is the key in bytes. An empty key is not allowed.
    bytes key = 1;
    // create_revision is the revision of last creation on this key.
    int64 create_revision = 2;
    // mod_revision is the revision of last modification on this key.
    int64 mod_revision = 3;
    // version is the version of the key. A deletion resets
    // the version to zero and any modification of the key
    // increases its version.
    int64 version = 4;
    // value is the value held by the key, in bytes.
    bytes value = 5;
    // lease is the ID of the lease that attached to key.
    // When the attached lease expires, the key will be deleted.
    // If lease is 0, then no lease is attached to the key.
    int64 lease = 6;
}

message Event {
    enum EventType {
        PUT = 0;
        DELETE = 1;
    }
    // type is the kind of event. If type is a PUT, it indicates
    // new data has been stored to the key. If type is a DELETE,
    // it indicates the key was deleted.
    EventType type = 1;
    // kv holds the KeyValue for the event.
    // A PUT event contains current kv pair.
    // A PUT event with kv.Version=1 indicates the creation of a key.
    // A DELETE/EXPIRE event contains the deleted key with
    // its modification revision set to the revision of deletion.
    KeyValue kv = 2;

    // prev_kv holds the key-value pair before the event happens.
    KeyValue prev_kv = 3;
}