// Copyright 2020 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

syntax = "proto3";
package dart_strict_deps;

/// Wrapper for specific metadata collection result.
///
/// Metadata is generated from dart_library.gni.
message BuildInfo {
  repeated BuildTarget build_targets = 1;
}

/// GN Build target in metadata collected form.
message BuildTarget {
  // Whether gn metadata collection was run on this as starting point.
  bool __is_current_target = 1 [json_name = "__is_current_target"];
  // The following are just standard GN variables forwarded.
  string __package_name = 2 [json_name = "__package_name"];
  repeated string __deps = 3 [json_name = "__deps"];
  repeated string __public_deps = 4 [json_name = "__public_deps"];
  // Represents absolute paths to source files.
  repeated string __rebased_sources = 5 [json_name = "__rebased_sources"];
}

/// Result of checking a build target.
message TargetCheckResult {
  string target_name = 1;
  // Represents the list of checked files.
  repeated FileCheckResult files = 2;
}

/// Result of checking a single file.
message FileCheckResult {
  // Represents absolute path to file.
  string file_path = 1;
  // A list of imports.
  repeated ImportResult imports = 2;
}

// Result of checking an import.
message ImportResult {
  // What line import is on.
  string line_info = 1;
  // The uri being imported. (eg. import 'package:abc')
  string import_uri = 2;
  // the absolute file path of the resolved file (can be null for dart: imports).
  string resolved_location = 3;

  enum State {
    // Was found in direct dependencies.
    FOUND = 0;
    // Failed to resolve path of import.
    NOT_FOUND = 1;
    // Package imported and file exists but file was not in GN sources list.
    MISSING_FROM_PACKAGE_SOURCES = 2;
    // Package was imported but file doesn't exist.
    FILE_MISSING = 3;
  }
  // State of the check.
  State state = 4;

  enum Type {
    DART_SDK = 0;
    RELATIVE = 1;
    PACKAGE = 2;
    ERROR = 3;  // eg 'abc:asda/'
  }

  // Type of import.
  Type type = 5;
  // The dart package being imported.
  string dart_package = 6;
  // Whether the dart pack package is a direct dep
  bool is_dart_package_imported = 7;
}
