# Copyright 2018 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/sdk/sdk_atom.gni")

# Declares a set of data files to be added to an SDK.
#
# Parameters
#
#   category (required)
#     Publication level of the data set in SDKs.
#     See //build/sdk/sdk_atom.gni.
#
#   name (required)
#     Name of the data set in the SDK.
#
#   files (required)
#     List of scopes describing the data files to add to SDKs.
#     See "File scopes" in //build/sdk/sdk_atom.gni for a description of the
#     scope format.
#
#   type (required)
#     Type of the data set in the SDK.
#     Currently only "license" and "config" data types are supported.

template("sdk_data") {
  assert(defined(invoker.category), "Must define an SDK category")
  assert(defined(invoker.name), "Must define an SDK name")
  assert(defined(invoker.files), "Must add documentation files")
  assert(defined(invoker.type), "Must define a data type")

  sdk_files = []
  foreach(file, invoker.files) {
    sdk_files += [ file.dest ]
  }

  sdk_atom(target_name) {
    forward_variables_from(invoker,
                           [
                             "category",
                             "files",
                           ])

    id = "sdk://data/${invoker.name}"

    meta = {
      schema = "data"
      dest = "${file_base}/${invoker.name}.json"
      value = {
        type = "${invoker.type}"
        name = invoker.name
        data = sdk_files
      }
    }
  }
}
