// Copyright 2016 The Bazel Authors. 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 = "proto2";

// option java_api_version = 2;

package xml;

option java_package = "com.google.devtools.build.android.proto";

// A header message describing information about the rest of the message stream,
// It will be the first message in a buffer that contain these messages.
// See com.google.devtools.build.android.AndroidDataSerializer for details on
// how these messages are used.
message Header {
  // The number of entries stored in a serialized buffer.
  optional uint32 entry_count = 1;
  // The number of ProtoSource entries.
  optional uint32 source_count = 2;
}

// The serialized format for a DataKey.
message DataKey {
  // Used for both the FullyQualifiedName name and RelativeAssetPath path
  optional string key_value = 2;
  // The resource type for FullyQualifiedNames
  optional string resource_type = 3;
  optional string key_package = 4;
  repeated string qualifiers = 5;
  // The size of the associated value. Useful for calculating an offset.
  // Required
  optional int32 value_size = 6;
  // Whether this DataKey is a reference to another DataKey.
  optional bool reference = 7;
}

// The serialized format for a DataValue.
message DataValue {
  // The index of the ProtoSource in the source table section.
  // Required
  optional uint32 source_id = 1;

  // If xml_value is defined it's an xml value, otherwise, it's a file value.
  optional DataValueXml xml_value= 2;
}

// A container for all the source information to be persisted.
message ProtoSource {
  // Required
  optional string filename = 1;
  // The indexes of sources this source replaces.
  repeated uint32 overwritten = 2;
}

// The container for a serialized xml value.
message DataValueXml {
  enum XmlType {
    ARRAY = 0;
    ATTR = 1;
    ID = 2;
    PLURAL = 3;
    PUBLIC = 4;
    SIMPLE = 5;
    STYLEABLE = 6;
    STYLE = 7;
    RESOURCES_ATTRIBUTE = 8;
  }

  optional XmlType type = 1;
  map<string, string> mapped_string_value = 2;
  map<string, DataValueXml> mapped_xml_value = 3;
  repeated string list_value = 4;
  optional string value = 5;
  optional string value_type = 6;
  repeated DataKey references = 7;
  map<string, string> attribute = 8;
  map<string, string> namespace = 9;
}

// Container for serialized attributes.
message ToolAttributes {
  message ToolAttributeValues {
    repeated string values = 1;
  }
  map<string, ToolAttributeValues> attributes = 1;
}
