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

import("//mojo/go/rules.gni")

group("go") {
  assert(go_build_tool != "")
  deps = [
    ":go_echo_client",
    ":go_echo_server",
    ":go_http_handler",
    ":go_http_server",
  ]
}

go_mojo_application("go_echo_client") {
  sources = [
    "echo_client.go",
  ]
  deps = [
    "//examples/echo:bindings",
  ]
}

go_mojo_application("go_echo_server") {
  sources = [
    "echo_server.go",
  ]
  deps = [
    "//examples/echo:bindings",
  ]
}

go_mojo_application("go_http_handler") {
  sources = [
    "http_handler.go",
  ]
  deps = [
    "//mojo/services/http_server/interfaces",
    "//mojo/services/network/interfaces",
  ]
}

go_mojo_application("go_http_server") {
  sources = [
    "http_server.go",
  ]
  deps = [
    "//mojo/services/network/interfaces",
  ]
}
