# Copyright 2020 The Bazel Authors. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

load("@build_bazel_rules_nodejs//:index.bzl", "nodejs_test")
load("@rules_rust//rust:defs.bzl", "rust_binary", "rust_shared_library")
load("@rules_rust//wasm_bindgen:wasm_bindgen.bzl", "rust_wasm_bindgen")

package(default_visibility = ["//visibility:public"])

rust_binary(
    name = "hello_world_bin_wasm",
    srcs = ["main.rs"],
    edition = "2018",
    deps = [
        "@rules_rust//wasm_bindgen/3rdparty:wasm_bindgen",
    ],
)

rust_shared_library(
    name = "hello_world_lib_wasm",
    srcs = ["main.rs"],
    edition = "2018",
    deps = [
        "@rules_rust//wasm_bindgen/3rdparty:wasm_bindgen",
    ],
)

rust_wasm_bindgen(
    name = "hello_world_bundler_wasm_bindgen",
    wasm_file = ":hello_world_bin_wasm",
)

rust_wasm_bindgen(
    name = "hello_world_web_wasm_bindgen",
    target = "web",
    wasm_file = ":hello_world_lib_wasm",
)

rust_wasm_bindgen(
    name = "hello_world_deno_wasm_bindgen",
    target = "deno",
    wasm_file = ":hello_world_lib_wasm",
)

rust_wasm_bindgen(
    name = "hello_world_nomodules_wasm_bindgen",
    target = "no-modules",
    wasm_file = ":hello_world_lib_wasm",
)

rust_wasm_bindgen(
    name = "hello_world_nodejs_wasm_bindgen",
    target = "nodejs",
    wasm_file = ":hello_world_lib_wasm",
)

nodejs_test(
    name = "hello_world_wasm_test",
    data = [
        ":hello_world_bundler_wasm_bindgen",
        ":hello_world_deno_wasm_bindgen",
        ":hello_world_nodejs_wasm_bindgen",
        ":hello_world_nomodules_wasm_bindgen",
        ":hello_world_web_wasm_bindgen",
    ],
    entry_point = "hello_world_wasm_test.js",
)
