# Copyright (c) 2018 The WebRTC project authors. All Rights Reserved.
#
# Use of this source code is governed by a BSD-style license
# that can be found in the LICENSE file in the root of the source
# tree. An additional intellectual property rights grant can be found
# in the file PATENTS.  All contributing project authors may
# be found in the AUTHORS file in the root of the source tree.

import("../../webrtc.gni")

rtc_library("data_rate") {
  visibility = [ "*" ]
  sources = [
    "data_rate.cc",
    "data_rate.h",
  ]

  deps = [
    ":data_size",
    ":frequency",
    ":time_delta",
    "../../rtc_base:checks",
    "../../rtc_base:stringutils",
    "../../rtc_base/system:rtc_export",
    "../../rtc_base/units:unit_base",
  ]
}

rtc_library("data_size") {
  visibility = [ "*" ]
  sources = [
    "data_size.cc",
    "data_size.h",
  ]

  deps = [
    "../../rtc_base:stringutils",
    "../../rtc_base/system:rtc_export",
    "../../rtc_base/units:unit_base",
  ]
}

rtc_library("time_delta") {
  visibility = [ "*" ]
  sources = [
    "time_delta.cc",
    "time_delta.h",
  ]

  deps = [
    "../../rtc_base:stringutils",
    "../../rtc_base/system:rtc_export",
    "../../rtc_base/units:unit_base",
  ]
}

rtc_library("frequency") {
  visibility = [ "*" ]
  sources = [
    "frequency.cc",
    "frequency.h",
  ]

  deps = [
    ":time_delta",
    "../../rtc_base:checks",
    "../../rtc_base:stringutils",
    "../../rtc_base/system:rtc_export",
    "../../rtc_base/units:unit_base",
  ]
}

rtc_library("timestamp") {
  visibility = [ "*" ]
  sources = [
    "timestamp.cc",
    "timestamp.h",
  ]

  deps = [
    ":time_delta",
    "../../rtc_base:checks",
    "../../rtc_base:stringutils",
    "../../rtc_base/system:rtc_export",
    "../../rtc_base/units:unit_base",
  ]
}

if (rtc_include_tests) {
  rtc_library("units_unittests") {
    testonly = true
    sources = [
      "data_rate_unittest.cc",
      "data_size_unittest.cc",
      "frequency_unittest.cc",
      "time_delta_unittest.cc",
      "timestamp_unittest.cc",
    ]
    deps = [
      ":data_rate",
      ":data_size",
      ":frequency",
      ":time_delta",
      ":timestamp",
      "../../rtc_base:checks",
      "../../rtc_base:logging",
      "../../test:test_support",
      "//third_party/abseil-cpp/absl/strings",
    ]
  }
}

if (rtc_rust) {
  rtc_rust_library("time_delta_ffi_rust") {
    crate_root = "time_delta_ffi.rs"
    sources = [ "time_delta_ffi.rs" ]
    deps = [
      ":time_delta",
      ":time_delta_rs",
      "//build/rust:cxx_rustdeps",
    ]
  }
  rtc_rust_cxx_bridge("time_delta_ffi") {
    source = "time_delta_ffi.rs"
    deps = [
      ":time_delta",
      ":time_delta_ffi_rust",
      ":time_delta_rs",
      "//build/rust:cxx_rustdeps",
    ]
  }

  rtc_rust_library("time_delta_rs") {
    allow_unsafe = true
    crate_root = "time_delta.rs"
    sources = [ "time_delta.rs" ]
    deps = [
      ":time_delta",
      "//build/rust:cxx_rustdeps",
    ]
  }

  rtc_rust_library("timestamp_ffi_rust") {
    allow_unsafe = true
    crate_root = "timestamp_ffi.rs"
    sources = [ "timestamp_ffi.rs" ]
    deps = [
      ":timestamp",
      ":timestamp_rs",
      "//build/rust:cxx_rustdeps",
    ]
  }

  rtc_rust_cxx_bridge("timestamp_ffi") {
    source = "timestamp_ffi.rs"
    deps = [
      ":timestamp",
      ":timestamp_ffi_rust",
      ":timestamp_rs",
      "//build/rust:cxx_rustdeps",
    ]
  }

  rtc_rust_library("timestamp_rs") {
    allow_unsafe = true
    crate_root = "timestamp.rs"
    sources = [ "timestamp.rs" ]
    deps = [
      ":time_delta_rs",
      ":timestamp",
      "//build/rust:cxx_rustdeps",
    ]
  }

  if (rtc_include_tests) {
    rtc_rust_unittest("time_delta_rs_unittests") {
      allow_unsafe = true
      crate_root = "time_delta.rs"
      sources = [ "time_delta.rs" ]
      deps = [
        ":time_delta",
        "//build/rust:cxx_cppdeps",
        "//build/rust:cxx_rustdeps",
      ]
    }

    rtc_rust_unittest("timestamp_rs_unittests") {
      allow_unsafe = true
      crate_root = "timestamp.rs"
      sources = [ "timestamp.rs" ]
      deps = [
        ":time_delta_rs",
        ":timestamp",
        "//build/rust:cxx_cppdeps",
        "//build/rust:cxx_rustdeps",
      ]
    }

    rtc_rust_test_suite("units_rust_unit_tests") {
      deps = [
        ":time_delta_rs_unittests",
        ":timestamp_rs_unittests",
      ]
    }
  }
}
