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

# All build targets below are experimental and not used within the
# Chromium / V8 / etc. trees yet thus far. Do not depend on anything.

static_library("json_parser") {
  sources = [
    "encoding/json_parser.cc",
    "encoding/json_parser.h",
    "encoding/json_parser_handler.h",
    "encoding/platform.h",
    "encoding/span.h",
    "encoding/status.h",
  ]
}

static_library("linux_dev_platform") {
  sources = [
    "encoding/linux_dev_platform.cc",
    "encoding/linux_dev_platform.h",
    "encoding/platform.h",
  ]
}

test("json_parser_test") {
  sources = [
    "encoding/json_parser_test.cc",
  ]
  deps = [
    ":json_parser",
    ":linux_dev_platform",
    "//testing:gtest_main",
    "//third_party/gtest:gmock",
    "//third_party/gtest:gtest",
    "//third_party/mini_chromium/mini_chromium/base",
  ]
}

static_library("binary_encoding") {
  sources = [
    "encoding/binary_encoding.cc",
    "encoding/binary_encoding.h",
    "encoding/json_parser_handler.h",
    "encoding/span.h",
    "encoding/status.h",
  ]
  deps = [
    ":json_parser",
  ]
}

test("binary_encoding_test") {
  sources = [
    "encoding/binary_encoding_test.cc",
  ]
  deps = [
    ":binary_encoding",
    ":linux_dev_platform",
    "//testing:gtest_main",
    "//third_party/gtest:gmock",
    "//third_party/gtest:gtest",
    "//third_party/mini_chromium/mini_chromium/base",
  ]
}

test("span_test") {
  sources = [
    "encoding/span.h",
    "encoding/span_test.cc",
  ]
  deps = [
    "//testing:gtest_main",
    "//third_party/gtest:gmock",
    "//third_party/gtest:gtest",
    "//third_party/mini_chromium/mini_chromium/base",
  ]
}

static_library("json_std_string_writer") {
  sources = [
    "encoding/json_parser_handler.h",
    "encoding/json_std_string_writer.cc",
    "encoding/json_std_string_writer.h",
  ]
}

test("json_std_string_writer_test") {
  sources = [
    "encoding/json_std_string_writer_test.cc",
  ]
  deps = [
    ":json_std_string_writer",
    ":linux_dev_platform",
    "//testing:gtest_main",
    "//third_party/gtest:gmock",
    "//third_party/gtest:gtest",
    "//third_party/mini_chromium/mini_chromium/base",
  ]
}
