Project import generated by Copybara.

GitOrigin-RevId: d9e9e3fb4e31372ec1fb43b178994ca78fa8fe70
diff --git a/api/api_proto/issue_objects.proto b/api/api_proto/issue_objects.proto
new file mode 100644
index 0000000..9343c98
--- /dev/null
+++ b/api/api_proto/issue_objects.proto
@@ -0,0 +1,207 @@
+// Copyright 2018 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 or at
+// https://developers.google.com/open-source/licenses/bsd
+
+// This file defines protobufs for issues and related business
+// objects, e.g., field values, comments, and attachments.
+
+syntax = "proto3";
+
+package monorail;
+
+import "google/protobuf/wrappers.proto";
+import "api/api_proto/common.proto";
+
+
+// Next available tag: 8
+message Approval {
+  FieldRef field_ref = 1;
+  repeated UserRef approver_refs = 2;
+  ApprovalStatus status = 3;
+  fixed32 set_on = 4;
+  UserRef setter_ref = 5;
+  PhaseRef phase_ref = 7;
+}
+
+
+// Next available tag: 8
+enum ApprovalStatus {
+  NOT_SET = 0;
+  NEEDS_REVIEW = 1;
+  NA = 2;
+  REVIEW_REQUESTED = 3;
+  REVIEW_STARTED = 4;
+  NEED_INFO = 5;
+  APPROVED = 6;
+  NOT_APPROVED = 7;
+}
+
+
+// This message is only suitable for displaying the amendment to users.
+// We don't currently offer structured amendments that client code can
+// reason about, field names can be ambiguous, and we don't have
+// old_value for most changes.
+// Next available tag: 4
+message Amendment {
+  // This may be the name of a built-in or custom field, or relative to
+  // an approval field name.
+  string field_name = 1;
+  // This may be a new value that overwrote the old value, e.g., "Assigned",
+  // or it may be a space-separated list of changes, e.g., "Size-L -Size-S".
+  string new_or_delta_value = 2;
+  // old_value is only used when the user changes the summary.
+  string old_value = 3;
+}
+
+
+// Next available tag: 9
+message Attachment {
+  uint64 attachment_id = 1;
+  string filename = 2;
+  uint64 size = 3;  // Size in bytes.
+  string content_type = 4;
+  bool is_deleted = 5;
+  string thumbnail_url = 6;
+  string view_url = 7;
+  string download_url = 8;
+}
+
+
+// Next available tag: 16
+message Comment {
+  string project_name = 1;
+  uint32 local_id = 2;
+  uint32 sequence_num = 3;
+  bool is_deleted = 4;
+  UserRef commenter = 5;
+  fixed32 timestamp = 6;
+  string content = 7;
+  string inbound_message = 8;
+  repeated Amendment amendments = 9;
+  repeated Attachment attachments = 10;
+  FieldRef approval_ref = 11;
+  // If set, this comment is an issue description.
+  uint32 description_num = 12;
+  bool is_spam = 13;
+  bool can_delete = 14;
+  bool can_flag = 15;
+}
+
+
+// Next available tag: 5
+message FieldValue {
+  FieldRef field_ref = 1;
+  string value = 2;
+  bool is_derived = 3;
+  PhaseRef phase_ref = 4;
+}
+
+
+// Next available tag: 28
+message Issue {
+  string project_name = 1;
+  uint32 local_id = 2;
+  string summary = 3;
+  StatusRef status_ref = 4;
+  UserRef owner_ref = 5;
+  repeated UserRef cc_refs = 6;
+  repeated LabelRef label_refs = 7;
+  repeated ComponentRef component_refs = 8;
+  repeated IssueRef blocked_on_issue_refs = 9;
+  repeated IssueRef blocking_issue_refs = 10;
+  repeated IssueRef dangling_blocked_on_refs = 23;
+  repeated IssueRef dangling_blocking_refs = 24;
+  IssueRef merged_into_issue_ref = 11;
+  repeated FieldValue field_values = 12;
+  bool is_deleted = 13;
+  UserRef reporter_ref = 14;
+  fixed32 opened_timestamp = 15;
+  fixed32 closed_timestamp = 16;
+  fixed32 modified_timestamp = 17;
+  fixed32 component_modified_timestamp = 25;
+  fixed32 status_modified_timestamp = 26;
+  fixed32 owner_modified_timestamp = 27;
+  uint32 star_count = 18;
+  bool is_spam = 19;
+  uint32 attachment_count = 20;
+  repeated Approval approval_values = 21;
+  repeated PhaseDef phases = 22;
+}
+
+
+// Next available tag: 18
+message IssueDelta {
+  // Note: We use StringValue instead of string so that we can
+  // check if delta.HasField('status').  Proto3 only allows that
+  // for nested messages and provides "boxed" values for this purpose.
+  // In JSON, a StringValue is represented as a simple string.
+  google.protobuf.StringValue status = 1;
+  UserRef owner_ref = 2;
+  repeated UserRef cc_refs_add = 3;
+  repeated UserRef cc_refs_remove = 4;
+  repeated ComponentRef comp_refs_add = 5;
+  repeated ComponentRef comp_refs_remove = 6;
+  repeated LabelRef label_refs_add = 7;
+  repeated LabelRef label_refs_remove = 8;
+  repeated FieldValue field_vals_add = 9;
+  repeated FieldValue field_vals_remove = 10;
+  repeated FieldRef fields_clear = 11;
+  repeated IssueRef blocked_on_refs_add = 12;
+  repeated IssueRef blocked_on_refs_remove = 13;
+  repeated IssueRef blocking_refs_add = 14;
+  repeated IssueRef blocking_refs_remove = 15;
+  IssueRef merged_into_ref = 16;
+  google.protobuf.StringValue summary = 17;
+}
+
+
+// Next available tag: 7
+message ApprovalDelta {
+  ApprovalStatus status = 1;
+  repeated UserRef approver_refs_add = 2;
+  repeated UserRef approver_refs_remove = 3;
+  repeated FieldValue field_vals_add = 4;
+  repeated FieldValue field_vals_remove = 5;
+  repeated FieldRef fields_clear = 6;
+}
+
+
+// Next available tag: 3
+message AttachmentUpload {
+  string filename = 1;
+  bytes content = 2;
+}
+
+
+// Next available tag: 4
+message IssueSummary {
+  string project_name = 1;
+  uint32 local_id = 2;
+  string summary = 3;
+}
+
+
+// Next available tag: 3
+message PhaseDef {
+  PhaseRef phase_ref = 1;
+  uint32 rank = 2;
+}
+
+
+// Next available tag: 2
+message PhaseRef {
+  string phase_name = 1;
+}
+
+
+// Next available tag: 7
+enum SearchScope {
+  ALL = 0;
+  NEW = 1;
+  OPEN = 2;
+  OWNED = 3;
+  REPORTED = 4;
+  STARRED = 5;
+  TO_VERIFY = 6;
+}