Add `--crubit-support-path` and `rstd::Char` type.
This CL adds `rstd::Char` - a C++ type that represents Rust's `char`
type that (a bit unlike `char32_t`) is 1) guaranteed to be 32-bits wide,
and 2) will one day reject bit patterns that lead to undefined behavior
in Rust (this is planned for a follow-up CL that should come fairly
soon).
The CL comes with only minimal tests that verify that `rstd::Char` can
be created from C++ character literals, can be explicitly cast to
`std::uint32_t`, and can be compared with itself. The shape of the
remaining API of `rstd::Char` is not fully defined at this point (e.g.
exact behavior of the default constructor, exposing other casts,
streaming via `operator<<`, etc.).
PiperOrigin-RevId: 502682654
diff --git a/support/rstd/char.h b/support/rstd/char.h
new file mode 100644
index 0000000..2270ba0
--- /dev/null
+++ b/support/rstd/char.h
@@ -0,0 +1,23 @@
+// Part of the Crubit project, under the Apache License v2.0 with LLVM
+// Exceptions. See /LICENSE for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+
+#ifndef CRUBIT_RS_BINDINGS_FROM_CC_SUPPORT_RSTD_CHAR_H_
+#define CRUBIT_RS_BINDINGS_FROM_CC_SUPPORT_RSTD_CHAR_H_
+
+#include <cstdint>
+
+namespace rstd {
+
+// `rstd::Char` is a C++ representation of the `char` type from Rust.
+//
+// See "layout tests" comments in `char_test.cc` for explanation why `char32_t`
+// is not used.
+//
+// TODO(b/265338802): Reject `char` values with invalid bit patterns (possibly
+// retaining `constexpr` aspect of some conversions).
+using Char = std::uint32_t;
+
+} // namespace rstd
+
+#endif // CRUBIT_RS_BINDINGS_FROM_CC_SUPPORT_RSTD_CHAR_H_