aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarco Poletti <poletti.marco@gmail.com>2020-08-09 12:30:58 -0700
committerMarco Poletti <poletti.marco@gmail.com>2020-08-09 12:30:58 -0700
commit6f3760672a0d2c772306e737d894a2ae2d8c5f58 (patch)
tree9a73e637603eca3b7e419047459c2bf6b292f521
parentf83a61fa1f58e4bba0fbf68fa5e70eb9d6c85314 (diff)
downloadgoogle-fruit-6f3760672a0d2c772306e737d894a2ae2d8c5f58.tar.gz
Add some example code to show how to depend on Fruit from a bazel project.
-rw-r--r--.gitignore1
-rw-r--r--extras/bazel_usage_example/BUILD8
-rw-r--r--extras/bazel_usage_example/WORKSPACE19
-rw-r--r--extras/bazel_usage_example/main.cpp55
4 files changed, 83 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index 098e886..2a2e921 100644
--- a/.gitignore
+++ b/.gitignore
@@ -18,3 +18,4 @@ bench_results
/*.vcxproj.user
/out/build/x64-Debug
/out/build/x64-Debug cxx-17
+/extras/bazel_usage_example/bazel-*
diff --git a/extras/bazel_usage_example/BUILD b/extras/bazel_usage_example/BUILD
new file mode 100644
index 0000000..47934aa
--- /dev/null
+++ b/extras/bazel_usage_example/BUILD
@@ -0,0 +1,8 @@
+
+licenses(["notice"])
+
+cc_binary(
+ name = "hello_world",
+ srcs = ["main.cpp"],
+ deps = ["@com_google_fruit//third_party/fruit"],
+)
diff --git a/extras/bazel_usage_example/WORKSPACE b/extras/bazel_usage_example/WORKSPACE
new file mode 100644
index 0000000..e037168
--- /dev/null
+++ b/extras/bazel_usage_example/WORKSPACE
@@ -0,0 +1,19 @@
+load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository")
+
+git_repository(
+ name = "com_github_nelhage_rules_boost",
+ branch = "master",
+ remote = "https://github.com/nelhage/rules_boost",
+)
+
+load("@com_github_nelhage_rules_boost//:boost/boost.bzl", "boost_deps")
+boost_deps()
+
+load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository")
+
+git_repository(
+ name = "com_google_fruit",
+ remote = "https://github.com/google/fruit",
+ branch = "master",
+ strip_prefix = "extras/bazel_root",
+)
diff --git a/extras/bazel_usage_example/main.cpp b/extras/bazel_usage_example/main.cpp
new file mode 100644
index 0000000..4364993
--- /dev/null
+++ b/extras/bazel_usage_example/main.cpp
@@ -0,0 +1,55 @@
+
+#include <fruit/fruit.h>
+#include <iostream>
+
+using fruit::Component;
+using fruit::Injector;
+
+class Writer {
+public:
+ virtual void write(std::string s) = 0;
+};
+
+class StdoutWriter : public Writer {
+public:
+ // Like "StdoutWriter() = default;" but also marks this constructor as the
+ // one to use for injection.
+ INJECT(StdoutWriter()) = default;
+
+ virtual void write(std::string s) override {
+ std::cout << s;
+ }
+};
+
+class Greeter {
+public:
+ virtual void greet() = 0;
+};
+
+class GreeterImpl : public Greeter {
+private:
+ Writer* writer;
+
+public:
+ // Like "GreeterImpl(Writer* writer) {...}" but also marks this constructor
+ // as the one to use for injection.
+ INJECT(GreeterImpl(Writer* writer)) : writer(writer) {}
+
+ virtual void greet() override {
+ writer->write("Hello world!\n");
+ }
+};
+
+Component<Greeter> getGreeterComponent() {
+ return fruit::createComponent().bind<Writer, StdoutWriter>().bind<Greeter, GreeterImpl>();
+}
+
+int main() {
+
+ Injector<Greeter> injector(getGreeterComponent);
+ Greeter* greeter = injector.get<Greeter*>();
+
+ greeter->greet();
+
+ return 0;
+}