about summary refs log tree commit diff
diff options
context:
space:
mode:
authorVincent Ambo <tazjin@google.com>2019-11-24T20·34+0000
committerVincent Ambo <tazjin@google.com>2019-11-24T20·34+0000
commit071babf14824aee035dd6c3ddff1957662aa7c98 (patch)
treee45fb30c89aa8f2307a90e09e538cf039a2f1b3d
parentd441e035aabac877948f754289b3ab028408550b (diff)
feat(example): Add an example for how to use buildGo builders
-rw-r--r--example/default.nix43
-rw-r--r--example/lib.go9
-rw-r--r--example/main.go22
-rw-r--r--example/thing.proto10
4 files changed, 84 insertions, 0 deletions
diff --git a/example/default.nix b/example/default.nix
new file mode 100644
index 000000000000..407f55079359
--- /dev/null
+++ b/example/default.nix
@@ -0,0 +1,43 @@
+# Copyright 2019 Google LLC.
+# SPDX-License-Identifier: Apache-2.0
+
+# This file provides examples for how to use the various builder
+# functions provided by `buildGo`.
+#
+# The features used in the example are not exhaustive, but should give
+# users a quick introduction to how to use buildGo.
+
+let
+  buildGo = import ../buildGo.nix {};
+
+  # Example use of buildGo.package, which creates an importable Go
+  # package from the specified source files.
+  examplePackage = buildGo.package {
+    name = "example";
+    srcs = [
+      ./lib.go
+    ];
+  };
+
+  # Example use of buildGo.proto, which generates a Go library from a
+  # Protobuf definition file.
+  exampleProto = buildGo.proto {
+    name = "exampleproto";
+    proto = ./thing.proto;
+  };
+
+  # Example use of buildGo.program, which builds an executable using
+  # the specified name and dependencies (which in turn must have been
+  # created via buildGo.package etc.)
+in buildGo.program {
+  name = "example";
+
+  srcs = [
+    ./main.go
+  ];
+
+  deps = [
+    examplePackage
+    exampleProto
+  ];
+}
diff --git a/example/lib.go b/example/lib.go
new file mode 100644
index 000000000000..8a61370e994c
--- /dev/null
+++ b/example/lib.go
@@ -0,0 +1,9 @@
+// Copyright 2019 Google LLC.
+// SPDX-License-Identifier: Apache-2.0
+
+package example
+
+// UUID returns a totally random, carefully chosen UUID
+func UUID() string {
+	return "3640932f-ad40-4bc9-b45d-f504a0f5910a"
+}
diff --git a/example/main.go b/example/main.go
new file mode 100644
index 000000000000..1db1bb9e23e9
--- /dev/null
+++ b/example/main.go
@@ -0,0 +1,22 @@
+// Copyright 2019 Google LLC.
+// SPDX-License-Identifier: Apache-2.0
+//
+// Package main provides a tiny example program for the Bazel-style
+// Nix build system for Go.
+
+package main
+
+import (
+	"example"
+	"exampleproto"
+	"fmt"
+)
+
+func main() {
+	thing := exampleproto.Thing{
+		Id:          example.UUID(),
+		KindOfThing: "test thing",
+	}
+
+	fmt.Printf("The thing is a %s with ID %q\n", thing.Id, thing.KindOfThing)
+}
diff --git a/example/thing.proto b/example/thing.proto
new file mode 100644
index 000000000000..0cb34124dfb9
--- /dev/null
+++ b/example/thing.proto
@@ -0,0 +1,10 @@
+// Copyright 2019 Google LLC.
+// SPDX-License-Identifier: Apache-2.0
+
+syntax = "proto3";
+package exampleProto;
+
+message Thing {
+  string id = 1;
+  string kind_of_thing = 2;
+}