# Copyright 2019 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.

import("//build/components.gni")
import("//build/config/fuchsia/target_api_level.gni")
import("//build/rust/rustc_library.gni")

rustc_library("cm_fidl_validator") {
  with_unit_tests = true
  edition = "2021"
  deps = [
    "//sdk/fidl/fuchsia.component.decl:fuchsia.component.decl_rust",
    "//src/lib/directed_graph",
    "//src/sys/lib/cm_types",
    "//third_party/rust_crates:itertools",
    "//third_party/rust_crates:thiserror",
  ]
  test_deps = [
    "//sdk/fidl/fuchsia.data:fuchsia.data_rust",
    "//sdk/fidl/fuchsia.io:fuchsia.io_rust",
    "//third_party/rust_crates:lazy_static",
    "//third_party/rust_crates:proptest",
    "//third_party/rust_crates:regex",
    "//third_party/rust_crates:test-case",
    "//third_party/rust_crates:url",
  ]

  sources = [
    "src/error.rs",
    "src/lib.rs",
    "src/util.rs",
  ]
}

fuchsia_unittest_package("cm_fidl_validator_tests") {
  deps = [ ":cm_fidl_validator_test" ]
}

group("tests") {
  testonly = true

  deps = [
    ":cm_fidl_validator_tests",
    "tests",
  ]
}
