// Copyright 2018 The Feed Authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

syntax = "proto2";


package search.now.wire.feed;

option optimize_for=LITE_RUNTIME;

option java_package = "com.google.search.now.wire.feed";
option java_outer_classname = "ContentIdProto";

// Feed Wire Protocol version of the ContentId.
message ContentId {
  // The "domain" to which this content belongs. A domain specifies the party
  // responsible for generating the content, and this owner promises to specify
  // IDs (below) that match the owner's expectations of uniqueness.  The domain
  // differs from the table because multiple parties can create content which
  // are stored in the same table.
  optional string content_domain = 1;

  // In value to make the ContentId unique within the content_domain.
  optional fixed64 id = 2;

  // This represents namespace for the nodes found in the wire protocol.  The
  // storage architecture shares the wire protocol based upon the Table
  // (namespace).  The storage will be sharded into multiple Tables where
  // related content is stored within a single Table.  For example, Features
  // define the Structure and Content of the Stream and are stored in a single
  // table.  Notifications would be stored in their own table.
  optional string table = 3;
}
