/*
Copyright 2016 Google Inc. All Rights Reserved.
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 = "proto3";

package devtools.buildozer;

option go_package = "api_proto";

message Output {
  repeated Record records = 1;
  message Record {
    repeated Field fields = 1;
    message Field {
      oneof value {
        string text = 1;
        int32 number = 2;
        ERROR error = 3;
        RepeatedString list = 5;
      }
      // Used internally by Buildozer to decide whether a field should be quoted
      // when printing. This does not affect the contents of 'value'.
      bool quote_when_printing = 7;

      enum ERROR {
        UNKNOWN = 0;
        MISSING = 1;
        MISSING_LIST_ITEM = 2;
      }
    }
  }
}

message RepeatedString {
  repeated string strings = 1;
}
