// Copyright 2014 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.
//
// Definitions for dependency reports.

syntax = "proto2";

package blaze_deps;

option java_package = "com.google.devtools.build.lib.view.proto";

// A specific location within a source file.
message SourceLocation {
  required string path = 1;
  optional int32 line = 2;
  optional int32 column = 3;
}

message Dependency {

  enum Kind {
    // Direct dependency used explicitly in the source.
    EXPLICIT = 0;
    // Transitive dependency that is implicitly loaded and used by the compiler.
    IMPLICIT = 1;
    // Unused dependency.
    UNUSED = 2;
  }

  // Path to the artifact representing this dependency.
  required string path = 1;

  // Dependency kind
  required Kind kind = 2;

  // Source file locations: compilers can pinpoint the uses of a dependency.
  repeated SourceLocation location = 3;
}

// Top-level message found in .deps artifacts
message Dependencies {
  repeated Dependency dependency = 1;

  // Name of the rule being analyzed.
  optional string rule_label = 2;

  // Whether the action was successful; even when compilation fails, partial
  // dependency information can be useful.
  optional bool success = 3;
}
