// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// Protobuf representation of the UniquePosition class.

// Update proto_value_conversions{.h,.cc,_unittest.cc} if you change
// any fields in this file.

syntax = "proto2";

option optimize_for = LITE_RUNTIME;
option retain_unknown_fields = true;

package sync_pb;

// A UniquePosition is a string of bytes.
//
// Unique positions are unique per-item, since they are guaranteed to end with a
// fixed-length suffix that is unique per-item.  The position string may not end
// with a '\0' byte.
//
// Prior to the suffix is a series of arbitrary bytes of arbitrary length.
// Items under the same parent are positioned relative to each other by a
// lexicographic comparison of their UniquePosition values.
message UniquePosition {
  // The uncompressed string of bytes representing the position.
  optional bytes value = 1;

  // The client may choose to write a compressed position to this field instead
  // of populating the 'value' above.  If it chooses to use compression, the
  // 'value' field above must be empty.  The position value will be compressed
  // with gzip and stored in the compressed_value field.  The position's
  // uncompressed length must be specified and written to the
  // uncompressed_length field.
  optional bytes compressed_value = 2;
  optional uint64 uncompressed_length = 3;

  // This encoding uses compression scheme designed especially for unique
  // positions.  It has the property that X < Y precisely when Compressed(X) <
  // Compressed(Y), which is very useful when the most common operation is to
  // compare these positions against each other.  Their values may remain
  // compressed in memory.
  //
  // The compression scheme is implemented and documented in
  // sync/internal_api/base/unique_position.cc.
  // 
  // As of M30, this is the preferred encoding.  Newer clients may continue to
  // populate the 'value' and 'compressed_value' fields to ensure backwards
  // compatibility, but they will always try to read from this field first.
  optional bytes custom_compressed_v1 = 4;
}
