Create a Rust API for part of //aos:configuration

Change-Id: I00044634f437e72487aaaca28e9a00fe65a4aa48
Signed-off-by: Brian Silverman <bsilver16384@gmail.com>
diff --git a/aos/BUILD b/aos/BUILD
index 9394295..1380f7d 100644
--- a/aos/BUILD
+++ b/aos/BUILD
@@ -1,5 +1,6 @@
 load("@com_github_google_flatbuffers//:build_defs.bzl", "flatbuffer_cc_library", "flatbuffer_py_library", "flatbuffer_rust_library", "flatbuffer_ts_library")
 load("@rules_rust//rust:defs.bzl", "rust_library", "rust_test")
+load("//tools/build_rules:autocxx.bzl", "autocxx_library")
 
 exports_files(["aos_dump_autocomplete.sh"])
 
@@ -222,6 +223,14 @@
     visibility = ["//visibility:public"],
 )
 
+flatbuffer_rust_library(
+    name = "configuration_rust_fbs",
+    srcs = ["configuration.fbs"],
+    crate_name = "aos_configuration_fbs",
+    target_compatible_with = ["//tools/platforms/rust:has_support"],
+    visibility = ["//visibility:public"],
+)
+
 cc_library(
     name = "configuration",
     srcs = [
@@ -246,6 +255,51 @@
     ],
 )
 
+cc_library(
+    name = "configuration_for_rust",
+    srcs = [
+        "configuration_for_rust.cc",
+    ],
+    hdrs = [
+        "configuration_for_rust.h",
+    ],
+    deps = [
+        ":configuration",
+        ":for_rust",
+        "//third_party/cargo:cxx_cc",
+    ],
+)
+
+autocxx_library(
+    name = "configuration_rs",
+    srcs = ["configuration.rs"],
+    crate_name = "aos_configuration",
+    libs = [
+        ":configuration",
+        ":configuration_for_rust",
+        ":configuration_fbs",
+    ],
+    override_cc_toolchain = "@llvm_toolchain//:cc-clang-x86_64-linux",
+    target_compatible_with = ["//tools/platforms/rust:has_support"],
+    visibility = ["//visibility:public"],
+    deps = [
+        ":configuration_rust_fbs",
+        ":flatbuffers_rs",
+        "//third_party/cargo:thiserror",
+    ],
+)
+
+rust_test(
+    name = "configuration_rs_test",
+    crate = ":configuration_rs",
+    data = [
+        "//aos/testdata:test_configs",
+    ],
+    # TODO: Make Rust play happy with pic vs nopic. Details at:
+    # https://github.com/bazelbuild/rules_rust/issues/118
+    rustc_flags = ["-Crelocation-model=static"],
+)
+
 flatbuffer_ts_library(
     name = "json_to_flatbuffer_fbs_ts",
     srcs = ["json_to_flatbuffer.fbs"],
@@ -637,3 +691,14 @@
         "@com_github_google_glog//:glog",
     ],
 )
+
+cc_library(
+    name = "for_rust",
+    hdrs = [
+        "for_rust.h",
+    ],
+    visibility = ["//visibility:public"],
+    deps = [
+        "//third_party/cargo:cxx_cc",
+    ],
+)