// Automatically @generated C++ bindings for the following Rust crate:
// std
// Features: <none>

#pragma once

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wreturn-type-c-linkage"
#pragma clang diagnostic ignored "-Wunused-private-field"
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
#pragma clang diagnostic ignored "-Wignored-attributes"
#include <array>
#include <bit>
#include <compare>
#include <cstddef>
#include <cstdint>
#include <cstring>
#include <optional>
#include <ostream>
#include <string_view>
#include <tuple>
#include <type_traits>
#include <utility>

#include "third_party/crubit/support/annotations_internal.h"
#include "third_party/crubit/support/bridge.h"
#include "third_party/crubit/support/internal/check.h"
#include "third_party/crubit/support/internal/check_no_mutable_aliasing.h"
#include "third_party/crubit/support/internal/memswap.h"
#include "third_party/crubit/support/internal/slot.h"
#include "third_party/crubit/support/lifetime_annotations.h"
#include "third_party/crubit/support/rs_std/char.h"
#include "third_party/crubit/support/rs_std/iterator_adapter.h"
#include "third_party/crubit/support/rs_std/option.h"
#include "third_party/crubit/support/rs_std/result.h"
#include "third_party/crubit/support/rs_std/rs_alloc.h"
#include "third_party/crubit/support/rs_std/rs_core.h"
#include "third_party/crubit/support/rs_std/slice_ref.h"
#include "third_party/crubit/support/rs_std/str_ref.h"
#include "third_party/crubit/support/rs_std/traits.h"
#include "third_party/crubit/support/rs_std/tuple.h"
#include "third_party/crubit/support/rs_std/vec.h"

namespace rs::std::backtrace {
struct BacktraceStatus;
}

namespace rs::std::io {
struct ErrorKind;
}

namespace rs::std::ffi {
struct OsString;
}

namespace rs::std::fs {
struct FileType;
struct Metadata;
struct OpenOptions;
struct Permissions;
}  // namespace rs::std::fs

namespace rs::std::io {
struct StderrLock;
struct StdinLock;
struct StdoutLock;
}  // namespace rs::std::io

namespace rs::std::net {
struct TcpListener;
struct TcpStream;
}  // namespace rs::std::net

namespace rs::std::path {
struct Components;
struct Iter;
struct PathBuf;
struct PrefixComponent;
}  // namespace rs::std::path

namespace rs::std::process {
struct Child;
struct CommandArgs;
struct CommandEnvs;
struct ExitStatus;
struct Output;
struct Stdio;
}  // namespace rs::std::process

namespace rs::std::sync {
struct BarrierWaitResult;
}

namespace rs::std::thread {
struct Builder;
}

namespace rs::std::thread {
struct Thread;
}

namespace rs::std::time {
struct SystemTime;
struct SystemTimeError;
}  // namespace rs::std::time

namespace rs::std::alloc {

// Error generating bindings for struct `alloc::System` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/alloc.rs;l=146:
// Zero-sized types (ZSTs) are not supported (b/258259459)

}

namespace rs::std::io {

//  A `BufRead` is a type of [`Read`]er which has an internal buffer, allowing
//  it to perform extra ways of reading.
//
//  For example, reading line-by-line is inefficient without using a buffer, so
//  if you want to read by line, you'll need `BufRead`, which includes a
//  [`read_line`] method as well as a [`lines`] iterator.
//
//  # Examples
//
//  A locked standard input implements `BufRead`:
//
//  ```no_run
//  use std::io;
//  use std::io::prelude::*;
//
//  let stdin = io::stdin();
//  for line in stdin.lock().lines() {
//      println!("{}", line?);
//  }
//  # std::io::Result::Ok(())
//  ```
//
//  If you have something that implements [`Read`], you can use the `BufReader`
//  type to turn it into a `BufRead`.
//
//  For example, `File` implements [`Read`], but not `BufRead`.
//  `BufReader` to the rescue!
//
//  [`read_line`]: BufRead::read_line
//  [`lines`]: BufRead::lines
//
//  ```no_run
//  use std::io::{self, BufReader};
//  use std::io::prelude::*;
//  use std::fs::File;
//
//  fn main() -> io::Result<()> {
//      let f = File::open("foo.txt")?;
//      let f = BufReader::new(f);
//
//      for line in f.lines() {
//          let line = line?;
//          println!("{line}");
//      }
//
//      Ok(())
//  }
//  ```
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/io/buf_read.rs;l=57
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: io :: BufRead") BufRead {
  template <typename T>
  using impl = rs_std::impl<T, BufRead>;
};

}  // namespace rs::std::io

namespace rs::std::io {

// Error generating bindings for struct `alloc_crate::io::BufReader` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/io/buffered/bufreader.rs;l=55:
// crubit.rs/errors/unsupported_type: Generic types are not supported yet
// (b/259749095)

}

namespace rs::std::io {

// Error generating bindings for struct `alloc_crate::io::BufWriter` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/io/buffered/bufwriter.rs;l=70:
// crubit.rs/errors/unsupported_type: Generic types are not supported yet
// (b/259749095)

}

namespace rs::std::io {

// Error generating bindings for struct `alloc_crate::io::Bytes` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/io/util.rs;l=336:
// crubit.rs/errors/unsupported_type: Generic types are not supported yet
// (b/259749095)

}

namespace rs::std::io {

// Error generating bindings for struct `alloc_crate::io::IntoInnerError`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/io/buffered/mod.rs;l=44:
// crubit.rs/errors/unsupported_type: Generic types are not supported yet
// (b/259749095)

}

namespace rs::std::io {

// Error generating bindings for struct `alloc_crate::io::LineWriter` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/io/buffered/linewriter.rs;l=68:
// crubit.rs/errors/unsupported_type: Generic types are not supported yet
// (b/259749095)

}

namespace rs::std::io {

// Error generating bindings for struct `alloc_crate::io::Lines` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/io/util.rs;l=446:
// crubit.rs/errors/unsupported_type: Generic types are not supported yet
// (b/259749095)

}

namespace rs::std::io {

//  The `Read` trait allows for reading bytes from a source.
//
//  Implementors of the `Read` trait are called 'readers'.
//
//  Readers are defined by one required method, [`read()`]. Each call to
//  [`read()`] will attempt to pull bytes from this source into a provided
//  buffer. A number of other methods are implemented in terms of [`read()`],
//  giving implementors a number of ways to read bytes while only needing to
//  implement a single method.
//
//  Readers are intended to be composable with one another. Many implementors
//  throughout [`std::io`] take and provide types which implement the `Read`
//  trait.
//
//  Please note that each call to [`read()`] may involve a system call, and
//  therefore, using something that implements [`BufRead`], such as
//  `BufReader`, will be more efficient.
//
//  [`BufRead`]: crate::io::BufRead
//
//  Repeated calls to the reader use the same cursor, so for example
//  calling `read_to_end` twice on a `File` will only return the file's
//  contents once. It's recommended to first call `rewind()` in that case.
//
//  # Examples
//
//  `File`s implement `Read`:
//
//  ```no_run
//  use std::io;
//  use std::io::prelude::*;
//  use std::fs::File;
//
//  fn main() -> io::Result<()> {
//      let mut f = File::open("foo.txt")?;
//      let mut buffer = [0; 10];
//
//      // read up to 10 bytes
//      f.read(&mut buffer)?;
//
//      let mut buffer = Vec::new();
//      // read the whole file
//      f.read_to_end(&mut buffer)?;
//
//      // read into a String, so that you don't need to do the conversion.
//      let mut buffer = String::new();
//      f.read_to_string(&mut buffer)?;
//
//      // and more! See the other methods for more details.
//      Ok(())
//  }
//  ```
//
//  Read from [`&str`] because [`&[u8]`][prim@slice] implements `Read`:
//
//  ```no_run
//  # use std::io;
//  use std::io::prelude::*;
//
//  fn main() -> io::Result<()> {
//      let mut b = "This string will be read".as_bytes();
//      let mut buffer = [0; 10];
//
//      // read up to 10 bytes
//      b.read(&mut buffer)?;
//
//      // etc... it works exactly as a File does!
//      Ok(())
//  }
//  ```
//
//  [`read()`]: Read::read
//  [`&str`]: prim@str
//  [`std::io`]: crate::io
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/io/read.rs;l=88
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: io :: Read") Read {
  template <typename T>
  using impl = rs_std::impl<T, Read>;
};

}  // namespace rs::std::io

namespace rs::std::io {

// Error generating bindings for struct `alloc_crate::io::Split` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/io/util.rs;l=409:
// crubit.rs/errors/unsupported_type: Generic types are not supported yet
// (b/259749095)

}

namespace rs::std::io {

// Error generating bindings for function `alloc_crate::io::copy` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/io/copy.rs;l=79:
// No valid non-generic replacement for generic type param `R`

}

namespace rs::std::io {

// Error generating bindings for function `alloc_crate::io::read_to_string`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/io/read.rs;l=769:
// No valid non-generic replacement for generic type param `R`

}

namespace rs::std::ascii {

//  Extension methods for ASCII-subset only operations.
//
//  Be aware that operations on seemingly non-ASCII characters can sometimes
//  have unexpected results. Consider this example:
//
//  ```
//  use std::ascii::AsciiExt;
//
//  assert_eq!(AsciiExt::to_ascii_uppercase("cafe\u{301}"), "CAFE\u{301}");
//  assert_eq!(AsciiExt::to_ascii_uppercase("café"), "CAFé");
//  ```
//
//  In the first example, the lowercased string is represented `"cafe\\u{301}"`
//  (the last character is an acute accent [combining character]). Unlike the
//  other characters in the string, the combining character will not get mapped
//  to an uppercase variant, resulting in `"CAFE\\u{301}"`. In the second
//  example, the lowercased string is represented `"caf\\u{e9}"` (the last
//  character is a single Unicode character representing an 'e' with an acute
//  accent). Since the last character is defined outside the scope of ASCII,
//  it will not get mapped to an uppercase variant, resulting in `"CAF\\u{e9}"`.
//
//  [combining character]: https://en.wikipedia.org/wiki/Combining_character
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/ascii.rs;l=45
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: ascii :: AsciiExt") AsciiExt {
  template <typename T>
  using impl = rs_std::impl<T, AsciiExt>;
};

}  // namespace rs::std::ascii

namespace rs::std::backtrace {

//  A captured OS thread stack backtrace.
//
//  This type represents a stack backtrace for an OS thread captured at a
//  previous point in time. In some instances the `Backtrace` type may
//  internally be empty due to configuration. For more information see
//  `Backtrace::capture`.
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/backtrace.rs;l=108
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: backtrace :: Backtrace") alignas(8)
    [[clang::trivial_abi]] [[nodiscard]] Backtrace final {
 public:
  // `std::backtrace::Backtrace` doesn't implement the `Default` trait
  Backtrace() = delete;

  // Drop::drop
  ~Backtrace();

  // C++ move operations are unavailable for this type. See
  // http://crubit.rs/rust/movable_types for an explanation of Rust types that
  // are C++ movable.
  Backtrace(Backtrace&&) = delete;
  ::rs::std::backtrace::Backtrace& operator=(Backtrace&&) = delete;
  // `std::backtrace::Backtrace` doesn't implement the `Clone` trait
  Backtrace(const Backtrace&) = delete;
  Backtrace& operator=(const Backtrace&) = delete;
  Backtrace(::crubit::UnsafeRelocateTag, Backtrace&& value);

  //  Captures a stack backtrace of the current thread.
  //
  //  This function will capture a stack backtrace of the current OS thread of
  //  execution, returning a `Backtrace` type which can be later used to print
  //  the entire stack trace or render it to a string.
  //
  //  This function will be a noop if the `RUST_BACKTRACE` or
  //  `RUST_LIB_BACKTRACE` backtrace variables are both not set. If either
  //  environment variable is set and enabled then this function will actually
  //  capture a backtrace. Capturing a backtrace can be both memory intensive
  //  and slow, so these environment variables allow liberally using
  //  `Backtrace::capture` and only incurring a slowdown when the environment
  //  variables are set.
  //
  //  To forcibly capture a backtrace regardless of environment variables, use
  //  the `Backtrace::force_capture` function.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/backtrace.rs;l=292
  static ::rs::std::backtrace::Backtrace capture();

  //  Forcibly captures a full backtrace, regardless of environment variable
  //  configuration.
  //
  //  This function behaves the same as `capture` except that it ignores the
  //  values of the `RUST_BACKTRACE` and `RUST_LIB_BACKTRACE` environment
  //  variables, always capturing a backtrace.
  //
  //  Note that capturing a backtrace can be an expensive operation on some
  //  platforms, so this should be used with caution in performance-sensitive
  //  parts of code.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/backtrace.rs;l=311
  static ::rs::std::backtrace::Backtrace force_capture();

  //  Forcibly captures a disabled backtrace, regardless of environment
  //  variable configuration.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/backtrace.rs;l=319
  static ::rs::std::backtrace::Backtrace disabled();

  //  Returns the status of this backtrace, indicating whether this backtrace
  //  request was unsupported, disabled, or a stack trace was actually
  //  captured.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/backtrace.rs;l=363
  [[nodiscard]] ::rs::std::backtrace::BacktraceStatus status() const;

  // AbslStringify and std::ostream support via std::fmt::Display
  template <typename Sink, typename Str = rs::alloc::string::String>
  friend void AbslStringify(Sink& sink, const Backtrace& self) {
    crubit::Slot<Str> s;
    __crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std9backtrace9BacktraceNtNtCsaddbpR6HRqH_u5alloc6string8ToString9to_ustringB6_u(
        self, s.Get());
    AbslStringify(sink, ::std::move(s).AssumeInitAndTakeValue().as_str());
  }
  template <typename Str = rs::alloc::string::String>
  friend ::std::ostream& operator<<(::std::ostream& os, const Backtrace& self) {
    crubit::Slot<Str> s;
    __crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std9backtrace9BacktraceNtNtCsaddbpR6HRqH_u5alloc6string8ToString9to_ustringB6_u(
        self, s.Get());
    return os << ::std::string_view(
               ::std::move(s).AssumeInitAndTakeValue().as_str());
  }

 private:
  // Field type has been replaced with a blob of bytes: Not a public or a
  // supported reexported type (b/262052635).
  ::std::array<unsigned char, 48> inner;

 private:
  static void __crubit_field_offset_assertions();
};

//  The current status of a backtrace, indicating whether it was captured or
//  whether it is empty for some other reason.
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/backtrace.rs;l=117
struct CRUBIT_INTERNAL_RUST_TYPE(
    ":: std :: backtrace :: BacktraceStatus") alignas(1) [[clang::trivial_abi]]
BacktraceStatus final {
 public:
  // `std::backtrace::BacktraceStatus` doesn't implement the `Default` trait
  BacktraceStatus() = delete;

  //  Capturing a backtrace is not supported, likely because it's not
  //  implemented for the current platform.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/backtrace.rs;l=121
  static constexpr BacktraceStatus MakeUnsupported();

  //  Capturing a backtrace has been disabled through either the
  //  `RUST_LIB_BACKTRACE` or `RUST_BACKTRACE` environment variables.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/backtrace.rs;l=125
  static constexpr BacktraceStatus MakeDisabled();

  //  A backtrace has been captured and the `Backtrace` should print
  //  reasonable information when rendered.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/backtrace.rs;l=129
  static constexpr BacktraceStatus MakeCaptured();

  // No custom `Drop` impl and no custom "drop glue" required
  ~BacktraceStatus() = default;
  BacktraceStatus(BacktraceStatus&&) = default;
  BacktraceStatus& operator=(BacktraceStatus&&) = default;

  // `std::backtrace::BacktraceStatus` doesn't implement the `Clone` trait
  BacktraceStatus(const BacktraceStatus&) = delete;
  BacktraceStatus& operator=(const BacktraceStatus&) = delete;
  BacktraceStatus(::crubit::UnsafeRelocateTag, BacktraceStatus&& value);

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/backtrace.rs;l=116
  bool operator==(::rs::std::backtrace::BacktraceStatus const& other) const;

 private:
  // Field type has been replaced with a blob of bytes: No support for bindings
  // of individual non-repr(C) `enum`s
  ::std::array<unsigned char, 1> __opaque_blob_of_bytes;

 private:
  struct PrivateBytesTag {};
  constexpr BacktraceStatus(PrivateBytesTag,
                            ::std::array<unsigned char, 1> bytes)
      : __opaque_blob_of_bytes(bytes) {}

 private:
  static void __crubit_field_offset_assertions();
};

}  // namespace rs::std::backtrace

namespace rs::std::collections::hash_map {

// Error generating bindings for struct `collections::hash::map::Drain` defined
// at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/collections/hash/map.rs;l=1798:
// crubit.rs/errors/unsupported_type: Generic types are not supported yet
// (b/259749095)

// Error generating bindings for enum `collections::hash::map::Entry` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/collections/hash/map.rs;l=1950:
// crubit.rs/errors/unsupported_type: Generic types are not supported yet
// (b/259749095)

// Error generating bindings for struct `collections::hash::map::ExtractIf`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/collections/hash/map.rs;l=1834:
// crubit.rs/errors/unsupported_type: Generic types are not supported yet
// (b/259749095)

}  // namespace rs::std::collections::hash_map

namespace rs::std::collections {

// Error generating bindings for struct `collections::hash::map::HashMap`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/collections/hash/map.rs;l=246:
// crubit.rs/errors/unsupported_type: Generic types are not supported yet
// (b/259749095)

}

namespace rs::std::collections::hash_map {

// Error generating bindings for struct `collections::hash::map::IntoIter`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/collections/hash/map.rs;l=1661:
// crubit.rs/errors/unsupported_type: Generic types are not supported yet
// (b/259749095)

// Error generating bindings for struct `collections::hash::map::IntoKeys`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/collections/hash/map.rs;l=1893:
// crubit.rs/errors/unsupported_type: Generic types are not supported yet
// (b/259749095)

// Error generating bindings for struct `collections::hash::map::IntoValues`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/collections/hash/map.rs;l=1927:
// crubit.rs/errors/unsupported_type: Generic types are not supported yet
// (b/259749095)

// Error generating bindings for struct `collections::hash::map::Iter` defined
// at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/collections/hash/map.rs;l=1576:
// crubit.rs/errors/unsupported_type: Generic types are not supported yet
// (b/259749095)

// Error generating bindings for struct `collections::hash::map::IterMut`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/collections/hash/map.rs;l=1623:
// crubit.rs/errors/unsupported_type: Generic types are not supported yet
// (b/259749095)

// Error generating bindings for struct `collections::hash::map::Keys` defined
// at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/collections/hash/map.rs;l=1704:
// crubit.rs/errors/unsupported_type: Generic types are not supported yet
// (b/259749095)

// Error generating bindings for struct `collections::hash::map::OccupiedEntry`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/collections/hash/map.rs;l=1978:
// crubit.rs/errors/unsupported_type: Generic types are not supported yet
// (b/259749095)

// Error generating bindings for struct `collections::hash::map::VacantEntry`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/collections/hash/map.rs;l=2000:
// crubit.rs/errors/unsupported_type: Generic types are not supported yet
// (b/259749095)

// Error generating bindings for struct `collections::hash::map::Values` defined
// at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/collections/hash/map.rs;l=1751:
// crubit.rs/errors/unsupported_type: Generic types are not supported yet
// (b/259749095)

// Error generating bindings for struct `collections::hash::map::ValuesMut`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/collections/hash/map.rs;l=1863:
// crubit.rs/errors/unsupported_type: Generic types are not supported yet
// (b/259749095)

}  // namespace rs::std::collections::hash_map

namespace rs::std::collections::hash_set {

// Error generating bindings for struct `collections::hash::set::Difference`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/collections/hash/set.rs;l=1589:
// crubit.rs/errors/unsupported_type: Generic types are not supported yet
// (b/259749095)

// Error generating bindings for struct `collections::hash::set::Drain` defined
// at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/collections/hash/set.rs;l=1502:
// crubit.rs/errors/unsupported_type: Generic types are not supported yet
// (b/259749095)

// Error generating bindings for struct `collections::hash::set::ExtractIf`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/collections/hash/set.rs;l=1528:
// crubit.rs/errors/unsupported_type: Generic types are not supported yet
// (b/259749095)

}  // namespace rs::std::collections::hash_set

namespace rs::std::collections {

// Error generating bindings for struct `collections::hash::set::HashSet`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/collections/hash/set.rs;l=126:
// crubit.rs/errors/unsupported_type: Generic types are not supported yet
// (b/259749095)

}

namespace rs::std::collections::hash_set {

// Error generating bindings for struct `collections::hash::set::Intersection`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/collections/hash/set.rs;l=1557:
// crubit.rs/errors/unsupported_type: Generic types are not supported yet
// (b/259749095)

// Error generating bindings for struct `collections::hash::set::IntoIter`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/collections/hash/set.rs;l=1469:
// crubit.rs/errors/unsupported_type: Generic types are not supported yet
// (b/259749095)

// Error generating bindings for struct `collections::hash::set::Iter` defined
// at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/collections/hash/set.rs;l=1440:
// crubit.rs/errors/unsupported_type: Generic types are not supported yet
// (b/259749095)

// Error generating bindings for struct
// `collections::hash::set::SymmetricDifference` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/collections/hash/set.rs;l=1621:
// crubit.rs/errors/unsupported_type: Generic types are not supported yet
// (b/259749095)

// Error generating bindings for struct `collections::hash::set::Union` defined
// at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/collections/hash/set.rs;l=1650:
// crubit.rs/errors/unsupported_type: Generic types are not supported yet
// (b/259749095)

}  // namespace rs::std::collections::hash_set

namespace rs::std::io {

// Error generating bindings for struct `core::io::Chain` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/util.rs;l=334:
// crubit.rs/errors/unsupported_type: Generic types are not supported yet
// (b/259749095)

}

namespace rs::std::io {

// Error generating bindings for struct `core::io::Cursor` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/cursor.rs;l=75:
// crubit.rs/errors/unsupported_type: Generic types are not supported yet
// (b/259749095)

}

namespace rs::std::io {

// Error generating bindings for struct `core::io::Empty` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/util.rs;l=15:
// Zero-sized types (ZSTs) are not supported (b/258259459)

}

namespace rs::std::io {

//  The error type for I/O operations of the [`Read`][Read], [`Write`][Write],
//  [`Seek`][Seek], and associated traits.
//
//  Errors mostly originate from the underlying OS, but custom instances of
//  `Error` can be created with crafted error messages and a particular value of
//  [`ErrorKind`].
//
//  [Read]: ../../std/io/trait.Read.html
//  [Write]: crate::io::Write
//  [Seek]: crate::io::Seek
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/error.rs;l=86
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: io :: Error") alignas(8)
    [[clang::trivial_abi]] Error final {
 public:
  // `std::io::Error` doesn't implement the `Default` trait
  Error() = delete;

  // Drop::drop
  ~Error();

  // C++ move operations are unavailable for this type. See
  // http://crubit.rs/rust/movable_types for an explanation of Rust types that
  // are C++ movable.
  Error(Error&&) = delete;
  ::rs::std::io::Error& operator=(Error&&) = delete;
  // `std::io::Error` doesn't implement the `Clone` trait
  Error(const Error&) = delete;
  Error& operator=(const Error&) = delete;
  Error(::crubit::UnsafeRelocateTag, Error&& value);

  //  Returns the OS error that this error represents (if any).
  //
  //  If this [`Error`] was constructed via [`last_os_error`][last_os_error] or
  //  [`from_raw_os_error`][from_raw_os_error], then this function will return
  //  [`Some`], otherwise it will return [`None`].
  //
  //  [last_os_error]: ../../std/io/struct.Error.html#method.last_os_error
  //  [from_raw_os_error]:
  //  ../../std/io/struct.Error.html#method.from_raw_os_error
  //
  //  # Examples
  //
  //  ```
  //  use std::io::{Error, ErrorKind};
  //
  //  fn print_os_error(err: &Error) {
  //      if let Some(raw_os_err) = err.raw_os_error() {
  //          println!("raw OS error: {raw_os_err:?}");
  //      } else {
  //          println!("Not an OS error");
  //      }
  //  }
  //
  //  fn main() {
  //      // Will print "raw OS error: ...".
  //      print_os_error(&Error::last_os_error());
  //      // Will print "Not an OS error".
  //      print_os_error(&Error::new(ErrorKind::Other, "oh no!"));
  //  }
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/error.rs;l=319
  [[nodiscard]] ::std::optional<::std::int32_t> raw_os_error() const;

  // Error generating bindings for associated function
  // `core::io::Error::get_ref` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/error.rs;l=358:
  // Error formatting function return type `core::option::Option<&'__anon1 (dyn
  // core::error::Error + core::marker::Send + core::marker::Sync + 'static)>`:
  // Failed to format the referent of the reference type `&'static (dyn
  // core::error::Error + core::marker::Send + core::marker::Sync + 'static)`:
  // The following Rust type is not supported yet: (dyn core::error::Error +
  // core::marker::Send + core::marker::Sync + 'static)

  // Error generating bindings for associated function
  // `core::io::Error::get_mut` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/error.rs;l=433:
  // Error formatting function return type `core::option::Option<&'__anon1 mut
  // (dyn core::error::Error + core::marker::Send + core::marker::Sync +
  // 'static)>`: Failed to format the referent of the reference type `&'static
  // mut (dyn core::error::Error + core::marker::Send + core::marker::Sync +
  // 'static)`: The following Rust type is not supported yet: (dyn
  // core::error::Error + core::marker::Send + core::marker::Sync + 'static)

  //  Returns the corresponding [`ErrorKind`] for this error.
  //
  //  This may be a value set by Rust code constructing custom `io::Error`s,
  //  or if this `io::Error` was sourced from the operating system,
  //  it will be a value inferred from the system's error encoding.
  //  See [`last_os_error`][last_os_error] for more details.
  //
  //  [last_os_error]: ../../std/io/struct.Error.html#method.last_os_error
  //
  //  # Examples
  //
  //  ```
  //  use std::io::{Error, ErrorKind};
  //
  //  fn print_error(err: Error) {
  //      println!("{:?}", err.kind());
  //  }
  //
  //  fn main() {
  //      // As no error has (visibly) occurred, this may print anything!
  //      // It likely prints a placeholder for unidentified (non-)errors.
  //      print_error(Error::last_os_error());
  //      // Will print "AddrInUse".
  //      print_error(Error::new(ErrorKind::AddrInUse, "oh no!"));
  //  }
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/error.rs;l=472
  [[nodiscard]] ::rs::std::io::ErrorKind kind() const;

  //  Intended for use for errors not exposed to the user, where allocating onto
  //  the heap (for normal construction via Error::new) is too costly.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/error.rs;l=202
  explicit Error(::rs::std::io::ErrorKind value);

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/io/error.rs;l=229
  explicit Error(::rs::alloc::ffi::NulError value);

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/io/error.rs;l=237
  explicit Error(::rs::alloc::collections::TryReserveError value);

  // AbslStringify and std::ostream support via std::fmt::Display
  template <typename Sink, typename Str = rs::alloc::string::String>
  friend void AbslStringify(Sink& sink, const Error& self) {
    crubit::Slot<Str> s;
    __crubit_thunk_818b180788380d74__uRNvYNtNtNtCs9kG8YiNG2f0_u4core2io5error5ErrorNtNtCsaddbpR6HRqH_u5alloc6string8ToString9to_ustringCsb7ytMsthdgm_u3std(
        self, s.Get());
    AbslStringify(sink, ::std::move(s).AssumeInitAndTakeValue().as_str());
  }
  template <typename Str = rs::alloc::string::String>
  friend ::std::ostream& operator<<(::std::ostream& os, const Error& self) {
    crubit::Slot<Str> s;
    __crubit_thunk_818b180788380d74__uRNvYNtNtNtCs9kG8YiNG2f0_u4core2io5error5ErrorNtNtCsaddbpR6HRqH_u5alloc6string8ToString9to_ustringCsb7ytMsthdgm_u3std(
        self, s.Get());
    return os << ::std::string_view(
               ::std::move(s).AssumeInitAndTakeValue().as_str());
  }

 private:
  // Field type has been replaced with a blob of bytes: Not a public or a
  // supported reexported type (b/262052635).
  ::std::array<unsigned char, 8> repr;

 private:
  static void __crubit_field_offset_assertions();
};

//  A list specifying general categories of I/O error.
//
//  This list is intended to grow over time and it is not recommended to
//  exhaustively match against it.
//
//  It is used with the [`io::Error`][error] type.
//
//  [error]: Error
//
//  # Handling errors and matching on `ErrorKind`
//
//  In application code, use `match` for the `ErrorKind` values you are
//  expecting; use `_` to match "all other errors".
//
//  In comprehensive and thorough tests that want to verify that a test doesn't
//  return any known incorrect error kind, you may want to cut-and-paste the
//  current full list of errors from here into your test code, and then match
//  `_` as the correct case. This seems counterintuitive, but it will make your
//  tests more robust. In particular, if you want to verify that your code does
//  produce an unrecognized error kind, the robust solution is to check for all
//  the recognized error kinds and fail in those cases.
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/error.rs;l=756
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: io :: ErrorKind") alignas(1)
    [[clang::trivial_abi]] ErrorKind final {
 public:
  // `std::io::ErrorKind` doesn't implement the `Default` trait
  ErrorKind() = delete;

  //  An entity was not found, often a file.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/error.rs;l=759
  static constexpr ErrorKind MakeNotFound();

  //  The operation lacked the necessary privileges to complete.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/error.rs;l=762
  static constexpr ErrorKind MakePermissionDenied();

  //  The connection was refused by the remote server.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/error.rs;l=765
  static constexpr ErrorKind MakeConnectionRefused();

  //  The connection was reset by the remote server.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/error.rs;l=768
  static constexpr ErrorKind MakeConnectionReset();

  //  The remote host is not reachable.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/error.rs;l=771
  static constexpr ErrorKind MakeHostUnreachable();

  //  The network containing the remote host is not reachable.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/error.rs;l=774
  static constexpr ErrorKind MakeNetworkUnreachable();

  //  The connection was aborted (terminated) by the remote server.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/error.rs;l=777
  static constexpr ErrorKind MakeConnectionAborted();

  //  The network operation failed because it was not connected yet.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/error.rs;l=780
  static constexpr ErrorKind MakeNotConnected();

  //  A socket address could not be bound because the address is already in
  //  use elsewhere.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/error.rs;l=784
  static constexpr ErrorKind MakeAddrInUse();

  //  A nonexistent interface was requested or the requested address was not
  //  local.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/error.rs;l=788
  static constexpr ErrorKind MakeAddrNotAvailable();

  //  The system's networking is down.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/error.rs;l=791
  static constexpr ErrorKind MakeNetworkDown();

  //  The operation failed because a pipe was closed.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/error.rs;l=794
  static constexpr ErrorKind MakeBrokenPipe();

  //  An entity already exists, often a file.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/error.rs;l=797
  static constexpr ErrorKind MakeAlreadyExists();

  //  The operation needs to block to complete, but the blocking operation was
  //  requested to not occur.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/error.rs;l=801
  static constexpr ErrorKind MakeWouldBlock();

  //  A filesystem object is, unexpectedly, not a directory.
  //
  //  For example, a filesystem path was specified where one of the intermediate
  //  directory components was, in fact, a plain file.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/error.rs;l=807
  static constexpr ErrorKind MakeNotADirectory();

  //  The filesystem object is, unexpectedly, a directory.
  //
  //  A directory was specified when a non-directory was expected.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/error.rs;l=812
  static constexpr ErrorKind MakeIsADirectory();

  //  A non-empty directory was specified where an empty directory was expected.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/error.rs;l=815
  static constexpr ErrorKind MakeDirectoryNotEmpty();

  //  The filesystem or storage medium is read-only, but a write operation was
  //  attempted.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/error.rs;l=818
  static constexpr ErrorKind MakeReadOnlyFilesystem();

  //  Loop in the filesystem or IO subsystem; often, too many levels of symbolic
  //  links.
  //
  //  There was a loop (or excessively long chain) resolving a filesystem object
  //  or file IO object.
  //
  //  On Unix this is usually the result of a symbolic link loop; or, of
  //  exceeding the system-specific limit on the depth of symlink traversal.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/error.rs;l=827
  static constexpr ErrorKind MakeFilesystemLoop();

  //  Stale network file handle.
  //
  //  With some network filesystems, notably NFS, an open file (or directory)
  //  can be invalidated by problems with the network or server.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/error.rs;l=833
  static constexpr ErrorKind MakeStaleNetworkFileHandle();

  //  A parameter was incorrect.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/error.rs;l=836
  static constexpr ErrorKind MakeInvalidInput();

  //  Data not valid for the operation were encountered.
  //
  //  Unlike [`InvalidInput`], this typically means that the operation
  //  parameters were valid, however the error was caused by malformed
  //  input data.
  //
  //  For example, a function that reads a file into a string will error with
  //  `InvalidData` if the file's contents are not valid UTF-8.
  //
  //  [`InvalidInput`]: ErrorKind::InvalidInput
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/error.rs;l=848
  static constexpr ErrorKind MakeInvalidData();

  //  The I/O operation's timeout expired, causing it to be canceled.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/error.rs;l=851
  static constexpr ErrorKind MakeTimedOut();

  //  An error returned when an operation could not be completed because a
  //  call to [`write`][write] returned [`Ok(0)`].
  //
  //  This typically means that an operation could only succeed if it wrote a
  //  particular number of bytes but only a smaller number of bytes could be
  //  written.
  //
  //  [write]: crate::io::Write::write
  //  [`Ok(0)`]: Ok
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/error.rs;l=862
  static constexpr ErrorKind MakeWriteZero();

  //  The underlying storage (typically, a filesystem) is full.
  //
  //  This does not include out of quota errors.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/error.rs;l=867
  static constexpr ErrorKind MakeStorageFull();

  //  Seek on unseekable file.
  //
  //  Seeking was attempted on an open file handle which is not suitable for
  //  seeking - for example, on Unix, a named pipe opened with `File::open`.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/error.rs;l=873
  static constexpr ErrorKind MakeNotSeekable();

  //  Filesystem quota or some other kind of quota was exceeded.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/error.rs;l=876
  static constexpr ErrorKind MakeQuotaExceeded();

  //  File larger than allowed or supported.
  //
  //  This might arise from a hard limit of the underlying filesystem or file
  //  access API, or from an administratively imposed resource limitation.
  //  Simple disk full, and out of quota, have their own errors.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/error.rs;l=883
  static constexpr ErrorKind MakeFileTooLarge();

  //  Resource is busy.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/error.rs;l=886
  static constexpr ErrorKind MakeResourceBusy();

  //  Executable file is busy.
  //
  //  An attempt was made to write to a file which is also in use as a running
  //  program.  (Not all operating systems detect this situation.)
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/error.rs;l=892
  static constexpr ErrorKind MakeExecutableFileBusy();

  //  Deadlock (avoided).
  //
  //  A file locking operation would result in deadlock.  This situation is
  //  typically detected, if at all, on a best-effort basis.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/error.rs;l=898
  static constexpr ErrorKind MakeDeadlock();

  //  Cross-device or cross-filesystem (hard) link or rename.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/error.rs;l=901
  static constexpr ErrorKind MakeCrossesDevices();

  //  Too many (hard) links to the same filesystem object.
  //
  //  The filesystem does not support making so many hardlinks to the same file.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/error.rs;l=906
  static constexpr ErrorKind MakeTooManyLinks();

  //  A filename was invalid.
  //
  //  This error can also occur if a length limit for a name was exceeded.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/error.rs;l=911
  static constexpr ErrorKind MakeInvalidFilename();

  //  Program argument list too long.
  //
  //  When trying to run an external program, a system or process limit on the
  //  size of the arguments would have been exceeded.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/error.rs;l=917
  static constexpr ErrorKind MakeArgumentListTooLong();

  //  This operation was interrupted.
  //
  //  Interrupted operations can typically be retried.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/error.rs;l=922
  static constexpr ErrorKind MakeInterrupted();

  //  This operation is unsupported on this platform.
  //
  //  This means that the operation can never succeed.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/error.rs;l=928
  static constexpr ErrorKind MakeUnsupported();

  //  An error returned when an operation could not be completed because an
  //  "end of file" was reached prematurely.
  //
  //  This typically means that an operation could only succeed if it read a
  //  particular number of bytes but only a smaller number of bytes could be
  //  read.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/error.rs;l=940
  static constexpr ErrorKind MakeUnexpectedEof();

  //  An operation could not be completed, because it failed
  //  to allocate enough memory.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/error.rs;l=945
  static constexpr ErrorKind MakeOutOfMemory();

  //  The operation was partially successful and needs to be checked
  //  later on due to not blocking.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/error.rs;l=950
  static constexpr ErrorKind MakeInProgress();

  //  The process or the whole system has reached its limit on the number of
  //  open files or sockets.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/error.rs;l=955
  static constexpr ErrorKind MakeTooManyOpenFiles();

  //  A low-level input/output error.
  //
  //  This usually indicates a hardware or device-level failure, such as a bad
  //  disk sector or a removed device, but the operating system may also report
  //  it for other low-level I/O conditions.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/error.rs;l=963
  static constexpr ErrorKind MakeInputOutputError();

  //  A custom error that does not fall under any other I/O error kind.
  //
  //  This can be used to construct your own [`Error`][error]s that do not match
  //  any
  //  [`ErrorKind`].
  //
  //  This [`ErrorKind`] is not used by the standard library.
  //
  //  Errors from the standard library that do not fall under any of the I/O
  //  error kinds cannot be `match`ed on, and will only match a wildcard (`_`)
  //  pattern. New [`ErrorKind`]s might be added in the future for some of
  //  those.
  //
  //  [error]: Error
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/error.rs;l=982
  static constexpr ErrorKind MakeOther();

  //  Any I/O error from the standard library that's not part of this list.
  //
  //  Errors that are `Uncategorized` now may move to a different or a new
  //  [`ErrorKind`] variant in the future. It is not recommended to match
  //  an error against `Uncategorized`; use a wildcard match (`_`) instead.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/error.rs;l=991
  static constexpr ErrorKind MakeUncategorized();

  // No custom `Drop` impl and no custom "drop glue" required
  ~ErrorKind() = default;
  ErrorKind(ErrorKind&&) = default;
  ErrorKind& operator=(ErrorKind&&) = default;

  // Rust types that are `Copy` get trivial, `default` C++ copy constructor and
  // assignment operator.
  ErrorKind(const ErrorKind&) = default;
  ErrorKind& operator=(const ErrorKind&) = default;
  ErrorKind(::crubit::UnsafeRelocateTag, ErrorKind&& value);

  //  Intended for use for errors not exposed to the user, where allocating onto
  //  the heap (for normal construction via Error::new) is too costly.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/error.rs;l=202
  explicit operator ::rs::std::io::Error();

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/error.rs;l=751
  bool operator==(::rs::std::io::ErrorKind const& other) const;

  // AbslStringify and std::ostream support via std::fmt::Display
  template <typename Sink, typename Str = rs::alloc::string::String>
  friend void AbslStringify(Sink& sink, const ErrorKind& self) {
    crubit::Slot<Str> s;
    __crubit_thunk_818b180788380d74__uRNvYNtNtNtCs9kG8YiNG2f0_u4core2io5error9ErrorKindNtNtCsaddbpR6HRqH_u5alloc6string8ToString9to_ustringCsb7ytMsthdgm_u3std(
        self, s.Get());
    AbslStringify(sink, ::std::move(s).AssumeInitAndTakeValue().as_str());
  }
  template <typename Str = rs::alloc::string::String>
  friend ::std::ostream& operator<<(::std::ostream& os, const ErrorKind& self) {
    crubit::Slot<Str> s;
    __crubit_thunk_818b180788380d74__uRNvYNtNtNtCs9kG8YiNG2f0_u4core2io5error9ErrorKindNtNtCsaddbpR6HRqH_u5alloc6string8ToString9to_ustringCsb7ytMsthdgm_u3std(
        self, s.Get());
    return os << ::std::string_view(
               ::std::move(s).AssumeInitAndTakeValue().as_str());
  }

  ::std::strong_ordering operator<=>(const ErrorKind& other) const;

 private:
  // Field type has been replaced with a blob of bytes: No support for bindings
  // of individual non-repr(C) `enum`s
  ::std::array<unsigned char, 1> __opaque_blob_of_bytes;

 private:
  struct PrivateBytesTag {};
  constexpr ErrorKind(PrivateBytesTag, ::std::array<unsigned char, 1> bytes)
      : __opaque_blob_of_bytes(bytes) {}

 private:
  static void __crubit_field_offset_assertions();
};

}  // namespace rs::std::io

namespace rs::std::io {

//  A buffer type used with `Write::write_vectored`.
//
//  It is semantically a wrapper around a `&[u8]`, but is guaranteed to be
//  ABI compatible with the `iovec` type on Unix platforms and `WSABUF` on
//  Windows.
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/io_slice.rs;l=189
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: io :: IoSlice") alignas(8)
    [[clang::trivial_abi]] IoSlice final {
 public:
  // `std::io::IoSlice` doesn't implement the `Default` trait
  IoSlice() = delete;

  // No custom `Drop` impl and no custom "drop glue" required
  ~IoSlice() = default;
  IoSlice(IoSlice&&) = default;
  IoSlice& operator=(IoSlice&&) = default;

  // Rust types that are `Copy` get trivial, `default` C++ copy constructor and
  // assignment operator.
  IoSlice(const IoSlice&) = default;
  IoSlice& operator=(const IoSlice&) = default;
  IoSlice(::crubit::UnsafeRelocateTag, IoSlice&& value);

  //  Creates a new `IoSlice` wrapping a byte slice.
  //
  //  # Panics
  //
  //  Panics on Windows if the slice is larger than 4GB.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/io_slice.rs;l=213
  [[nodiscard]] static ::rs::std::io::IoSlice new_(
      rs_std::SliceRef<const ::std::uint8_t> buf);

  //  Advance the internal cursor of the slice.
  //
  //  Also see [`IoSlice::advance_slices`] to advance the cursors of multiple
  //  buffers.
  //
  //  # Panics
  //
  //  Panics when trying to advance beyond the end of the slice.
  //
  //  # Examples
  //
  //  ```
  //  use std::io::IoSlice;
  //  use std::ops::Deref;
  //
  //  let data = [1; 8];
  //  let mut buf = IoSlice::new(&data);
  //
  //  // Mark 3 bytes as read.
  //  buf.advance(3);
  //  assert_eq!(buf.deref(), [1; 5].as_ref());
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/io_slice.rs;l=241
  void advance(::std::uintptr_t n);

  //  Advance a slice of slices.
  //
  //  Shrinks the slice to remove any `IoSlice`s that are fully advanced over.
  //  If the cursor ends up in the middle of an `IoSlice`, it is modified
  //  to start at that cursor.
  //
  //  For example, if we have a slice of two 8-byte `IoSlice`s, and we advance
  //  by 10 bytes, the result will only include the second `IoSlice`, advanced
  //  by 2 bytes.
  //
  //  # Panics
  //
  //  Panics when trying to advance beyond the end of the slices.
  //
  //  # Examples
  //
  //  ```
  //  use std::io::IoSlice;
  //  use std::ops::Deref;
  //
  //  let buf1 = [1; 8];
  //  let buf2 = [2; 16];
  //  let buf3 = [3; 8];
  //  let mut bufs = &mut [
  //      IoSlice::new(&buf1),
  //      IoSlice::new(&buf2),
  //      IoSlice::new(&buf3),
  //  ][..];
  //
  //  // Mark 10 bytes as written.
  //  IoSlice::advance_slices(&mut bufs, 10);
  //  assert_eq!(bufs[0].deref(), [2; 14].as_ref());
  //  assert_eq!(bufs[1].deref(), [3; 8].as_ref());
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/io_slice.rs;l=279
  static void advance_slices(rs_std::SliceRef<::rs::std::io::IoSlice>& bufs,
                             ::std::uintptr_t n);

 private:
  // Field type has been replaced with a blob of bytes: Not a public or a
  // supported reexported type (b/262052635).
  ::std::array<unsigned char, 16> __field0;

 private:
  static void __crubit_field_offset_assertions();
};

//  A buffer type used with `Read::read_vectored`.
//
//  It is semantically a wrapper around a `&mut [u8]`, but is guaranteed to be
//  ABI compatible with the `iovec` type on Unix platforms and `WSABUF` on
//  Windows.
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/io_slice.rs;l=31
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: io :: IoSliceMut") alignas(8)
    [[clang::trivial_abi]] IoSliceMut final {
 public:
  // `std::io::IoSliceMut` doesn't implement the `Default` trait
  IoSliceMut() = delete;

  // No custom `Drop` impl and no custom "drop glue" required
  ~IoSliceMut() = default;
  IoSliceMut(IoSliceMut&&) = default;
  IoSliceMut& operator=(IoSliceMut&&) = default;

  // `std::io::IoSliceMut` doesn't implement the `Clone` trait
  IoSliceMut(const IoSliceMut&) = delete;
  IoSliceMut& operator=(const IoSliceMut&) = delete;
  IoSliceMut(::crubit::UnsafeRelocateTag, IoSliceMut&& value);

  //  Creates a new `IoSliceMut` wrapping a byte slice.
  //
  //  # Panics
  //
  //  Panics on Windows if the slice is larger than 4GB.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/io_slice.rs;l=54
  static ::rs::std::io::IoSliceMut new_(rs_std::SliceRef<::std::uint8_t> buf);

  //  Advance the internal cursor of the slice.
  //
  //  Also see [`IoSliceMut::advance_slices`] to advance the cursors of
  //  multiple buffers.
  //
  //  # Panics
  //
  //  Panics when trying to advance beyond the end of the slice.
  //
  //  # Examples
  //
  //  ```
  //  use std::io::IoSliceMut;
  //  use std::ops::Deref;
  //
  //  let mut data = [1; 8];
  //  let mut buf = IoSliceMut::new(&mut data);
  //
  //  // Mark 3 bytes as read.
  //  buf.advance(3);
  //  assert_eq!(buf.deref(), [1; 5].as_ref());
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/io_slice.rs;l=82
  void advance(::std::uintptr_t n);

  //  Advance a slice of slices.
  //
  //  Shrinks the slice to remove any `IoSliceMut`s that are fully advanced
  //  over. If the cursor ends up in the middle of an `IoSliceMut`, it is
  //  modified to start at that cursor.
  //
  //  For example, if we have a slice of two 8-byte `IoSliceMut`s, and we
  //  advance by 10 bytes, the result will only include the second `IoSliceMut`,
  //  advanced by 2 bytes.
  //
  //  # Panics
  //
  //  Panics when trying to advance beyond the end of the slices.
  //
  //  # Examples
  //
  //  ```
  //  use std::io::IoSliceMut;
  //  use std::ops::Deref;
  //
  //  let mut buf1 = [1; 8];
  //  let mut buf2 = [2; 16];
  //  let mut buf3 = [3; 8];
  //  let mut bufs = &mut [
  //      IoSliceMut::new(&mut buf1),
  //      IoSliceMut::new(&mut buf2),
  //      IoSliceMut::new(&mut buf3),
  //  ][..];
  //
  //  // Mark 10 bytes as read.
  //  IoSliceMut::advance_slices(&mut bufs, 10);
  //  assert_eq!(bufs[0].deref(), [2; 14].as_ref());
  //  assert_eq!(bufs[1].deref(), [3; 8].as_ref());
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/io_slice.rs;l=121
  static void advance_slices(rs_std::SliceRef<::rs::std::io::IoSliceMut>& bufs,
                             ::std::uintptr_t n);

 private:
  // Field type has been replaced with a blob of bytes: Not a public or a
  // supported reexported type (b/262052635).
  ::std::array<unsigned char, 16> __field0;

 private:
  static void __crubit_field_offset_assertions();
};

}  // namespace rs::std::io

namespace rs::std::io {

//  A reader which yields one byte over and over and over and over and over
//  and...
//
//  This struct is generally created by calling [`repeat()`]. Please
//  see the documentation of [`repeat()`] for more details.
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/util.rs;l=166
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: io :: Repeat") alignas(1)
    [[clang::trivial_abi]] Repeat final {
 public:
  // `std::io::Repeat` doesn't implement the `Default` trait
  Repeat() = delete;

  // No custom `Drop` impl and no custom "drop glue" required
  ~Repeat() = default;
  Repeat(Repeat&&) = default;
  Repeat& operator=(Repeat&&) = default;

  // `std::io::Repeat` doesn't implement the `Clone` trait
  Repeat(const Repeat&) = delete;
  Repeat& operator=(const Repeat&) = delete;
  Repeat(::crubit::UnsafeRelocateTag, Repeat&& value);

 private:
  union {
    // Generated from:
    // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/util.rs;l=169
    ::std::uint8_t byte;
  };

 private:
  static void __crubit_field_offset_assertions();
};

}  // namespace rs::std::io

namespace rs::std::io {

// Error generating bindings for type alias `core::io::Result` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/error.rs;l=71:
// crubit.rs/errors/unsupported_type: Generic type parameter `T` is not
// supported without monomorphization

}

namespace rs::std::io {

//  The `Seek` trait provides a cursor which can be moved within a stream of
//  bytes.
//
//  The stream typically has a fixed size, allowing seeking relative to either
//  end or the current offset.
//
//  # Examples
//
//  `File`s implement `Seek`:
//
//  ```no_run
//  use std::io;
//  use std::io::prelude::*;
//  use std::fs::File;
//  use std::io::SeekFrom;
//
//  fn main() -> io::Result<()> {
//      let mut f = File::open("foo.txt")?;
//
//      // move the cursor 42 bytes from the start of the file
//      f.seek(SeekFrom::Start(42))?;
//      Ok(())
//  }
//  ```
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/seek.rs;l=29
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: io :: Seek") Seek {
  template <typename T>
  using impl = rs_std::impl<T, Seek>;
};

//  Enumeration of possible methods to seek within an I/O object.
//
//  It is used by the [`Seek`] trait.
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/seek.rs;l=201
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: io :: SeekFrom") alignas(8)
    [[clang::trivial_abi]] SeekFrom final {
 public:
  // `std::io::SeekFrom` doesn't implement the `Default` trait
  SeekFrom() = delete;

  //  Sets the offset to the provided number of bytes.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/seek.rs;l=204
  static ::rs::std::io::SeekFrom MakeStart(::std::uint64_t __param_0);

  //  Sets the offset to the size of this object plus the specified number of
  //  bytes.
  //
  //  It is possible to seek beyond the end of an object, but it's an error to
  //  seek before byte 0.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/seek.rs;l=212
  static ::rs::std::io::SeekFrom MakeEnd(::std::int64_t __param_0);

  //  Sets the offset to the current position plus the specified number of
  //  bytes.
  //
  //  It is possible to seek beyond the end of an object, but it's an error to
  //  seek before byte 0.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/seek.rs;l=220
  static ::rs::std::io::SeekFrom MakeCurrent(::std::int64_t __param_0);

  // No custom `Drop` impl and no custom "drop glue" required
  ~SeekFrom() = default;
  SeekFrom(SeekFrom&&) = default;
  SeekFrom& operator=(SeekFrom&&) = default;

  // Rust types that are `Copy` get trivial, `default` C++ copy constructor and
  // assignment operator.
  SeekFrom(const SeekFrom&) = default;
  SeekFrom& operator=(const SeekFrom&) = default;
  SeekFrom(::crubit::UnsafeRelocateTag, SeekFrom&& value);

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/seek.rs;l=198
  bool operator==(::rs::std::io::SeekFrom const& other) const;

 private:
  // Field type has been replaced with a blob of bytes: No support for bindings
  // of individual non-repr(C) `enum`s
  ::std::array<unsigned char, 16> __opaque_blob_of_bytes;

 private:
  struct PrivateBytesTag {};
  constexpr SeekFrom(PrivateBytesTag, ::std::array<unsigned char, 16> bytes)
      : __opaque_blob_of_bytes(bytes) {}

 private:
  static void __crubit_field_offset_assertions();
};

}  // namespace rs::std::io

namespace rs::std::io {

// Error generating bindings for struct `core::io::Sink` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/util.rs;l=221:
// Zero-sized types (ZSTs) are not supported (b/258259459)

// Error generating bindings for struct `core::io::Take` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/util.rs;l=459:
// crubit.rs/errors/unsupported_type: Generic types are not supported yet
// (b/259749095)

}  // namespace rs::std::io

namespace rs::std::io {

//  A trait for objects which are byte-oriented sinks.
//
//  Implementors of the `Write` trait are sometimes called 'writers'.
//
//  Writers are defined by two required methods, [`write`] and [`flush`]:
//
//  * The [`write`] method will attempt to write some data into the object,
//    returning how many bytes were successfully written.
//
//  * The [`flush`] method is useful for adapters and explicit buffers
//    themselves for ensuring that all buffered data has been pushed out to the
//    'true sink'.
//
//  Writers are intended to be composable with one another. Many implementors
//  throughout [`std::io`] take and provide types which implement the `Write`
//  trait.
//
//  [`write`]: Write::write
//  [`flush`]: Write::flush
//  [`std::io`]: crate::io
//
//  # Examples
//
//  ```no_run
//  use std::io::prelude::*;
//  use std::fs::File;
//
//  fn main() -> std::io::Result<()> {
//      let data = b"some bytes";
//
//      let mut pos = 0;
//      let mut buffer = File::create("foo.txt")?;
//
//      while pos < data.len() {
//          let bytes_written = buffer.write(&data[pos..])?;
//          pos += bytes_written;
//      }
//      Ok(())
//  }
//  ```
//
//  The trait also provides convenience methods like [`write_all`], which calls
//  `write` in a loop until its entire input has been written.
//
//  [`write_all`]: Write::write_all
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/write.rs;l=52
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: io :: Write") Write {
  template <typename T>
  using impl = rs_std::impl<T, Write>;
};

}  // namespace rs::std::io

namespace rs::std::io {

// Error generating bindings for function `core::io::empty` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/util.rs;l=156:
// Error formatting function return type `core::io::Empty`: Failed to format
// type for the definition of `core::io::Empty`: Zero-sized types (ZSTs) are not
// supported (b/258259459)

//  Creates an instance of a reader that infinitely repeats one byte.
//
//  All reads from this reader will succeed by filling the specified buffer with
//  the given byte.
//
//  # Examples
//
//  ```
//  use std::io::{self, Read};
//
//  let mut buffer = [0; 3];
//  io::repeat(0b101).read_exact(&mut buffer).unwrap();
//  assert_eq!(buffer, [0b101, 0b101, 0b101]);
//  ```
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/util.rs;l=203
[[nodiscard]] ::rs::std::io::Repeat repeat(::std::uint8_t byte);

// Error generating bindings for function `core::io::sink` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/io/util.rs;l=321:
// Error formatting function return type `core::io::Sink`: Failed to format type
// for the definition of `core::io::Sink`: Zero-sized types (ZSTs) are not
// supported (b/258259459)

}  // namespace rs::std::io

namespace rs::std::env {

//  An iterator over the arguments of a process, yielding an [`OsString`] value
//  for each argument.
//
//  This struct is created by [`env::args_os()`]. See its documentation
//  for more.
//
//  The first element is traditionally the path of the executable, but it can be
//  set to arbitrary text, and might not even exist. This means this property
//  should not be relied upon for security purposes.
//
//  [`env::args_os()`]: args_os
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/env.rs;l=791
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: env :: ArgsOs") alignas(8)
    [[clang::trivial_abi]] [[nodiscard(
        "iterators are lazy and do nothing unless consumed")]] ArgsOs final {
 public:
  // `std::env::ArgsOs` doesn't implement the `Default` trait
  ArgsOs() = delete;

  // Drop::drop
  ~ArgsOs();

  // C++ move operations are unavailable for this type. See
  // http://crubit.rs/rust/movable_types for an explanation of Rust types that
  // are C++ movable.
  ArgsOs(ArgsOs&&) = delete;
  ::rs::std::env::ArgsOs& operator=(ArgsOs&&) = delete;
  // `std::env::ArgsOs` doesn't implement the `Clone` trait
  ArgsOs(const ArgsOs&) = delete;
  ArgsOs& operator=(const ArgsOs&) = delete;
  ArgsOs(::crubit::UnsafeRelocateTag, ArgsOs&& value);
  template <typename TAdaptedSelf_ = ArgsOs>
  inline rs::IteratorAdapter<TAdaptedSelf_*> begin() & {
    return rs::IteratorAdapter<TAdaptedSelf_*>(this);
  }
  inline rs::IteratorEnd end() & { return rs::IteratorEnd(); }

 private:
  // Field type has been replaced with a blob of bytes: Not a public or a
  // supported reexported type (b/262052635).
  ::std::array<unsigned char, 32> inner;

 private:
  static void __crubit_field_offset_assertions();
};

//  An iterator over the arguments of a process, yielding a [`String`] value for
//  each argument.
//
//  This struct is created by [`env::args()`]. See its documentation
//  for more.
//
//  The first element is traditionally the path of the executable, but it can be
//  set to arbitrary text, and might not even exist. This means this property
//  should not be relied upon for security purposes.
//
//  [`env::args()`]: args
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/env.rs;l=774
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: env :: Args") alignas(8)
    [[clang::trivial_abi]] [[nodiscard(
        "iterators are lazy and do nothing unless consumed")]] Args final {
 public:
  // `std::env::Args` doesn't implement the `Default` trait
  Args() = delete;

  // Drop::drop
  ~Args();

  // C++ move operations are unavailable for this type. See
  // http://crubit.rs/rust/movable_types for an explanation of Rust types that
  // are C++ movable.
  Args(Args&&) = delete;
  ::rs::std::env::Args& operator=(Args&&) = delete;
  // `std::env::Args` doesn't implement the `Clone` trait
  Args(const Args&) = delete;
  Args& operator=(const Args&) = delete;
  Args(::crubit::UnsafeRelocateTag, Args&& value);
  template <typename TAdaptedSelf_ = Args>
  inline rs::IteratorAdapter<TAdaptedSelf_*> begin() & {
    return rs::IteratorAdapter<TAdaptedSelf_*>(this);
  }
  inline rs::IteratorEnd end() & { return rs::IteratorEnd(); }

 private:
  union {
    // Generated from:
    // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/env.rs;l=775
    ::rs::std::env::ArgsOs inner;
  };

 private:
  static void __crubit_field_offset_assertions();
};

// Error generating bindings for struct `env::JoinPathsError` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/env.rs;l=511:
// Zero-sized types (ZSTs) are not supported (b/258259459)

//  An iterator that splits an environment variable into paths according to
//  platform-specific conventions.
//
//  The iterator element type is [`PathBuf`].
//
//  This structure is created by [`env::split_paths()`]. See its
//  documentation for more.
//
//  [`env::split_paths()`]: split_paths
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/env.rs;l=447
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: env :: SplitPaths") alignas(8)
    [[clang::trivial_abi]] [[nodiscard(
        "iterators are lazy and do nothing unless consumed")]]
    SplitPaths final {
 public:
  // `std::env::SplitPaths` doesn't implement the `Default` trait
  SplitPaths() = delete;

  // No custom `Drop` impl and no custom "drop glue" required
  ~SplitPaths() = default;
  SplitPaths(SplitPaths&&) = default;
  SplitPaths& operator=(SplitPaths&&) = default;

  // `std::env::SplitPaths` doesn't implement the `Clone` trait
  SplitPaths(const SplitPaths&) = delete;
  SplitPaths& operator=(const SplitPaths&) = delete;
  SplitPaths(::crubit::UnsafeRelocateTag, SplitPaths&& value);
  template <typename TAdaptedSelf_ = SplitPaths>
  inline rs::IteratorAdapter<TAdaptedSelf_*> begin() & {
    return rs::IteratorAdapter<TAdaptedSelf_*>(this);
  }
  inline rs::IteratorEnd end() & { return rs::IteratorEnd(); }

 private:
  // Field type has been replaced with a blob of bytes: Generic types are not
  // supported yet (b/259749095)
  ::std::array<unsigned char, 24> inner;

 private:
  static void __crubit_field_offset_assertions();
};

//  The error type for operations interacting with environment variables.
//  Possibly returned from [`env::var()`].
//
//  [`env::var()`]: var
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/env.rs;l=274
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: env :: VarError") alignas(8)
    [[clang::trivial_abi]] VarError final {
 public:
  // `std::env::VarError` doesn't implement the `Default` trait
  VarError() = delete;

  //  The specified environment variable was not present in the current
  //  process's environment.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/env.rs;l=278
  static VarError MakeNotPresent();

  //  The specified environment variable was found, but it did not contain
  //  valid unicode data. The found data is returned as a payload of this
  //  variant.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/env.rs;l=284
  static ::rs::std::env::VarError MakeNotUnicode(
      ::rs::std::ffi::OsString __param_0);

  // Drop::drop
  ~VarError();

  // Clone::clone
  VarError(const VarError&);

  // Clone::clone_from
  ::rs::std::env::VarError& operator=(const VarError&);

  VarError(::crubit::UnsafeRelocateTag, VarError&& value);

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/env.rs;l=272
  bool operator==(::rs::std::env::VarError const& other) const;

  // AbslStringify and std::ostream support via std::fmt::Display
  template <typename Sink, typename Str = rs::alloc::string::String>
  friend void AbslStringify(Sink& sink, const VarError& self) {
    crubit::Slot<Str> s;
    __crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std3env8VarErrorNtNtCsaddbpR6HRqH_u5alloc6string8ToString9to_ustringB6_u(
        self, s.Get());
    AbslStringify(sink, ::std::move(s).AssumeInitAndTakeValue().as_str());
  }
  template <typename Str = rs::alloc::string::String>
  friend ::std::ostream& operator<<(::std::ostream& os, const VarError& self) {
    crubit::Slot<Str> s;
    __crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std3env8VarErrorNtNtCsaddbpR6HRqH_u5alloc6string8ToString9to_ustringB6_u(
        self, s.Get());
    return os << ::std::string_view(
               ::std::move(s).AssumeInitAndTakeValue().as_str());
  }

 private:
  // Field type has been replaced with a blob of bytes: No support for bindings
  // of individual non-repr(C) `enum`s
  ::std::array<unsigned char, 24> __opaque_blob_of_bytes;

 private:
  struct PrivateBytesTag {};
  constexpr VarError(PrivateBytesTag, ::std::array<unsigned char, 24> bytes)
      : __opaque_blob_of_bytes(bytes) {}

 private:
  static void __crubit_field_offset_assertions();
};

//  An iterator over a snapshot of the environment variables of this process.
//
//  This structure is created by [`env::vars_os()`]. See its documentation for
//  more.
//
//  [`env::vars_os()`]: vars_os
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/env.rs;l=100
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: env :: VarsOs") alignas(8)
    [[clang::trivial_abi]] VarsOs final {
 public:
  // `std::env::VarsOs` doesn't implement the `Default` trait
  VarsOs() = delete;

  // Drop::drop
  ~VarsOs();

  // C++ move operations are unavailable for this type. See
  // http://crubit.rs/rust/movable_types for an explanation of Rust types that
  // are C++ movable.
  VarsOs(VarsOs&&) = delete;
  ::rs::std::env::VarsOs& operator=(VarsOs&&) = delete;
  // `std::env::VarsOs` doesn't implement the `Clone` trait
  VarsOs(const VarsOs&) = delete;
  VarsOs& operator=(const VarsOs&) = delete;
  VarsOs(::crubit::UnsafeRelocateTag, VarsOs&& value);
  template <typename TAdaptedSelf_ = VarsOs>
  inline rs::IteratorAdapter<TAdaptedSelf_*> begin() & {
    return rs::IteratorAdapter<TAdaptedSelf_*>(this);
  }
  inline rs::IteratorEnd end() & { return rs::IteratorEnd(); }

 private:
  // Field type has been replaced with a blob of bytes: Not a public or a
  // supported reexported type (b/262052635).
  ::std::array<unsigned char, 32> inner;

 private:
  static void __crubit_field_offset_assertions();
};

//  An iterator over a snapshot of the environment variables of this process.
//
//  This structure is created by [`env::vars()`]. See its documentation for
//  more.
//
//  [`env::vars()`]: vars
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/env.rs;l=90
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: env :: Vars") alignas(8)
    [[clang::trivial_abi]] Vars final {
 public:
  // `std::env::Vars` doesn't implement the `Default` trait
  Vars() = delete;

  // Drop::drop
  ~Vars();

  // C++ move operations are unavailable for this type. See
  // http://crubit.rs/rust/movable_types for an explanation of Rust types that
  // are C++ movable.
  Vars(Vars&&) = delete;
  ::rs::std::env::Vars& operator=(Vars&&) = delete;
  // `std::env::Vars` doesn't implement the `Clone` trait
  Vars(const Vars&) = delete;
  Vars& operator=(const Vars&) = delete;
  Vars(::crubit::UnsafeRelocateTag, Vars&& value);
  template <typename TAdaptedSelf_ = Vars>
  inline rs::IteratorAdapter<TAdaptedSelf_*> begin() & {
    return rs::IteratorAdapter<TAdaptedSelf_*>(this);
  }
  inline rs::IteratorEnd end() & { return rs::IteratorEnd(); }

 private:
  union {
    // Generated from:
    // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/env.rs;l=91
    ::rs::std::env::VarsOs inner;
  };

 private:
  static void __crubit_field_offset_assertions();
};

//  Returns the arguments that this program was started with (normally passed
//  via the command line).
//
//  The first element is traditionally the path of the executable, but it can be
//  set to arbitrary text, and might not even exist. This means this property
//  should not be relied upon for security purposes.
//
//  On Unix systems the shell usually expands unquoted arguments with glob
//  patterns (such as `*` and `?`). On Windows this is not done, and such
//  arguments are passed as-is.
//
//  On glibc Linux systems, arguments are retrieved by placing a function in
//  `.init_array`. glibc passes `argc`, `argv`, and `envp` to functions in
//  `.init_array`, as a non-standard extension. This allows `std::env::args` to
//  work even in a `cdylib` or `staticlib`, as it does on macOS and Windows.
//
//  # Panics
//
//  The returned iterator will panic during iteration if any argument to the
//  process is not valid Unicode. If this is not desired,
//  use the [`args_os`] function instead.
//
//  # Examples
//
//  ```
//  use std::env;
//
//  // Prints each argument on a separate line
//  for argument in env::args() {
//      println!("{argument}");
//  }
//  ```
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/env.rs;l=828
::rs::std::env::Args args();

//  Returns the arguments that this program was started with (normally passed
//  via the command line).
//
//  The first element is traditionally the path of the executable, but it can be
//  set to arbitrary text, and might not even exist. This means this property
//  should not be relied upon for security purposes.
//
//  On Unix systems the shell usually expands unquoted arguments with glob
//  patterns (such as `*` and `?`). On Windows this is not done, and such
//  arguments are passed as-is.
//
//  On glibc Linux systems, arguments are retrieved by placing a function in
//  `.init_array`. glibc passes `argc`, `argv`, and `envp` to functions in
//  `.init_array`, as a non-standard extension. This allows `std::env::args_os`
//  to work even in a `cdylib` or `staticlib`, as it does on macOS and Windows.
//
//  Note that the returned iterator will not check if the arguments to the
//  process are valid Unicode. If you want to panic on invalid UTF-8,
//  use the [`args`] function instead.
//
//  # Examples
//
//  ```
//  use std::env;
//
//  // Prints each argument on a separate line
//  for argument in env::args_os() {
//      println!("{argument:?}");
//  }
//  ```
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/env.rs;l=863
::rs::std::env::ArgsOs args_os();

}  // namespace rs::std::env

namespace rs::std::env::consts {
static constexpr rs_std::StrRef ARCH = rs_std::StrRef("aarch64");
static constexpr rs_std::StrRef DLL_EXTENSION = rs_std::StrRef("so");
static constexpr rs_std::StrRef DLL_PREFIX = rs_std::StrRef("lib");
static constexpr rs_std::StrRef DLL_SUFFIX = rs_std::StrRef(".so");
static constexpr rs_std::StrRef EXE_EXTENSION = rs_std::StrRef("");
static constexpr rs_std::StrRef EXE_SUFFIX = rs_std::StrRef("");
static constexpr rs_std::StrRef FAMILY = rs_std::StrRef("unix");
static constexpr rs_std::StrRef OS = rs_std::StrRef("android");
}  // namespace rs::std::env::consts

namespace rs::std::env {

//  Returns the current working directory as a [`PathBuf`].
//
//  # Platform-specific behavior
//
//  This function [currently] corresponds to the `getcwd` function on Unix
//  and the `GetCurrentDirectoryW` function on Windows.
//
//  [currently]: crate::io#platform-specific-behavior
//
//  # Errors
//
//  Returns an [`Err`] if the current working directory value is invalid.
//  Possible cases:
//
//  * Current directory does not exist.
//  * There are insufficient permissions to access the current directory.
//
//  # Examples
//
//  ```
//  use std::env;
//
//  fn main() -> std::io::Result<()> {
//      let path = env::current_dir()?;
//      println!("The current directory is {}", path.display());
//      Ok(())
//  }
//  ```
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/env.rs;l=53
rs_std::Result<::rs::std::path::PathBuf, ::rs::std::io::Error> current_dir();

//  Returns the full filesystem path of the current running executable.
//
//  # Platform-specific behavior
//
//  If the executable was invoked through a symbolic link, some platforms will
//  return the path of the symbolic link and other platforms will return the
//  path of the symbolic link’s target.
//
//  If the executable is renamed while it is running, platforms may return the
//  path at the time it was loaded instead of the new path.
//
//  # Errors
//
//  Acquiring the path of the current executable is a platform-specific
//  operation that can fail for a good number of reasons. Some errors can
//  include, but not be limited to, filesystem operations failing or general
//  syscall failures.
//
//  # Security
//
//  The output of this function must be treated with care to avoid security
//  vulnerabilities, particularly in processes that run with privileges higher
//  than the user, such as setuid or setgid programs.
//
//  For example, on some Unix platforms, the result is calculated by
//  searching `$PATH` for an executable matching `argv[0]`, but both the
//  environment and arguments can be be set arbitrarily by the user who
//  invokes the program.
//
//  On Linux, if `fs.secure_hardlinks` is not set, an attacker who can
//  create hardlinks to the executable may be able to cause this function
//  to return an attacker-controlled path, which they later replace with
//  a different program.
//
//  This list of illustrative example attacks is not exhaustive.
//
//  # Examples
//
//  ```
//  use std::env;
//
//  match env::current_exe() {
//      Ok(exe_path) => println!("Path of this executable is: {}",
//                               exe_path.display()),
//      Err(e) => println!("failed to get current exe path: {e}"),
//  };
//  ```
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/env.rs;l=757
rs_std::Result<::rs::std::path::PathBuf, ::rs::std::io::Error> current_exe();

//  Returns the path of the current user's home directory if known.
//
//  This may return `None` if getting the directory fails or if the platform
//  does not have user home directories.
//
//  For storing user data and configuration it is often preferable to use more
//  specific directories. For example, [XDG Base Directories] on Unix or the
//  `LOCALAPPDATA` and `APPDATA` environment variables on Windows.
//
//  [XDG Base Directories]:
//  https://specifications.freedesktop.org/basedir-spec/latest/
//
//  # Unix
//
//  - Returns the value of the 'HOME' environment variable if it is set
//    (and not an empty string).
//  - Otherwise, it tries to determine the home directory by invoking the
//  `getpwuid_r` function
//    using the UID of the current user. An empty home directory field returned
//    from the `getpwuid_r` function is considered to be a valid value.
//  - Returns `None` if the current user has no entry in the /etc/passwd file.
//
//  # Windows
//
//  - Returns the value of the 'USERPROFILE' environment variable if it is set,
//  and is not an empty string.
//  - Otherwise, [`GetUserProfileDirectory`][msdn] is used to return the path.
//  This may change in the future.
//
//  [msdn]:
//  https://docs.microsoft.com/en-us/windows/win32/api/userenv/nf-userenv-getuserprofiledirectorya
//
//  In UWP (Universal Windows Platform) targets this function is unimplemented
//  and always returns `None`.
//
//  Before Rust 1.85.0, this function used to return the value of the 'HOME'
//  environment variable on Windows, which in Cygwin or Mingw environments could
//  return non-standard paths like `/home/you` instead of `C:\\Users\\you`.
//
//  # Examples
//
//  ```
//  use std::env;
//
//  match env::home_dir() {
//      Some(path) => println!("Your home directory, probably: {}",
//      path.display()), None => println!("Impossible to get your home dir!"),
//  }
//  ```
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/env.rs;l=646
[[nodiscard]] ::std::optional<::rs::std::path::PathBuf> home_dir();

// Error generating bindings for function `env::join_paths` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/env.rs;l=578:
// No valid non-generic replacement for generic type param `I`

// Error generating bindings for function `env::remove_var` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/env.rs;l=430:
// Error handling parameter #0 of type `&ffi::os_str::OsStr`: Failed to format
// the referent of the reference type `&ffi::os_str::OsStr`: Failed to format
// type for the definition of `ffi::os_str::OsStr`: Bindings for dynamically
// sized types are not supported.

// Error generating bindings for function `env::set_current_dir` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/env.rs;l=80:
// Error formatting function return type `core::result::Result<(),
// core::io::Error>`: Generic types are not supported yet (b/259749095)

// Error generating bindings for function `env::set_var` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/env.rs;l=359:
// Error handling parameter #0 of type `&ffi::os_str::OsStr`: Failed to format
// the referent of the reference type `&ffi::os_str::OsStr`: Failed to format
// type for the definition of `ffi::os_str::OsStr`: Bindings for dynamically
// sized types are not supported.

// Error generating bindings for function `env::split_paths` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/env.rs;l=483:
// Error handling parameter #0 of type `&'__anon1 &ffi::os_str::OsStr`: Failed
// to format the referent of the reference type `&'__anon1 &ffi::os_str::OsStr`:
// Failed to format the referent of the reference type `&ffi::os_str::OsStr`:
// Failed to format type for the definition of `ffi::os_str::OsStr`: Bindings
// for dynamically sized types are not supported.

//  Returns the path of a temporary directory.
//
//  The temporary directory may be shared among users, or between processes
//  with different privileges; thus, the creation of any files or directories
//  in the temporary directory must use a secure method to create a uniquely
//  named file. Creating a file or directory with a fixed or predictable name
//  may result in "insecure temporary file" security vulnerabilities. Consider
//  using a crate that securely creates temporary files or directories.
//
//  Note that the returned value may be a symbolic link, not a directory.
//
//  # Platform-specific behavior
//
//  On Unix, returns the value of the `TMPDIR` environment variable if it is
//  set, otherwise the value is OS-specific:
//  - On Android, there is no global temporary folder (it is usually allocated
//    per-app), it will return the application's cache dir if the program runs
//    in application's namespace and system version is Android 13 (or above), or
//    `/data/local/tmp` otherwise.
//  - On Darwin-based OSes (macOS, iOS, etc) it returns the directory provided
//    by `confstr(_CS_DARWIN_USER_TEMP_DIR, ...)`, as recommended by [Apple's
//    security guidelines][appledoc].
//  - On all other unix-based OSes, it returns `/tmp`.
//
//  On Windows, the behavior is equivalent to that of
//  [`GetTempPath2`][GetTempPath2] /
//  [`GetTempPath`][GetTempPath], which this function uses internally.
//  Specifically, for non-SYSTEM processes, the function checks for the
//  following environment variables in order and returns the first path found:
//
//  1. The path specified by the `TMP` environment variable.
//  2. The path specified by the `TEMP` environment variable.
//  3. The path specified by the `USERPROFILE` environment variable.
//  4. The Windows directory.
//
//  When called from a process running as SYSTEM,
//  [`GetTempPath2`][GetTempPath2] returns `C:\\Windows\\SystemTemp`
//  regardless of environment variables.
//
//  Note that, this [may change in the future][changes].
//
//  [changes]: io#platform-specific-behavior
//  [GetTempPath2]:
//  https://docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-gettemppath2a
//  [GetTempPath]:
//  https://docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-gettemppatha
//  [appledoc]:
//  https://developer.apple.com/library/archive/documentation/Security/Conceptual/SecureCodingGuide/Articles/RaceConditions.html#//apple_ref/doc/uid/TP40002585-SW10
//
//  ```
//  use std::env;
//
//  fn main() {
//      let dir = env::temp_dir();
//      println!("Temporary directory: {}", dir.display());
//  }
//  ```
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/env.rs;l=706
[[nodiscard]] ::rs::std::path::PathBuf temp_dir();

// Error generating bindings for function `env::var` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/env.rs;l=228:
// Error handling parameter #0 of type `&ffi::os_str::OsStr`: Failed to format
// the referent of the reference type `&ffi::os_str::OsStr`: Failed to format
// type for the definition of `ffi::os_str::OsStr`: Bindings for dynamically
// sized types are not supported.

// Error generating bindings for function `env::var_os` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/env.rs;l=264:
// Error handling parameter #0 of type `&ffi::os_str::OsStr`: Failed to format
// the referent of the reference type `&ffi::os_str::OsStr`: Failed to format
// type for the definition of `ffi::os_str::OsStr`: Bindings for dynamically
// sized types are not supported.

//  Returns an iterator of (variable, value) pairs of strings, for all the
//  environment variables of the current process.
//
//  The returned iterator contains a snapshot of the process's environment
//  variables at the time of this invocation. Modifications to environment
//  variables afterwards will not be reflected in the returned iterator.
//
//  # Panics
//
//  While iterating, the returned iterator will panic if any key or value in the
//  environment is not valid unicode. If this is not desired, consider using
//  [`env::vars_os()`].
//
//  # Examples
//
//  ```
//  // Print all environment variables.
//  for (key, value) in std::env::vars() {
//      println!("{key}: {value}");
//  }
//  ```
//
//  [`env::vars_os()`]: vars_os
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/env.rs;l=135
[[nodiscard]] ::rs::std::env::Vars vars();

//  Returns an iterator of (variable, value) pairs of OS strings, for all the
//  environment variables of the current process.
//
//  The returned iterator contains a snapshot of the process's environment
//  variables at the time of this invocation. Modifications to environment
//  variables afterwards will not be reflected in the returned iterator.
//
//  Note that the returned iterator will not check if the environment variables
//  are valid Unicode. If you want to panic on invalid UTF-8,
//  use the [`vars`] function instead.
//
//  # Examples
//
//  ```
//  // Print all environment variables.
//  for (key, value) in std::env::vars_os() {
//      println!("{key:?}: {value:?}");
//  }
//  ```
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/env.rs;l=160
[[nodiscard]] ::rs::std::env::VarsOs vars_os();

}  // namespace rs::std::env

namespace rs::std::ffi::os_str {

//  Helper struct for safely printing an [`OsStr`] with [`format!`] and `{}`.
//
//  An [`OsStr`] might contain non-Unicode data. This `struct` implements the
//  [`Display`] trait in a way that mitigates that. It is created by the
//  [`display`](OsStr::display) method on [`OsStr`]. This may perform lossy
//  conversion, depending on the platform. If you would like an implementation
//  which escapes the [`OsStr`] please use [`Debug`] instead.
//
//  # Examples
//
//  ```
//  use std::ffi::OsStr;
//
//  let s = OsStr::new("Hello, world!");
//  println!("{}", s.display());
//  ```
//
//  [`Display`]: fmt::Display
//  [`format!`]: crate::format
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/ffi/os_str.rs;l=1695
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: ffi :: os_str :: Display") alignas(
    8) [[clang::trivial_abi]] Display final {
 public:
  // `std::ffi::os_str::Display` doesn't implement the `Default` trait
  Display() = delete;

  // No custom `Drop` impl and no custom "drop glue" required
  ~Display() = default;
  Display(Display&&) = default;
  Display& operator=(Display&&) = default;

  // `std::ffi::os_str::Display` doesn't implement the `Clone` trait
  Display(const Display&) = delete;
  Display& operator=(const Display&) = delete;
  Display(::crubit::UnsafeRelocateTag, Display&& value);

  // AbslStringify and std::ostream support via std::fmt::Display
  template <typename Sink, typename Str = rs::alloc::string::String>
  friend void AbslStringify(Sink& sink, const Display& self) {
    crubit::Slot<Str> s;
    __crubit_thunk_818b180788380d74__uRNvYNtNtNtCsb7ytMsthdgm_u3std3ffi6os_ustr7DisplayNtNtCsaddbpR6HRqH_u5alloc6string8ToString9to_ustringB8_u(
        self, s.Get());
    AbslStringify(sink, ::std::move(s).AssumeInitAndTakeValue().as_str());
  }
  template <typename Str = rs::alloc::string::String>
  friend ::std::ostream& operator<<(::std::ostream& os, const Display& self) {
    crubit::Slot<Str> s;
    __crubit_thunk_818b180788380d74__uRNvYNtNtNtCsb7ytMsthdgm_u3std3ffi6os_ustr7DisplayNtNtCsaddbpR6HRqH_u5alloc6string8ToString9to_ustringB8_u(
        self, s.Get());
    return os << ::std::string_view(
               ::std::move(s).AssumeInitAndTakeValue().as_str());
  }

 private:
  // Field type has been replaced with a blob of bytes: Failed to format the
  // referent of the reference type `&ffi::os_str::OsStr`: Failed to format type
  // for the definition of `ffi::os_str::OsStr`: Bindings for dynamically sized
  // types are not supported.
  ::std::array<unsigned char, 16> os_str;

 private:
  static void __crubit_field_offset_assertions();
};

}  // namespace rs::std::ffi::os_str

namespace rs::std::ffi {

// Error generating bindings for struct `ffi::os_str::OsStr` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/ffi/os_str.rs;l=115:
// Bindings for dynamically sized types are not supported.

//  A type that can represent owned, mutable platform-native strings, but is
//  cheaply inter-convertible with Rust strings.
//
//  The need for this type arises from the fact that:
//
//  * On Unix systems, strings are often arbitrary sequences of non-zero
//    bytes, in many cases interpreted as UTF-8.
//
//  * On Windows, strings are often arbitrary sequences of non-zero 16-bit
//    values, interpreted as UTF-16 when it is valid to do so.
//
//  * In Rust, strings are always valid UTF-8, which may contain zeros.
//
//  `OsString` and [`OsStr`] bridge this gap by simultaneously representing Rust
//  and platform-native string values, and in particular allowing a Rust string
//  to be converted into an "OS" string with no cost if possible. A consequence
//  of this is that `OsString` instances are *not* `NUL` terminated; in order
//  to pass to e.g., Unix system call, you should create a [`CStr`].
//
//  `OsString` is to <code>&[OsStr]</code> as [`String`] is to
//  <code>&[str]</code>: the former in each pair are owned strings; the latter
//  are borrowed references.
//
//  Note, `OsString` and [`OsStr`] internally do not necessarily hold strings in
//  the form native to the platform; While on Unix, strings are stored as a
//  sequence of 8-bit values, on Windows, where strings are 16-bit value based
//  as just discussed, strings are also actually stored as a sequence of 8-bit
//  values, encoded in a less-strict variant of UTF-8. This is useful to
//  understand when handling capacity and length values.
//
//  # Capacity of `OsString`
//
//  Capacity uses units of UTF-8 bytes for OS strings which were created from
//  valid unicode, and uses units of bytes in an unspecified encoding for other
//  contents. On a given target, all `OsString` and `OsStr` values use the same
//  units for capacity, so the following will work:
//  ```
//  use std::ffi::{OsStr, OsString};
//
//  fn concat_os_strings(a: &OsStr, b: &OsStr) -> OsString {
//      let mut ret = OsString::with_capacity(a.len() + b.len()); // This will
//      allocate ret.push(a); // This will not allocate further ret.push(b); //
//      This will not allocate further ret
//  }
//  ```
//
//  # Creating an `OsString`
//
//  **From a Rust string**: `OsString` implements
//  <code>[From]<[String]></code>, so you can use
//  <code>my_string.[into]\\()</code> to create an `OsString` from a normal Rust
//  string.
//
//  **From slices:** Just like you can start with an empty Rust
//  [`String`] and then [`String::push_str`] some <code>&[str]</code>
//  sub-string slices into it, you can create an empty `OsString` with
//  the [`OsString::new`] method and then push string slices into it with the
//  [`OsString::push`] method.
//
//  # Extracting a borrowed reference to the whole OS string
//
//  You can use the [`OsString::as_os_str`] method to get an
//  <code>&[OsStr]</code> from an `OsString`; this is effectively a borrowed
//  reference to the whole string.
//
//  # Conversions
//
//  See the [module's toplevel documentation about conversions][conversions] for
//  a discussion on the traits which `OsString` implements for [conversions]
//  from/to native representations.
//
//  [`CStr`]: crate::ffi::CStr
//  [conversions]: super#conversions
//  [into]: Into::into
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/ffi/os_str.rs;l=93
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: ffi :: OsString") alignas(8)
    [[clang::trivial_abi]] OsString final {
 public:
  // Default::default
  OsString();

  // Drop::drop
  ~OsString();

  OsString(OsString&&);
  ::rs::std::ffi::OsString& operator=(OsString&&);

  // Clone::clone
  OsString(const OsString&);

  // Clone::clone_from
  ::rs::std::ffi::OsString& operator=(const OsString&);

  OsString(::crubit::UnsafeRelocateTag, OsString&& value);

  //  Constructs a new empty `OsString`.
  //
  //  # Examples
  //
  //  ```
  //  use std::ffi::OsString;
  //
  //  let os_string = OsString::new();
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/ffi/os_str.rs;l=133
  [[nodiscard]] static ::rs::std::ffi::OsString new_();

  //  Converts bytes to an `OsString` without checking that the bytes contains
  //  valid [`OsStr`]-encoded data.
  //
  //  The byte encoding is an unspecified, platform-specific, self-synchronizing
  //  superset of UTF-8. By being a self-synchronizing superset of UTF-8, this
  //  encoding is also a superset of 7-bit ASCII.
  //
  //  See the [module's toplevel documentation about conversions][conversions]
  //  for safe, cross-platform [conversions] from/to native representations.
  //
  //  # Safety
  //
  //  As the encoding is unspecified, callers must pass in bytes that originated
  //  as a mixture of validated UTF-8 and bytes from [`OsStr::as_encoded_bytes`]
  //  from within the same Rust version built for the same target platform.  For
  //  example, reconstructing an `OsString` from bytes sent over the network or
  //  stored in a file will likely violate these safety rules.
  //
  //  Due to the encoding being self-synchronizing, the bytes from
  //  [`OsStr::as_encoded_bytes`] can be split either immediately before or
  //  immediately after any valid non-empty UTF-8 substring.
  //
  //  # Example
  //
  //  ```
  //  use std::ffi::OsStr;
  //
  //  let os_str = OsStr::new("Mary had a little lamb");
  //  let bytes = os_str.as_encoded_bytes();
  //  let words = bytes.split(|b| *b == b' ');
  //  let words: Vec<&OsStr> = words.map(|word| {
  //      // SAFETY:
  //      // - Each `word` only contains content that originated from
  //      `OsStr::as_encoded_bytes`
  //      // - Only split with ASCII whitespace which is a non-empty UTF-8
  //      substring unsafe { OsStr::from_encoded_bytes_unchecked(word) }
  //  }).collect();
  //  ```
  //
  //  [conversions]: super#conversions
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/ffi/os_str.rs;l=176
  static ::rs::std::ffi::OsString from_encoded_bytes_unchecked(
      rs_std::Vec<::std::uint8_t> bytes);

  // Error generating bindings for associated function
  // `ffi::os_str::OsString::as_os_str` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/ffi/os_str.rs;l=195:
  // Error formatting function return type `&'__anon1 ffi::os_str::OsStr`:
  // Failed to format the referent of the reference type `&'__anon1
  // ffi::os_str::OsStr`: Failed to format type for the definition of
  // `ffi::os_str::OsStr`: Bindings for dynamically sized types are not
  // supported.

  //  Converts the `OsString` into a byte vector.  To convert the byte vector
  //  back into an `OsString`, use the
  //  [`OsString::from_encoded_bytes_unchecked`] function.
  //
  //  The byte encoding is an unspecified, platform-specific, self-synchronizing
  //  superset of UTF-8. By being a self-synchronizing superset of UTF-8, this
  //  encoding is also a superset of 7-bit ASCII.
  //
  //  Note: As the encoding is unspecified, any sub-slice of bytes that is not
  //  valid UTF-8 should be treated as opaque and only comparable within the
  //  same Rust version built for the same target platform.  For example,
  //  sending the bytes over the network or storing it in a file will likely
  //  result in incompatible data.  See [`OsString`] for more encoding details
  //  and [`std::ffi`] for platform-specific, specified conversions.
  //
  //  [`std::ffi`]: crate::ffi
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/ffi/os_str.rs;l=215
  rs_std::Vec<::std::uint8_t> into_encoded_bytes() &&;

  //  Converts the `OsString` into a [`String`] if it contains valid Unicode
  //  data.
  //
  //  On failure, ownership of the original `OsString` is returned.
  //
  //  # Examples
  //
  //  ```
  //  use std::ffi::OsString;
  //
  //  let os_string = OsString::from("foo");
  //  let string = os_string.into_string();
  //  assert_eq!(string, Ok(String::from("foo")));
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/ffi/os_str.rs;l=234
  rs_std::Result<::rs::alloc::string::String, ::rs::std::ffi::OsString>
  into_string() &&;

  // Error generating bindings for associated function
  // `ffi::os_str::OsString::push` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/ffi/os_str.rs;l=252:
  // Error handling parameter #1 of type `&ffi::os_str::OsStr`: Failed to format
  // the referent of the reference type `&ffi::os_str::OsStr`: Failed to format
  // type for the definition of `ffi::os_str::OsStr`: Bindings for dynamically
  // sized types are not supported.

  //  Creates a new `OsString` with at least the given capacity.
  //
  //  The string will be able to hold at least `capacity` length units of other
  //  OS strings without reallocating. This method is allowed to allocate for
  //  more units than `capacity`. If `capacity` is 0, the string will not
  //  allocate.
  //
  //  See the main `OsString` documentation information about encoding and
  //  capacity units.
  //
  //  # Examples
  //
  //  ```
  //  use std::ffi::OsString;
  //
  //  let mut os_string = OsString::with_capacity(10);
  //  let capacity = os_string.capacity();
  //
  //  // This push is done without reallocating
  //  os_string.push("foo");
  //
  //  assert_eq!(capacity, os_string.capacity());
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/ffi/os_str.rs;l=304
  [[nodiscard]] static ::rs::std::ffi::OsString with_capacity(
      ::std::uintptr_t capacity);

  //  Truncates the `OsString` to zero length.
  //
  //  # Examples
  //
  //  ```
  //  use std::ffi::OsString;
  //
  //  let mut os_string = OsString::from("foo");
  //  assert_eq!(&os_string, "foo");
  //
  //  os_string.clear();
  //  assert_eq!(&os_string, "");
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/ffi/os_str.rs;l=323
  void clear();

  //  Returns the capacity this `OsString` can hold without reallocating.
  //
  //  See the main `OsString` documentation information about encoding and
  //  capacity units.
  //
  //  # Examples
  //
  //  ```
  //  use std::ffi::OsString;
  //
  //  let os_string = OsString::with_capacity(10);
  //  assert!(os_string.capacity() >= 10);
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/ffi/os_str.rs;l=342
  [[nodiscard]] ::std::uintptr_t capacity() const;

  //  Reserves capacity for at least `additional` more capacity to be inserted
  //  in the given `OsString`. Does nothing if the capacity is
  //  already sufficient.
  //
  //  The collection may reserve more space to speculatively avoid frequent
  //  reallocations.
  //
  //  See the main `OsString` documentation information about encoding and
  //  capacity units.
  //
  //  # Examples
  //
  //  ```
  //  use std::ffi::OsString;
  //
  //  let mut s = OsString::new();
  //  s.reserve(10);
  //  assert!(s.capacity() >= 10);
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/ffi/os_str.rs;l=365
  void reserve(::std::uintptr_t additional);

  // Error generating bindings for associated function
  // `ffi::os_str::OsString::try_reserve` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/ffi/os_str.rs;l=404:
  // Error formatting function return type `core::result::Result<(),
  // alloc_crate::collections::TryReserveError>`: Generic types are not
  // supported yet (b/259749095)

  //  Reserves the minimum capacity for at least `additional` more capacity to
  //  be inserted in the given `OsString`. Does nothing if the capacity is
  //  already sufficient.
  //
  //  Note that the allocator may give the collection more space than it
  //  requests. Therefore, capacity can not be relied upon to be precisely
  //  minimal. Prefer [`reserve`] if future insertions are expected.
  //
  //  [`reserve`]: OsString::reserve
  //
  //  See the main `OsString` documentation information about encoding and
  //  capacity units.
  //
  //  # Examples
  //
  //  ```
  //  use std::ffi::OsString;
  //
  //  let mut s = OsString::new();
  //  s.reserve_exact(10);
  //  assert!(s.capacity() >= 10);
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/ffi/os_str.rs;l=431
  void reserve_exact(::std::uintptr_t additional);

  // Error generating bindings for associated function
  // `ffi::os_str::OsString::try_reserve_exact` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/ffi/os_str.rs;l=475:
  // Error formatting function return type `core::result::Result<(),
  // alloc_crate::collections::TryReserveError>`: Generic types are not
  // supported yet (b/259749095)

  //  Shrinks the capacity of the `OsString` to match its length.
  //
  //  See the main `OsString` documentation information about encoding and
  //  capacity units.
  //
  //  # Examples
  //
  //  ```
  //  use std::ffi::OsString;
  //
  //  let mut s = OsString::from("foo");
  //
  //  s.reserve(100);
  //  assert!(s.capacity() >= 100);
  //
  //  s.shrink_to_fit();
  //  assert_eq!(3, s.capacity());
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/ffi/os_str.rs;l=498
  void shrink_to_fit();

  //  Shrinks the capacity of the `OsString` with a lower bound.
  //
  //  The capacity will remain at least as large as both the length
  //  and the supplied value.
  //
  //  If the current capacity is less than the lower limit, this is a no-op.
  //
  //  See the main `OsString` documentation information about encoding and
  //  capacity units.
  //
  //  # Examples
  //
  //  ```
  //  use std::ffi::OsString;
  //
  //  let mut s = OsString::from("foo");
  //
  //  s.reserve(100);
  //  assert!(s.capacity() >= 100);
  //
  //  s.shrink_to(10);
  //  assert!(s.capacity() >= 10);
  //  s.shrink_to(0);
  //  assert!(s.capacity() >= 3);
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/ffi/os_str.rs;l=528
  void shrink_to(::std::uintptr_t min_capacity);

  // Error generating bindings for associated function
  // `ffi::os_str::OsString::into_boxed_os_str` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/ffi/os_str.rs;l=545:
  // Error formatting function return type
  // `alloc_crate::boxed::Box<ffi::os_str::OsStr>`: Generic types are not
  // supported yet (b/259749095)

  // Error generating bindings for associated function
  // `ffi::os_str::OsString::leak` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/ffi/os_str.rs;l=565:
  // Error formatting function return type `&'a mut ffi::os_str::OsStr`: Failed
  // to format the referent of the reference type `&'a mut ffi::os_str::OsStr`:
  // Failed to format type for the definition of `ffi::os_str::OsStr`: Bindings
  // for dynamically sized types are not supported.

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=1994
  explicit operator ::rs::std::path::PathBuf();

  // Error generating bindings for associated function `<ffi::os_str::OsString
  // as core::ops::Index<core::ops::RangeFull>>::index` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/ffi/os_str.rs;l=654:
  // Error formatting function return type `&'__anon1 ffi::os_str::OsStr`:
  // Failed to format the referent of the reference type `&'__anon1
  // ffi::os_str::OsStr`: Failed to format type for the definition of
  // `ffi::os_str::OsStr`: Bindings for dynamically sized types are not
  // supported.

  // Error generating bindings for associated function `<ffi::os_str::OsString
  // as core::ops::IndexMut<core::ops::RangeFull>>::index_mut` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/ffi/os_str.rs;l=662:
  // Error formatting function return type `&'__anon1 mut ffi::os_str::OsStr`:
  // Failed to format the referent of the reference type `&'__anon1 mut
  // ffi::os_str::OsStr`: Failed to format type for the definition of
  // `ffi::os_str::OsStr`: Bindings for dynamically sized types are not
  // supported.

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/ffi/os_str.rs;l=721
  bool operator==(::rs::std::ffi::OsString const& other) const;

  // Error generating bindings for associated function `<ffi::os_str::OsString
  // as core::cmp::PartialEq<str>>::eq` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/ffi/os_str.rs;l=729:
  // The following Rust type is not supported yet: str

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/ffi/os_str.rs;l=745
  bool operator==(rs_std::StrRef const& other) const;

  // Error generating bindings for associated function `<ffi::os_str::OsString
  // as core::cmp::PartialEq<ffi::os_str::OsStr>>::eq` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/ffi/os_str.rs;l=1623:
  // Error handling parameter #1 of type `&'__anon2 ffi::os_str::OsStr`: Failed
  // to format the referent of the reference type `&'__anon2
  // ffi::os_str::OsStr`: Failed to format type for the definition of
  // `ffi::os_str::OsStr`: Bindings for dynamically sized types are not
  // supported.

  // Error generating bindings for associated function `<ffi::os_str::OsString
  // as core::cmp::PartialEq<&ffi::os_str::OsStr>>::eq` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/ffi/os_str.rs;l=1623:
  // Error handling parameter #1 of type `&'__anon2 &'__anon3
  // ffi::os_str::OsStr`: Failed to format the referent of the reference type
  // `&'__anon2 &'__anon3 ffi::os_str::OsStr`: Failed to format the referent of
  // the reference type `&'__anon3 ffi::os_str::OsStr`: Failed to format type
  // for the definition of `ffi::os_str::OsStr`: Bindings for dynamically sized
  // types are not supported.

  // Error generating bindings for associated function `<ffi::os_str::OsString
  // as core::cmp::PartialEq<alloc_crate::borrow::Cow<'_,
  // ffi::os_str::OsStr>>>::eq` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/ffi/os_str.rs;l=1631:
  // Error handling parameter #1 of type `&'__anon2
  // alloc_crate::borrow::Cow<'__anon3, ffi::os_str::OsStr>`: Failed to format
  // the referent of the reference type `&'__anon2
  // alloc_crate::borrow::Cow<'__anon3, ffi::os_str::OsStr>`: Generic types are
  // not supported yet (b/259749095)

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=4002
  bool operator==(::rs::std::path::PathBuf const& other) const;

  // Error generating bindings for associated function `path::<impl
  // core::cmp::PartialEq<path::Path> for ffi::os_str::OsString>::eq` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=4002:
  // Error handling parameter #1 of type `&'__anon2 path::Path`: Failed to
  // format the referent of the reference type `&'__anon2 path::Path`: Failed to
  // format type for the definition of `path::Path`: Bindings for dynamically
  // sized types are not supported.

  // Error generating bindings for associated function `path::<impl
  // core::cmp::PartialEq<&path::Path> for ffi::os_str::OsString>::eq` defined
  // at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=4002:
  // Error handling parameter #1 of type `&'__anon2 &'__anon3 path::Path`:
  // Failed to format the referent of the reference type `&'__anon2 &'__anon3
  // path::Path`: Failed to format the referent of the reference type `&'__anon3
  // path::Path`: Failed to format type for the definition of `path::Path`:
  // Bindings for dynamically sized types are not supported.

  // Error generating bindings for associated function `path::<impl
  // core::cmp::PartialEq<alloc_crate::borrow::Cow<'_, path::Path>> for
  // ffi::os_str::OsString>::eq` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=4002:
  // Error handling parameter #1 of type `&'__anon2
  // alloc_crate::borrow::Cow<'__anon3, path::Path>`: Failed to format the
  // referent of the reference type `&'__anon2
  // alloc_crate::borrow::Cow<'__anon3, path::Path>`: Generic types are not
  // supported yet (b/259749095)

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/ffi/os_str.rs;l=607
  explicit OsString(::rs::alloc::string::String value);

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=2005
  explicit OsString(::rs::std::path::PathBuf value);

  ::std::strong_ordering operator<=>(const OsString& other) const;

  // Error generating bindings for implementation `<ffi::os_str::OsString as
  // core::cmp::PartialOrd<str>>` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/ffi/os_str.rs;l=786:
  // The following Rust type is not supported yet: str

  // Error generating bindings for implementation `<ffi::os_str::OsString as
  // core::cmp::PartialOrd<ffi::os_str::OsStr>>` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/ffi/os_str.rs;l=1637:
  // Failed to format the referent of the reference type `&ffi::os_str::OsStr`:
  // Failed to format type for the definition of `ffi::os_str::OsStr`: Bindings
  // for dynamically sized types are not supported.

  // Error generating bindings for implementation `<ffi::os_str::OsString as
  // core::cmp::PartialOrd<&ffi::os_str::OsStr>>` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/ffi/os_str.rs;l=1637:
  // Failed to format the referent of the reference type `&&'static
  // ffi::os_str::OsStr`: Failed to format the referent of the reference type
  // `&'static ffi::os_str::OsStr`: Failed to format type for the definition of
  // `ffi::os_str::OsStr`: Bindings for dynamically sized types are not
  // supported.

  // Error generating bindings for implementation `<ffi::os_str::OsString as
  // core::cmp::PartialOrd<alloc_crate::borrow::Cow<'_, ffi::os_str::OsStr>>>`
  // defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/ffi/os_str.rs;l=1645:
  // Failed to format the referent of the reference type
  // `&alloc_crate::borrow::Cow<'static, ffi::os_str::OsStr>`: Generic types are
  // not supported yet (b/259749095)

  ::std::partial_ordering operator<=>(
      ::rs::std::path::PathBuf const& other) const;

  // Error generating bindings for implementation `path::<impl
  // core::cmp::PartialOrd<path::Path> for ffi::os_str::OsString>` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=4016:
  // Failed to format the referent of the reference type `&path::Path`: Failed
  // to format type for the definition of `path::Path`: Bindings for dynamically
  // sized types are not supported.

  // Error generating bindings for implementation `path::<impl
  // core::cmp::PartialOrd<&path::Path> for ffi::os_str::OsString>` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=4016:
  // Failed to format the referent of the reference type `&&'static path::Path`:
  // Failed to format the referent of the reference type `&'static path::Path`:
  // Failed to format type for the definition of `path::Path`: Bindings for
  // dynamically sized types are not supported.

  // Error generating bindings for implementation `path::<impl
  // core::cmp::PartialOrd<alloc_crate::borrow::Cow<'_, path::Path>> for
  // ffi::os_str::OsString>` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=4016:
  // Failed to format the referent of the reference type
  // `&alloc_crate::borrow::Cow<'static, path::Path>`: Generic types are not
  // supported yet (b/259749095)

 private:
  // Field type has been replaced with a blob of bytes: Not a public or a
  // supported reexported type (b/262052635).
  ::std::array<unsigned char, 24> inner;

 private:
  static void __crubit_field_offset_assertions();
};

}  // namespace rs::std::ffi

namespace rs::std::fs {

//  A builder used to create directories in various manners.
//
//  This builder also supports platform-specific options.
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=309
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: fs :: DirBuilder") alignas(4)
    [[clang::trivial_abi]] DirBuilder final {
 public:
  // `std::fs::DirBuilder` doesn't implement the `Default` trait
  DirBuilder() = delete;

  // No custom `Drop` impl and no custom "drop glue" required
  ~DirBuilder() = default;
  DirBuilder(DirBuilder&&) = default;
  DirBuilder& operator=(DirBuilder&&) = default;

  // `std::fs::DirBuilder` doesn't implement the `Clone` trait
  DirBuilder(const DirBuilder&) = delete;
  DirBuilder& operator=(const DirBuilder&) = delete;
  DirBuilder(::crubit::UnsafeRelocateTag, DirBuilder&& value);

  //  Creates a new set of options with default mode/security settings for all
  //  platforms and also non-recursive.
  //
  //  # Examples
  //
  //  ```
  //  use std::fs::DirBuilder;
  //
  //  let builder = DirBuilder::new();
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=3515
  [[nodiscard]] static ::rs::std::fs::DirBuilder new_();

  //  Indicates that directories should be created recursively, creating all
  //  parent directories. Parents that do not exist are created with the same
  //  security and permissions settings.
  //
  //  This option defaults to `false`.
  //
  //  # Examples
  //
  //  ```
  //  use std::fs::DirBuilder;
  //
  //  let mut builder = DirBuilder::new();
  //  builder.recursive(true);
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=3534
  ::rs::std::fs::DirBuilder& $(__anon1) recursive(bool recursive) &
      $(__anon1) CRUBIT_LIFETIME_BOUND;

  // Error generating bindings for associated function `fs::DirBuilder::create`
  // defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=3558:
  // Error formatting function return type `core::result::Result<(),
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

 private:
  // Field type has been replaced with a blob of bytes: Not a public or a
  // supported reexported type (b/262052635).
  ::std::array<unsigned char, 4> inner;
  union {
    // Generated from:
    // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=311
    bool recursive_;
  };
  unsigned char __padding1[3];

 private:
  static void __crubit_field_offset_assertions();
};

//  Entries returned by the [`ReadDir`] iterator.
//
//  An instance of `DirEntry` represents an entry inside of a directory on the
//  filesystem. Each entry can be inspected via methods to learn about the full
//  path or possibly other metadata through per-platform extension traits.
//
//  # Platform-specific behavior
//
//  On Unix, the `DirEntry` struct contains an internal reference to the open
//  directory. Holding `DirEntry` objects will consume a file handle even
//  after the `ReadDir` iterator is dropped.
//
//  Note that this [may change in the future][changes].
//
//  [changes]: io#platform-specific-behavior
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=235
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: fs :: DirEntry") alignas(8)
    [[clang::trivial_abi]] DirEntry final {
 public:
  // `std::fs::DirEntry` doesn't implement the `Default` trait
  DirEntry() = delete;

  // Drop::drop
  ~DirEntry();

  // C++ move operations are unavailable for this type. See
  // http://crubit.rs/rust/movable_types for an explanation of Rust types that
  // are C++ movable.
  DirEntry(DirEntry&&) = delete;
  ::rs::std::fs::DirEntry& operator=(DirEntry&&) = delete;
  // `std::fs::DirEntry` doesn't implement the `Clone` trait
  DirEntry(const DirEntry&) = delete;
  DirEntry& operator=(const DirEntry&) = delete;
  DirEntry(::crubit::UnsafeRelocateTag, DirEntry&& value);

  //  Returns the full path to the file that this entry represents.
  //
  //  The full path is created by joining the original path to `read_dir`
  //  with the filename of this entry.
  //
  //  # Examples
  //
  //  ```no_run
  //  use std::fs;
  //
  //  fn main() -> std::io::Result<()> {
  //      for entry in fs::read_dir(".")? {
  //          let dir = entry?;
  //          println!("{:?}", dir.path());
  //      }
  //      Ok(())
  //  }
  //  ```
  //
  //  This prints output like:
  //
  //  ```text
  //  "./whatever.txt"
  //  "./foo.html"
  //  "./hello_world.rs"
  //  ```
  //
  //  The exact text, of course, depends on what files you have in `.`.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=2602
  [[nodiscard]] ::rs::std::path::PathBuf path() const;

  //  Returns the metadata for the file that this entry points at.
  //
  //  This function will not traverse symlinks if this entry points at a
  //  symlink. To traverse symlinks use [`fs::metadata`] or
  //  [`fs::File::metadata`].
  //
  //  [`fs::metadata`]: metadata
  //  [`fs::File::metadata`]: File::metadata
  //
  //  # Platform-specific behavior
  //
  //  On Windows this function is cheap to call (no extra system calls
  //  needed), but on Unix platforms this function is the equivalent of
  //  calling `symlink_metadata` on the path.
  //
  //  # Examples
  //
  //  ```
  //  use std::fs;
  //
  //  if let Ok(entries) = fs::read_dir(".") {
  //      for entry in entries {
  //          if let Ok(entry) = entry {
  //              // Here, `entry` is a `DirEntry`.
  //              if let Ok(metadata) = entry.metadata() {
  //                  // Now let's show our entry's permissions!
  //                  println!("{:?}: {:?}", entry.path(),
  //                  metadata.permissions());
  //              } else {
  //                  println!("Couldn't get metadata for {:?}", entry.path());
  //              }
  //          }
  //      }
  //  }
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=2640
  rs_std::Result<::rs::std::fs::Metadata, ::rs::std::io::Error> metadata()
      const;

  //  Returns the file type for the file that this entry points at.
  //
  //  This function will not traverse symlinks if this entry points at a
  //  symlink.
  //
  //  # Platform-specific behavior
  //
  //  On Windows and most Unix platforms this function is free (no extra
  //  system calls needed), but some Unix platforms may require the equivalent
  //  call to `symlink_metadata` to learn about the target file type.
  //
  //  # Examples
  //
  //  ```
  //  use std::fs;
  //
  //  if let Ok(entries) = fs::read_dir(".") {
  //      for entry in entries {
  //          if let Ok(entry) = entry {
  //              // Here, `entry` is a `DirEntry`.
  //              if let Ok(file_type) = entry.file_type() {
  //                  // Now let's show our entry's file type!
  //                  println!("{:?}: {:?}", entry.path(), file_type);
  //              } else {
  //                  println!("Couldn't get file type for {:?}", entry.path());
  //              }
  //          }
  //      }
  //  }
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=2675
  rs_std::Result<::rs::std::fs::FileType, ::rs::std::io::Error> file_type()
      const;

  //  Returns the file name of this directory entry without any
  //  leading path component(s).
  //
  //  As an example,
  //  the output of the function will result in "foo" for all the following
  //  paths:
  //  - "./foo"
  //  - "/the/foo"
  //  - "../../foo"
  //
  //  # Examples
  //
  //  ```
  //  use std::fs;
  //
  //  if let Ok(entries) = fs::read_dir(".") {
  //      for entry in entries {
  //          if let Ok(entry) = entry {
  //              // Here, `entry` is a `DirEntry`.
  //              println!("{:?}", entry.file_name());
  //          }
  //      }
  //  }
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=2704
  [[nodiscard]] ::rs::std::ffi::OsString file_name() const;

 private:
  // Field type has been replaced with a blob of bytes: Not a public or a
  // supported reexported type (b/262052635).
  ::std::array<unsigned char, 40> __field0;

 private:
  static void __crubit_field_offset_assertions();
};

//  An object providing access to an open file on the filesystem.
//
//  An instance of a `File` can be read and/or written depending on what options
//  it was opened with. Files also implement [`Seek`] to alter the logical
//  cursor that the file contains internally.
//
//  Files are automatically closed when they go out of scope.  Errors detected
//  on closing are ignored by the implementation of `Drop`.  Use the method
//  [`sync_all`] if these errors must be manually handled.
//
//  `File` does not buffer reads and writes. For efficiency, consider wrapping
//  the file in a [`BufReader`] or [`BufWriter`] when performing many small
//  [`read`] or [`write`] calls, unless unbuffered reads and writes are
//  required.
//
//  # Examples
//
//  Creates a new file and write bytes to it (you can also use [`write`]):
//
//  ```no_run
//  use std::fs::File;
//  use std::io::prelude::*;
//
//  fn main() -> std::io::Result<()> {
//      let mut file = File::create("foo.txt")?;
//      file.write_all(b"Hello, world!")?;
//      Ok(())
//  }
//  ```
//
//  Reads the contents of a file into a [`String`] (you can also use [`read`]):
//
//  ```no_run
//  use std::fs::File;
//  use std::io::prelude::*;
//
//  fn main() -> std::io::Result<()> {
//      let mut file = File::open("foo.txt")?;
//      let mut contents = String::new();
//      file.read_to_string(&mut contents)?;
//      assert_eq!(contents, "Hello, world!");
//      Ok(())
//  }
//  ```
//
//  Using a buffered [`Read`]er:
//
//  ```no_run
//  use std::fs::File;
//  use std::io::BufReader;
//  use std::io::prelude::*;
//
//  fn main() -> std::io::Result<()> {
//      let file = File::open("foo.txt")?;
//      let mut buf_reader = BufReader::new(file);
//      let mut contents = String::new();
//      buf_reader.read_to_string(&mut contents)?;
//      assert_eq!(contents, "Hello, world!");
//      Ok(())
//  }
//  ```
//
//  Note that, although read and write methods require a `&mut File`, because
//  of the interfaces for [`Read`] and [`Write`], the holder of a `&File` can
//  still modify the file, either through methods that take `&File` or by
//  retrieving the underlying OS object and modifying the file that way.
//  Additionally, many operating systems allow concurrent modification of files
//  by different processes. Avoid assuming that holding a `&File` means that the
//  file will not change.
//
//  # Platform-specific behavior
//
//  On Windows, the implementation of [`Read`] and [`Write`] traits for `File`
//  perform synchronous I/O operations. Therefore the underlying file must not
//  have been opened for asynchronous I/O (e.g. by using
//  `FILE_FLAG_OVERLAPPED`).
//
//  [`BufReader`]: io::BufReader
//  [`BufWriter`]: io::BufWriter
//  [`sync_all`]: File::sync_all
//  [`write`]: File::write
//  [`read`]: File::read
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=135
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: fs :: File") alignas(4)
    [[clang::trivial_abi]] File final {
 public:
  // `std::fs::File` doesn't implement the `Default` trait
  File() = delete;

  // Drop::drop
  ~File();

  // C++ move operations are unavailable for this type. See
  // http://crubit.rs/rust/movable_types for an explanation of Rust types that
  // are C++ movable.
  File(File&&) = delete;
  ::rs::std::fs::File& operator=(File&&) = delete;
  // `std::fs::File` doesn't implement the `Clone` trait
  File(const File&) = delete;
  File& operator=(const File&) = delete;
  File(::crubit::UnsafeRelocateTag, File&& value);

  // Error generating bindings for associated function `fs::File::open` defined
  // at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=568:
  // Error handling parameter #0 of type `&path::Path`: Failed to format the
  // referent of the reference type `&path::Path`: Failed to format type for the
  // definition of `path::Path`: Bindings for dynamically sized types are not
  // supported.

  // Error generating bindings for associated function `fs::File::create`
  // defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=634:
  // Error handling parameter #0 of type `&path::Path`: Failed to format the
  // referent of the reference type `&path::Path`: Failed to format type for the
  // definition of `path::Path`: Bindings for dynamically sized types are not
  // supported.

  // Error generating bindings for associated function `fs::File::create_new`
  // defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=706:
  // Error handling parameter #0 of type `&path::Path`: Failed to format the
  // referent of the reference type `&path::Path`: Failed to format type for the
  // definition of `path::Path`: Bindings for dynamically sized types are not
  // supported.

  //  Returns a new OpenOptions object.
  //
  //  This function returns a new OpenOptions object that you can use to
  //  open or create a file with specific options if `open()` or `create()`
  //  are not appropriate.
  //
  //  It is equivalent to `OpenOptions::new()`, but allows you to write more
  //  readable code. Instead of
  //  `OpenOptions::new().append(true).open("example.log")`,
  //  you can write `File::options().append(true).open("example.log")`. This
  //  also avoids the need to import `OpenOptions`.
  //
  //  See the [`OpenOptions::new`] function for more details.
  //
  //  # Examples
  //
  //  ```no_run
  //  use std::fs::File;
  //  use std::io::Write;
  //
  //  fn main() -> std::io::Result<()> {
  //      let mut f = File::options().append(true).open("example.log")?;
  //      writeln!(&mut f, "new line")?;
  //      Ok(())
  //  }
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=739
  [[nodiscard]] static ::rs::std::fs::OpenOptions options();

  // Error generating bindings for associated function `fs::File::sync_all`
  // defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=774:
  // Error formatting function return type `core::result::Result<(),
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  // Error generating bindings for associated function `fs::File::sync_data`
  // defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=806:
  // Error formatting function return type `core::result::Result<(),
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  // Error generating bindings for associated function `fs::File::lock` defined
  // at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=859:
  // Error formatting function return type `core::result::Result<(),
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  // Error generating bindings for associated function `fs::File::lock_shared`
  // defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=911:
  // Error formatting function return type `core::result::Result<(),
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  // Error generating bindings for associated function `fs::File::try_lock`
  // defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=976:
  // Error formatting function return type `core::result::Result<(),
  // fs::TryLockError>`: Generic types are not supported yet (b/259749095)

  // Error generating bindings for associated function
  // `fs::File::try_lock_shared` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=1040:
  // Error formatting function return type `core::result::Result<(),
  // fs::TryLockError>`: Generic types are not supported yet (b/259749095)

  // Error generating bindings for associated function `fs::File::unlock`
  // defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=1077:
  // Error formatting function return type `core::result::Result<(),
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  // Error generating bindings for associated function `fs::File::set_len`
  // defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=1115:
  // Error formatting function return type `core::result::Result<(),
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  //  Queries metadata about the underlying file.
  //
  //  # Examples
  //
  //  ```no_run
  //  use std::fs::File;
  //
  //  fn main() -> std::io::Result<()> {
  //      let mut f = File::open("foo.txt")?;
  //      let metadata = f.metadata()?;
  //      Ok(())
  //  }
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=1133
  rs_std::Result<::rs::std::fs::Metadata, ::rs::std::io::Error> metadata()
      const;

  //  Creates a new `File` instance that shares the same underlying file handle
  //  as the existing `File` instance. Reads, writes, and seeks will affect
  //  both `File` instances simultaneously.
  //
  //  # Examples
  //
  //  Creates two handles for a file named `foo.txt`:
  //
  //  ```no_run
  //  use std::fs::File;
  //
  //  fn main() -> std::io::Result<()> {
  //      let mut file = File::open("foo.txt")?;
  //      let file_copy = file.try_clone()?;
  //      Ok(())
  //  }
  //  ```
  //
  //  Assuming there’s a file named `foo.txt` with contents `abcdef\
  // `, create
  //  two handles, seek one of them, and read the remaining bytes from the
  //  other handle:
  //
  //  ```no_run
  //  use std::fs::File;
  //  use std::io::SeekFrom;
  //  use std::io::prelude::*;
  //
  //  fn main() -> std::io::Result<()> {
  //      let mut file = File::open("foo.txt")?;
  //      let mut file_copy = file.try_clone()?;
  //
  //      file.seek(SeekFrom::Start(3))?;
  //
  //      let mut contents = vec![];
  //      file_copy.read_to_end(&mut contents)?;
  //      assert_eq!(contents, b"def\
  // ");
  //      Ok(())
  //  }
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=1177
  rs_std::Result<::rs::std::fs::File, ::rs::std::io::Error> try_clone() const;

  // Error generating bindings for associated function
  // `fs::File::set_permissions` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=1215:
  // Error formatting function return type `core::result::Result<(),
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  // Error generating bindings for associated function `fs::File::set_times`
  // defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=1262:
  // Error formatting function return type `core::result::Result<(),
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  // Error generating bindings for associated function `fs::File::set_modified`
  // defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=1271:
  // Error formatting function return type `core::result::Result<(),
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

 private:
  // Field type has been replaced with a blob of bytes: Not a public or a
  // supported reexported type (b/262052635).
  ::std::array<unsigned char, 4> inner;

 private:
  static void __crubit_field_offset_assertions();
};

//  Representation of the various timestamps on a file.
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=281
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: fs :: FileTimes") alignas(8)
    [[clang::trivial_abi]] [[nodiscard(
        "must be applied to a file via `File::set_times` to have any effect")]]
    FileTimes final {
 public:
  // Default::default
  FileTimes();

  // No custom `Drop` impl and no custom "drop glue" required
  ~FileTimes() = default;
  FileTimes(FileTimes&&) = default;
  FileTimes& operator=(FileTimes&&) = default;

  // Rust types that are `Copy` get trivial, `default` C++ copy constructor and
  // assignment operator.
  FileTimes(const FileTimes&) = default;
  FileTimes& operator=(const FileTimes&) = default;
  FileTimes(::crubit::UnsafeRelocateTag, FileTimes&& value);

  //  Creates a new `FileTimes` with no times set.
  //
  //  Using the resulting `FileTimes` in [`File::set_times`] will not modify any
  //  timestamps.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=2286
  static ::rs::std::fs::FileTimes new_();

  //  Set the last access time of a file.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=2292
  ::rs::std::fs::FileTimes set_accessed(::rs::std::time::SystemTime t) const;

  //  Set the last modified time of a file.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=2299
  ::rs::std::fs::FileTimes set_modified(::rs::std::time::SystemTime t) const;

 private:
  // Field type has been replaced with a blob of bytes: Not a public or a
  // supported reexported type (b/262052635).
  ::std::array<unsigned char, 32> __field0;

 private:
  static void __crubit_field_offset_assertions();
};

//  A structure representing a type of file with accessors for each file type.
//  It is returned by [`Metadata::file_type`] method.
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=301
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: fs :: FileType") alignas(4)
    [[clang::trivial_abi]] FileType final {
 public:
  // `std::fs::FileType` doesn't implement the `Default` trait
  FileType() = delete;

  // No custom `Drop` impl and no custom "drop glue" required
  ~FileType() = default;
  FileType(FileType&&) = default;
  FileType& operator=(FileType&&) = default;

  // Rust types that are `Copy` get trivial, `default` C++ copy constructor and
  // assignment operator.
  FileType(const FileType&) = default;
  FileType& operator=(const FileType&) = default;
  FileType(::crubit::UnsafeRelocateTag, FileType&& value);

  //  Tests whether this file type represents a directory. The
  //  result is mutually exclusive to the results of
  //  [`is_file`] and [`is_symlink`]; only zero or one of these
  //  tests may pass.
  //
  //  [`is_file`]: FileType::is_file
  //  [`is_symlink`]: FileType::is_symlink
  //
  //  # Examples
  //
  //  ```no_run
  //  fn main() -> std::io::Result<()> {
  //      use std::fs;
  //
  //      let metadata = fs::metadata("foo.txt")?;
  //      let file_type = metadata.file_type();
  //
  //      assert_eq!(file_type.is_dir(), false);
  //      Ok(())
  //  }
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=2457
  [[nodiscard]] bool is_dir() const;

  //  Tests whether this file type represents a regular file.
  //  The result is mutually exclusive to the results of
  //  [`is_dir`] and [`is_symlink`]; only zero or one of these
  //  tests may pass.
  //
  //  When the goal is simply to read from (or write to) the source, the most
  //  reliable way to test the source can be read (or written to) is to open
  //  it. Only using `is_file` can break workflows like `diff <( prog_a )` on
  //  a Unix-like system for example. See [`File::open`] or
  //  [`OpenOptions::open`] for more information.
  //
  //  [`is_dir`]: FileType::is_dir
  //  [`is_symlink`]: FileType::is_symlink
  //
  //  # Examples
  //
  //  ```no_run
  //  fn main() -> std::io::Result<()> {
  //      use std::fs;
  //
  //      let metadata = fs::metadata("foo.txt")?;
  //      let file_type = metadata.file_type();
  //
  //      assert_eq!(file_type.is_file(), true);
  //      Ok(())
  //  }
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=2490
  [[nodiscard]] bool is_file() const;

  //  Tests whether this file type represents a symbolic link.
  //  The result is mutually exclusive to the results of
  //  [`is_dir`] and [`is_file`]; only zero or one of these
  //  tests may pass.
  //
  //  The underlying [`Metadata`] struct needs to be retrieved
  //  with the [`fs::symlink_metadata`] function and not the
  //  [`fs::metadata`] function. The [`fs::metadata`] function
  //  follows symbolic links, so [`is_symlink`] would always
  //  return `false` for the target file.
  //
  //  [`fs::metadata`]: metadata
  //  [`fs::symlink_metadata`]: symlink_metadata
  //  [`is_dir`]: FileType::is_dir
  //  [`is_file`]: FileType::is_file
  //  [`is_symlink`]: FileType::is_symlink
  //
  //  # Examples
  //
  //  ```no_run
  //  use std::fs;
  //
  //  fn main() -> std::io::Result<()> {
  //      let metadata = fs::symlink_metadata("foo.txt")?;
  //      let file_type = metadata.file_type();
  //
  //      assert_eq!(file_type.is_symlink(), false);
  //      Ok(())
  //  }
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=2526
  [[nodiscard]] bool is_symlink() const;

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=299
  bool operator==(::rs::std::fs::FileType const& other) const;

 private:
  // Field type has been replaced with a blob of bytes: Not a public or a
  // supported reexported type (b/262052635).
  ::std::array<unsigned char, 4> __field0;

 private:
  static void __crubit_field_offset_assertions();
};

//  Metadata information about a file.
//
//  This structure is returned from the [`metadata`] or
//  [`symlink_metadata`] function or method and represents known
//  metadata about a file such as its permissions, size, modification
//  times, etc.
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=200
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: fs :: Metadata") alignas(8)
    [[clang::trivial_abi]] Metadata final {
 public:
  // `std::fs::Metadata` doesn't implement the `Default` trait
  Metadata() = delete;

  // No custom `Drop` impl and no custom "drop glue" required
  ~Metadata() = default;
  Metadata(Metadata&&) = default;
  Metadata& operator=(Metadata&&) = default;

  // Clone::clone
  Metadata(const Metadata&);

  // Clone::clone_from
  ::rs::std::fs::Metadata& operator=(const Metadata&);

  Metadata(::crubit::UnsafeRelocateTag, Metadata&& value);

  //  Returns the file type for this metadata.
  //
  //  # Examples
  //
  //  ```no_run
  //  fn main() -> std::io::Result<()> {
  //      use std::fs;
  //
  //      let metadata = fs::metadata("foo.txt")?;
  //
  //      println!("{:?}", metadata.file_type());
  //      Ok(())
  //  }
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=2018
  [[nodiscard]] ::rs::std::fs::FileType file_type() const;

  //  Returns `true` if this metadata is for a directory. The
  //  result is mutually exclusive to the result of
  //  [`Metadata::is_file`], and will be false for symlink metadata
  //  obtained from [`symlink_metadata`].
  //
  //  # Examples
  //
  //  ```no_run
  //  fn main() -> std::io::Result<()> {
  //      use std::fs;
  //
  //      let metadata = fs::metadata("foo.txt")?;
  //
  //      assert!(!metadata.is_dir());
  //      Ok(())
  //  }
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=2041
  [[nodiscard]] bool is_dir() const;

  //  Returns `true` if this metadata is for a regular file. The
  //  result is mutually exclusive to the result of
  //  [`Metadata::is_dir`], and will be false for symlink metadata
  //  obtained from [`symlink_metadata`].
  //
  //  When the goal is simply to read from (or write to) the source, the most
  //  reliable way to test the source can be read (or written to) is to open
  //  it. Only using `is_file` can break workflows like `diff <( prog_a )` on
  //  a Unix-like system for example. See [`File::open`] or
  //  [`OpenOptions::open`] for more information.
  //
  //  # Examples
  //
  //  ```no_run
  //  use std::fs;
  //
  //  fn main() -> std::io::Result<()> {
  //      let metadata = fs::metadata("foo.txt")?;
  //
  //      assert!(metadata.is_file());
  //      Ok(())
  //  }
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=2070
  [[nodiscard]] bool is_file() const;

  //  Returns `true` if this metadata is for a symbolic link.
  //
  //  # Examples
  //
  // ```no_run
  //  use std::fs;
  //  use std::path::Path;
  //  use std::os::unix::fs::symlink;
  //
  //  fn main() -> std::io::Result<()> {
  //      let link_path = Path::new("link");
  //      symlink("/origin_does_not_exist/", link_path)?;
  //
  //      let metadata = fs::symlink_metadata(link_path)?;
  //
  //      assert!(metadata.is_symlink());
  //      Ok(())
  //  }
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=2096
  [[nodiscard]] bool is_symlink() const;

  //  Returns the size of the file, in bytes, this metadata is for.
  //
  //  # Examples
  //
  //  ```no_run
  //  use std::fs;
  //
  //  fn main() -> std::io::Result<()> {
  //      let metadata = fs::metadata("foo.txt")?;
  //
  //      assert_eq!(0, metadata.len());
  //      Ok(())
  //  }
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=2116
  [[nodiscard]] ::std::uint64_t len() const;

  //  Returns the permissions of the file this metadata is for.
  //
  //  # Examples
  //
  //  ```no_run
  //  use std::fs;
  //
  //  fn main() -> std::io::Result<()> {
  //      let metadata = fs::metadata("foo.txt")?;
  //
  //      assert!(!metadata.permissions().readonly());
  //      Ok(())
  //  }
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=2136
  [[nodiscard]] ::rs::std::fs::Permissions permissions() const;

  //  Returns the last modification time listed in this metadata.
  //
  //  The returned value corresponds to the `mtime` field of `stat` on Unix
  //  platforms and the `ftLastWriteTime` field on Windows platforms.
  //
  //  # Errors
  //
  //  This field might not be available on all platforms, and will return an
  //  `Err` on platforms where it is not available.
  //
  //  # Examples
  //
  //  ```no_run
  //  use std::fs;
  //
  //  fn main() -> std::io::Result<()> {
  //      let metadata = fs::metadata("foo.txt")?;
  //
  //      if let Ok(time) = metadata.modified() {
  //          println!("{time:?}");
  //      } else {
  //          println!("Not supported on this platform");
  //      }
  //      Ok(())
  //  }
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=2168
  rs_std::Result<::rs::std::time::SystemTime, ::rs::std::io::Error> modified()
      const;

  //  Returns the last access time of this metadata.
  //
  //  The returned value corresponds to the `atime` field of `stat` on Unix
  //  platforms and the `ftLastAccessTime` field on Windows platforms.
  //
  //  Note that not all platforms will keep this field update in a file's
  //  metadata, for example Windows has an option to disable updating this
  //  time when files are accessed and Linux similarly has `noatime`.
  //
  //  # Errors
  //
  //  This field might not be available on all platforms, and will return an
  //  `Err` on platforms where it is not available.
  //
  //  # Examples
  //
  //  ```no_run
  //  use std::fs;
  //
  //  fn main() -> std::io::Result<()> {
  //      let metadata = fs::metadata("foo.txt")?;
  //
  //      if let Ok(time) = metadata.accessed() {
  //          println!("{time:?}");
  //      } else {
  //          println!("Not supported on this platform");
  //      }
  //      Ok(())
  //  }
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=2204
  rs_std::Result<::rs::std::time::SystemTime, ::rs::std::io::Error> accessed()
      const;

  //  Returns the creation time listed in this metadata.
  //
  //  The returned value corresponds to the `btime` field of `statx` on
  //  Linux kernel starting from to 4.11, the `birthtime` field of `stat` on
  //  other Unix platforms, and the `ftCreationTime` field on Windows platforms.
  //
  //  # Errors
  //
  //  This field might not be available on all platforms, and will return an
  //  `Err` on platforms or filesystems where it is not available.
  //
  //  # Examples
  //
  //  ```no_run
  //  use std::fs;
  //
  //  fn main() -> std::io::Result<()> {
  //      let metadata = fs::metadata("foo.txt")?;
  //
  //      if let Ok(time) = metadata.created() {
  //          println!("{time:?}");
  //      } else {
  //          println!("Not supported on this platform or filesystem");
  //      }
  //      Ok(())
  //  }
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=2237
  rs_std::Result<::rs::std::time::SystemTime, ::rs::std::io::Error> created()
      const;

 private:
  // Field type has been replaced with a blob of bytes: Not a public or a
  // supported reexported type (b/262052635).
  ::std::array<unsigned char, 128> __field0;

 private:
  static void __crubit_field_offset_assertions();
};

//  Options and flags which can be used to configure how a file is opened.
//
//  This builder exposes the ability to configure how a [`File`] is opened and
//  what operations are permitted on the open file. The [`File::open`] and
//  [`File::create`] methods are aliases for commonly used options using this
//  builder.
//
//  Generally speaking, when using `OpenOptions`, you'll first call
//  [`OpenOptions::new`], then chain calls to methods to set each option, then
//  call [`OpenOptions::open`], passing the path of the file you're trying to
//  open. This will give you a [`io::Result`] with a [`File`] inside that you
//  can further operate on.
//
//  # Examples
//
//  Opening a file to read:
//
//  ```no_run
//  use std::fs::OpenOptions;
//
//  let file = OpenOptions::new().read(true).open("foo.txt");
//  ```
//
//  Opening a file for both reading and writing, as well as creating it if it
//  doesn't exist:
//
//  ```no_run
//  use std::fs::OpenOptions;
//
//  let file = OpenOptions::new()
//              .read(true)
//              .write(true)
//              .create(true)
//              .open("foo.txt");
//  ```
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=275
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: fs :: OpenOptions") alignas(4)
    [[clang::trivial_abi]] OpenOptions final {
 public:
  // `std::fs::OpenOptions` doesn't implement the `Default` trait
  OpenOptions() = delete;

  // No custom `Drop` impl and no custom "drop glue" required
  ~OpenOptions() = default;
  OpenOptions(OpenOptions&&) = default;
  OpenOptions& operator=(OpenOptions&&) = default;

  // Clone::clone
  OpenOptions(const OpenOptions&);

  // Clone::clone_from
  ::rs::std::fs::OpenOptions& operator=(const OpenOptions&);

  OpenOptions(::crubit::UnsafeRelocateTag, OpenOptions&& value);

  //  Creates a blank new set of options ready for configuration.
  //
  //  All options are initially set to `false`.
  //
  //  # Examples
  //
  //  ```no_run
  //  use std::fs::OpenOptions;
  //
  //  let mut options = OpenOptions::new();
  //  let file = options.read(true).open("foo.txt");
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=1755
  [[nodiscard]] static ::rs::std::fs::OpenOptions new_();

  //  Sets the option for read access.
  //
  //  This option, when true, will indicate that the file should be
  //  `read`-able if opened.
  //
  //  # Examples
  //
  //  ```no_run
  //  use std::fs::OpenOptions;
  //
  //  let file = OpenOptions::new().read(true).open("foo.txt");
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=1772
  ::rs::std::fs::OpenOptions& $(__anon1) read(bool read) &
      $(__anon1) CRUBIT_LIFETIME_BOUND;

  //  Sets the option for write access.
  //
  //  This option, when true, will indicate that the file should be
  //  `write`-able if opened.
  //
  //  If the file already exists, any write calls on it will overwrite its
  //  contents, without truncating it.
  //
  //  # Examples
  //
  //  ```no_run
  //  use std::fs::OpenOptions;
  //
  //  let file = OpenOptions::new().write(true).open("foo.txt");
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=1793
  ::rs::std::fs::OpenOptions& $(__anon1) write(bool write) &
      $(__anon1) CRUBIT_LIFETIME_BOUND;

  //  Sets the option for the append mode.
  //
  //  This option, when true, means that writes will append to a file instead
  //  of overwriting previous contents.
  //  Note that setting `.write(true).append(true)` has the same effect as
  //  setting only `.append(true)`.
  //
  //  Append mode guarantees that writes will be positioned at the current end
  //  of file, even when there are other processes or threads appending to the
  //  same file. This is unlike <code>[seek]\\([SeekFrom]::[End]\\(0))</code>
  //  followed by `write()`, which has a race between seeking and writing during
  //  which another writer can write, with our `write()` overwriting their data.
  //
  //  Keep in mind that this does not necessarily guarantee that data appended
  //  by different processes or threads does not interleave. The amount of data
  //  accepted a single `write()` call depends on the operating system and file
  //  system. A successful `write()` is allowed to write only part of the given
  //  data, so even if you're careful to provide the whole message in a single
  //  call to `write()`, there is no guarantee that it will be written out in
  //  full. If you rely on the filesystem accepting the message in a single
  //  write, make sure that all data that belongs together is written in one
  //  operation. This can be done by concatenating strings before passing them
  //  to [`write()`].
  //
  //  If a file is opened with both read and append access, beware that after
  //  opening, and after every write, the position for reading may be set at the
  //  end of the file. So, before writing, save the current position (using
  //  <code>[Seek]::[stream_position]</code>), and restore it before the next
  //  read.
  //
  //  ## Note
  //
  //  This function doesn't create the file if it doesn't exist. Use the
  //  [`OpenOptions::create`] method to do so.
  //
  //  [`write()`]: Write::write "io::Write::write"
  //  [`flush()`]: Write::flush "io::Write::flush"
  //  [stream_position]: Seek::stream_position "io::Seek::stream_position"
  //  [seek]: Seek::seek "io::Seek::seek"
  //  [Current]: SeekFrom::Current "io::SeekFrom::Current"
  //  [End]: SeekFrom::End "io::SeekFrom::End"
  //
  //  # Examples
  //
  //  ```no_run
  //  use std::fs::OpenOptions;
  //
  //  let file = OpenOptions::new().append(true).open("foo.txt");
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=1846
  ::rs::std::fs::OpenOptions& $(__anon1) append(bool append) &
      $(__anon1) CRUBIT_LIFETIME_BOUND;

  //  Sets the option for truncating a previous file.
  //
  //  If a file is successfully opened with this option set to true, it will
  //  truncate the file to 0 length if it already exists.
  //
  //  The file must be opened with write access for truncate to work.
  //
  //  # Examples
  //
  //  ```no_run
  //  use std::fs::OpenOptions;
  //
  //  let file = OpenOptions::new().write(true).truncate(true).open("foo.txt");
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=1866
  ::rs::std::fs::OpenOptions& $(__anon1) truncate(bool truncate) &
      $(__anon1) CRUBIT_LIFETIME_BOUND;

  //  Sets the option to create a new file, or open it if it already exists.
  //
  //  In order for the file to be created, [`OpenOptions::write`] or
  //  [`OpenOptions::append`] access must be used.
  //
  //  See also [`std::fs::write()`][self::write] for a simple function to
  //  create a file with some given data.
  //
  //  # Errors
  //
  //  If `.create(true)` is set without `.write(true)` or `.append(true)`,
  //  calling [`open`](Self::open) will fail with
  //  [`InvalidInput`](io::ErrorKind::InvalidInput) error. # Examples
  //
  //  ```no_run
  //  use std::fs::OpenOptions;
  //
  //  let file = OpenOptions::new().write(true).create(true).open("foo.txt");
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=1891
  ::rs::std::fs::OpenOptions& $(__anon1) create(bool create) &
      $(__anon1) CRUBIT_LIFETIME_BOUND;

  //  Sets the option to create a new file, failing if it already exists.
  //
  //  No file is allowed to exist at the target location, also no (dangling)
  //  symlink. In this way, if the call succeeds, the file returned is
  //  guaranteed to be new. If a file exists at the target location, creating a
  //  new file will fail with [`AlreadyExists`] or another error based on the
  //  situation. See [`OpenOptions::open`] for a non-exhaustive list of likely
  //  errors.
  //
  //  This option is useful because it is atomic. Otherwise between checking
  //  whether a file exists and creating a new one, the file may have been
  //  created by another process (a [TOCTOU] race condition / attack).
  //
  //  If `.create_new(true)` is set, [`.create()`] and [`.truncate()`] are
  //  ignored.
  //
  //  The file must be opened with write or append access in order to create
  //  a new file.
  //
  //  [`.create()`]: OpenOptions::create
  //  [`.truncate()`]: OpenOptions::truncate
  //  [`AlreadyExists`]: io::ErrorKind::AlreadyExists
  //  [TOCTOU]: self#time-of-check-to-time-of-use-toctou
  //
  //  # Examples
  //
  //  ```no_run
  //  use std::fs::OpenOptions;
  //
  //  let file = OpenOptions::new().write(true)
  //                               .create_new(true)
  //                               .open("foo.txt");
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=1929
  ::rs::std::fs::OpenOptions& $(__anon1) create_new(bool create_new) &
      $(__anon1) CRUBIT_LIFETIME_BOUND;

  // Error generating bindings for associated function `fs::OpenOptions::open`
  // defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=1978:
  // Error handling parameter #1 of type `&path::Path`: Failed to format the
  // referent of the reference type `&path::Path`: Failed to format type for the
  // definition of `path::Path`: Bindings for dynamically sized types are not
  // supported.

 private:
  // Field type has been replaced with a blob of bytes: Not a public or a
  // supported reexported type (b/262052635).
  ::std::array<unsigned char, 16> __field0;

 private:
  static void __crubit_field_offset_assertions();
};

//  Representation of the various permissions on a file.
//
//  This module only currently provides one bit of information,
//  [`Permissions::readonly`], which is exposed on all currently supported
//  platforms. Unix-specific functionality, such as mode bits, is available
//  through the [`PermissionsExt`] trait.
//
//  [`PermissionsExt`]: crate::os::unix::fs::PermissionsExt
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=294
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: fs :: Permissions") alignas(4)
    [[clang::trivial_abi]] Permissions final {
 public:
  // `std::fs::Permissions` doesn't implement the `Default` trait
  Permissions() = delete;

  // No custom `Drop` impl and no custom "drop glue" required
  ~Permissions() = default;
  Permissions(Permissions&&) = default;
  Permissions& operator=(Permissions&&) = default;

  // Clone::clone
  Permissions(const Permissions&);

  // Clone::clone_from
  ::rs::std::fs::Permissions& operator=(const Permissions&);

  Permissions(::crubit::UnsafeRelocateTag, Permissions&& value);

  //  Returns `true` if these permissions describe a readonly (unwritable) file.
  //
  //  # Note
  //
  //  This function does not take Access Control Lists (ACLs), Unix group
  //  membership and other nuances into account.
  //  Therefore the return value of this function cannot be relied upon
  //  to predict whether attempts to read or write the file will actually
  //  succeed.
  //
  //  # Windows
  //
  //  On Windows this returns
  //  [`FILE_ATTRIBUTE_READONLY`](https://docs.microsoft.com/en-us/windows/win32/fileio/file-attribute-constants).
  //  If `FILE_ATTRIBUTE_READONLY` is set then writes to the file will fail
  //  but the user may still have permission to change this flag. If
  //  `FILE_ATTRIBUTE_READONLY` is *not* set then writes may still fail due
  //  to lack of write permission.
  //  The behavior of this attribute for directories depends on the Windows
  //  version.
  //
  //  # Unix (including macOS)
  //
  //  On Unix-based platforms this checks if *any* of the owner, group or others
  //  write permission bits are set. It does not consider anything else,
  //  including:
  //
  //  * Whether the current user is in the file's assigned group.
  //  * Permissions granted by ACL.
  //  * That `root` user can write to files that do not have any write bits set.
  //  * Writable files on a filesystem that is mounted read-only.
  //
  //  The [`PermissionsExt`] trait gives direct access to the permission bits
  //  but also does not read ACLs.
  //
  //  [`PermissionsExt`]: crate::os::unix::fs::PermissionsExt
  //
  //  # Examples
  //
  //  ```no_run
  //  use std::fs::File;
  //
  //  fn main() -> std::io::Result<()> {
  //      let mut f = File::create("foo.txt")?;
  //      let metadata = f.metadata()?;
  //
  //      assert_eq!(false, metadata.permissions().readonly());
  //      Ok(())
  //  }
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=2361
  [[nodiscard("call `set_readonly` to modify the readonly flag")]] bool
  readonly() const;

  //  Modifies the readonly flag for this set of permissions. If the
  //  `readonly` argument is `true`, using the resulting `Permission` will
  //  update file permissions to forbid writing. Conversely, if it's `false`,
  //  using the resulting `Permission` will update file permissions to allow
  //  writing.
  //
  //  This operation does **not** modify the files attributes. This only
  //  changes the in-memory value of these attributes for this `Permissions`
  //  instance. To modify the files attributes use the [`set_permissions`]
  //  function which commits these attribute changes to the file.
  //
  //  # Note
  //
  //  `set_readonly(false)` makes the file *world-writable* on Unix.
  //  You can use the [`PermissionsExt`] trait on Unix to avoid this issue.
  //
  //  It also does not take Access Control Lists (ACLs) or Unix group
  //  membership into account.
  //
  //  # Windows
  //
  //  On Windows this sets or clears
  //  [`FILE_ATTRIBUTE_READONLY`](https://docs.microsoft.com/en-us/windows/win32/fileio/file-attribute-constants).
  //  If `FILE_ATTRIBUTE_READONLY` is set then writes to the file will fail
  //  but the user may still have permission to change this flag. If
  //  `FILE_ATTRIBUTE_READONLY` is *not* set then the write may still fail if
  //  the user does not have permission to write to the file.
  //
  //  In Windows 7 and earlier this attribute prevents deleting empty
  //  directories. It does not prevent modifying the directory contents.
  //  On later versions of Windows this attribute is ignored for directories.
  //
  //  # Unix (including macOS)
  //
  //  On Unix-based platforms this sets or clears the write access bit for
  //  the owner, group *and* others, equivalent to `chmod a+w <file>`
  //  or `chmod a-w <file>` respectively. The latter will grant write access
  //  to all users! You can use the [`PermissionsExt`] trait on Unix
  //  to avoid this issue.
  //
  //  [`PermissionsExt`]: crate::os::unix::fs::PermissionsExt
  //
  //  # Examples
  //
  //  ```no_run
  //  use std::fs::File;
  //
  //  fn main() -> std::io::Result<()> {
  //      let f = File::create("foo.txt")?;
  //      let metadata = f.metadata()?;
  //      let mut permissions = metadata.permissions();
  //
  //      permissions.set_readonly(true);
  //
  //      // filesystem doesn't change, only the in memory state of the
  //      // readonly permission
  //      assert_eq!(false, metadata.permissions().readonly());
  //
  //      // just this particular `permissions`.
  //      assert_eq!(true, permissions.readonly());
  //      Ok(())
  //  }
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=2428
  void set_readonly(bool readonly);

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=291
  bool operator==(::rs::std::fs::Permissions const& other) const;

 private:
  // Field type has been replaced with a blob of bytes: Not a public or a
  // supported reexported type (b/262052635).
  ::std::array<unsigned char, 4> __field0;

 private:
  static void __crubit_field_offset_assertions();
};

//  Iterator over the entries in a directory.
//
//  This iterator is returned from the [`read_dir`] function of this module and
//  will yield instances of <code>[io::Result]<[DirEntry]></code>. Through a
//  [`DirEntry`] information like the entry's path and possibly other metadata
//  can be learned.
//
//  The order in which this iterator returns entries is platform and filesystem
//  dependent.
//
//  # Errors
//  This [`io::Result`] will be an [`Err`] if an error occurred while fetching
//  the next entry from the OS.
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=217
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: fs :: ReadDir") alignas(8)
    [[clang::trivial_abi]] ReadDir final {
 public:
  // `std::fs::ReadDir` doesn't implement the `Default` trait
  ReadDir() = delete;

  // Drop::drop
  ~ReadDir();

  // C++ move operations are unavailable for this type. See
  // http://crubit.rs/rust/movable_types for an explanation of Rust types that
  // are C++ movable.
  ReadDir(ReadDir&&) = delete;
  ::rs::std::fs::ReadDir& operator=(ReadDir&&) = delete;
  // `std::fs::ReadDir` doesn't implement the `Clone` trait
  ReadDir(const ReadDir&) = delete;
  ReadDir& operator=(const ReadDir&) = delete;
  ReadDir(::crubit::UnsafeRelocateTag, ReadDir&& value);
  template <typename TAdaptedSelf_ = ReadDir>
  inline rs::IteratorAdapter<TAdaptedSelf_*> begin() & {
    return rs::IteratorAdapter<TAdaptedSelf_*>(this);
  }
  inline rs::IteratorEnd end() & { return rs::IteratorEnd(); }

 private:
  // Field type has been replaced with a blob of bytes: Not a public or a
  // supported reexported type (b/262052635).
  ::std::array<unsigned char, 16> __field0;

 private:
  static void __crubit_field_offset_assertions();
};

//  An enumeration of possible errors which can occur while trying to acquire a
//  lock from the [`try_lock`] method and [`try_lock_shared`] method on a
//  [`File`].
//
//  [`try_lock`]: File::try_lock
//  [`try_lock_shared`]: File::try_lock_shared
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=145
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: fs :: TryLockError") alignas(8)
    [[clang::trivial_abi]] TryLockError final {
 public:
  // `std::fs::TryLockError` doesn't implement the `Default` trait
  TryLockError() = delete;

  // Error generating bindings for variant `fs::TryLockError::Error` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=150:
  // Field `0` is not movable in C++

  //  The lock could not be acquired at this time because it is held by another
  //  handle/process.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=152
  static TryLockError MakeWouldBlock();

  // Drop::drop
  ~TryLockError();

  // C++ move operations are unavailable for this type. See
  // http://crubit.rs/rust/movable_types for an explanation of Rust types that
  // are C++ movable.
  TryLockError(TryLockError&&) = delete;
  ::rs::std::fs::TryLockError& operator=(TryLockError&&) = delete;
  // `std::fs::TryLockError` doesn't implement the `Clone` trait
  TryLockError(const TryLockError&) = delete;
  TryLockError& operator=(const TryLockError&) = delete;
  TryLockError(::crubit::UnsafeRelocateTag, TryLockError&& value);

  // AbslStringify and std::ostream support via std::fmt::Display
  template <typename Sink, typename Str = rs::alloc::string::String>
  friend void AbslStringify(Sink& sink, const TryLockError& self) {
    crubit::Slot<Str> s;
    __crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std2fs12TryLockErrorNtNtCsaddbpR6HRqH_u5alloc6string8ToString9to_ustringB6_u(
        self, s.Get());
    AbslStringify(sink, ::std::move(s).AssumeInitAndTakeValue().as_str());
  }
  template <typename Str = rs::alloc::string::String>
  friend ::std::ostream& operator<<(::std::ostream& os,
                                    const TryLockError& self) {
    crubit::Slot<Str> s;
    __crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std2fs12TryLockErrorNtNtCsaddbpR6HRqH_u5alloc6string8ToString9to_ustringB6_u(
        self, s.Get());
    return os << ::std::string_view(
               ::std::move(s).AssumeInitAndTakeValue().as_str());
  }

 private:
  // Field type has been replaced with a blob of bytes: No support for bindings
  // of individual non-repr(C) `enum`s
  ::std::array<unsigned char, 8> __opaque_blob_of_bytes;

 private:
  struct PrivateBytesTag {};
  constexpr TryLockError(PrivateBytesTag, ::std::array<unsigned char, 8> bytes)
      : __opaque_blob_of_bytes(bytes) {}

 private:
  static void __crubit_field_offset_assertions();
};

// Error generating bindings for function `fs::canonicalize` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=3110:
// Error handling parameter #0 of type `&path::Path`: Failed to format the
// referent of the reference type `&path::Path`: Failed to format type for the
// definition of `path::Path`: Bindings for dynamically sized types are not
// supported.

// Error generating bindings for function `fs::copy` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=2955:
// Error handling parameter #0 of type `&path::Path`: Failed to format the
// referent of the reference type `&path::Path`: Failed to format type for the
// definition of `path::Path`: Bindings for dynamically sized types are not
// supported.

// Error generating bindings for function `fs::create_dir` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=3152:
// Error formatting function return type `core::result::Result<(),
// core::io::Error>`: Generic types are not supported yet (b/259749095)

// Error generating bindings for function `fs::create_dir_all` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=3198:
// Error formatting function return type `core::result::Result<(),
// core::io::Error>`: Generic types are not supported yet (b/259749095)

// Error generating bindings for function `fs::exists` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=3646:
// Error handling parameter #0 of type `&path::Path`: Failed to format the
// referent of the reference type `&path::Path`: Failed to format type for the
// definition of `path::Path`: Bindings for dynamically sized types are not
// supported.

// Error generating bindings for function `fs::hard_link` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=3001:
// Error formatting function return type `core::result::Result<(),
// core::io::Error>`: Generic types are not supported yet (b/259749095)

// Error generating bindings for function `fs::metadata` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=2804:
// Error handling parameter #0 of type `&path::Path`: Failed to format the
// referent of the reference type `&path::Path`: Failed to format type for the
// definition of `path::Path`: Bindings for dynamically sized types are not
// supported.

// Error generating bindings for function `fs::read` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=341:
// Error handling parameter #0 of type `&path::Path`: Failed to format the
// referent of the reference type `&path::Path`: Failed to format type for the
// definition of `path::Path`: Bindings for dynamically sized types are not
// supported.

// Error generating bindings for function `fs::read_dir` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=3386:
// Error handling parameter #0 of type `&path::Path`: Failed to format the
// referent of the reference type `&path::Path`: Failed to format type for the
// definition of `path::Path`: Bindings for dynamically sized types are not
// supported.

// Error generating bindings for function `fs::read_link` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=3067:
// Error handling parameter #0 of type `&path::Path`: Failed to format the
// referent of the reference type `&path::Path`: Failed to format type for the
// definition of `path::Path`: Bindings for dynamically sized types are not
// supported.

// Error generating bindings for function `fs::read_to_string` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=383:
// Error handling parameter #0 of type `&path::Path`: Failed to format the
// referent of the reference type `&path::Path`: Failed to format type for the
// definition of `path::Path`: Bindings for dynamically sized types are not
// supported.

// Error generating bindings for function `fs::remove_dir` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=3243:
// Error formatting function return type `core::result::Result<(),
// core::io::Error>`: Generic types are not supported yet (b/259749095)

// Error generating bindings for function `fs::remove_dir_all` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=3307:
// Error formatting function return type `core::result::Result<(),
// core::io::Error>`: Generic types are not supported yet (b/259749095)

// Error generating bindings for function `fs::remove_file` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=2763:
// Error formatting function return type `core::result::Result<(),
// core::io::Error>`: Generic types are not supported yet (b/259749095)

// Error generating bindings for function `fs::rename` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=2892:
// Error formatting function return type `core::result::Result<(),
// core::io::Error>`: Generic types are not supported yet (b/259749095)

// Error generating bindings for function `fs::set_permissions` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=3437:
// Error formatting function return type `core::result::Result<(),
// core::io::Error>`: Generic types are not supported yet (b/259749095)

// Error generating bindings for function `fs::set_times` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=462:
// Error formatting function return type `core::result::Result<(),
// core::io::Error>`: Generic types are not supported yet (b/259749095)

// Error generating bindings for function `fs::set_times_nofollow` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=502:
// Error formatting function return type `core::result::Result<(),
// core::io::Error>`: Generic types are not supported yet (b/259749095)

// Error generating bindings for function `fs::soft_link` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=3033:
// Error formatting function return type `core::result::Result<(),
// core::io::Error>`: Generic types are not supported yet (b/259749095)

// Error generating bindings for function `fs::symlink_metadata` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=2844:
// Error handling parameter #0 of type `&path::Path`: Failed to format the
// referent of the reference type `&path::Path`: Failed to format type for the
// definition of `path::Path`: Bindings for dynamically sized types are not
// supported.

// Error generating bindings for function `fs::write` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=420:
// Error formatting function return type `core::result::Result<(),
// core::io::Error>`: Generic types are not supported yet (b/259749095)

}  // namespace rs::std::fs

namespace rs::std::hash {

//  The default [`Hasher`] used by [`RandomState`].
//
//  The internal algorithm is not specified, and so it and its hashes should
//  not be relied upon over releases.
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/hash/random.rs;l=94
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: hash :: DefaultHasher") alignas(8)
    [[clang::trivial_abi]] DefaultHasher final {
 public:
  // Default::default
  DefaultHasher();

  // No custom `Drop` impl and no custom "drop glue" required
  ~DefaultHasher() = default;
  DefaultHasher(DefaultHasher&&) = default;
  DefaultHasher& operator=(DefaultHasher&&) = default;

  // Clone::clone
  DefaultHasher(const DefaultHasher&);

  // Clone::clone_from
  ::rs::std::hash::DefaultHasher& operator=(const DefaultHasher&);

  DefaultHasher(::crubit::UnsafeRelocateTag, DefaultHasher&& value);

  //  Creates a new `DefaultHasher`.
  //
  //  This hasher is not guaranteed to be the same as all other
  //  `DefaultHasher` instances, but is the same as all other `DefaultHasher`
  //  instances created through `new` or `default`.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/hash/random.rs;l=106
  [[nodiscard]] static ::rs::std::hash::DefaultHasher new_();

 private:
  // Field type has been replaced with a blob of bytes: Not a public or a
  // supported reexported type (b/262052635).
  ::std::array<unsigned char, 72> __field0;

 private:
  static void __crubit_field_offset_assertions();
};

//  `RandomState` is the default state for [`HashMap`] types.
//
//  A particular instance `RandomState` will create the same instances of
//  [`Hasher`], but the hashers created by two different `RandomState`
//  instances are unlikely to produce the same result for the same values.
//
//  [`HashMap`]: crate::collections::HashMap
//
//  # Examples
//
//  ```
//  use std::collections::HashMap;
//  use std::hash::RandomState;
//
//  let s = RandomState::new();
//  let mut map = HashMap::with_hasher(s);
//  map.insert(1, 2);
//  ```
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/hash/random.rs;l=35
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: hash :: RandomState") alignas(8)
    [[clang::trivial_abi]] RandomState final {
 public:
  // Default::default
  RandomState();

  // No custom `Drop` impl and no custom "drop glue" required
  ~RandomState() = default;
  RandomState(RandomState&&) = default;
  RandomState& operator=(RandomState&&) = default;

  // Clone::clone
  RandomState(const RandomState&);

  // Clone::clone_from
  ::rs::std::hash::RandomState& operator=(const RandomState&);

  RandomState(::crubit::UnsafeRelocateTag, RandomState&& value);

  //  Constructs a new `RandomState` that is initialized with random keys.
  //
  //  # Examples
  //
  //  ```
  //  use std::hash::RandomState;
  //
  //  let s = RandomState::new();
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/hash/random.rs;l=55
  [[nodiscard]] static ::rs::std::hash::RandomState new_();

 private:
  union {
    // Generated from:
    // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/hash/random.rs;l=36
    ::std::uint64_t k0;
  };
  union {
    // Generated from:
    // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/hash/random.rs;l=37
    ::std::uint64_t k1;
  };

 private:
  static void __crubit_field_offset_assertions();
};

}  // namespace rs::std::hash

namespace rs::std::io {

//  Read end of an anonymous pipe.
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/pipe.rs;l=90
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: io :: PipeReader") alignas(4)
    [[clang::trivial_abi]] PipeReader final {
 public:
  // `std::io::PipeReader` doesn't implement the `Default` trait
  PipeReader() = delete;

  // Drop::drop
  ~PipeReader();

  // C++ move operations are unavailable for this type. See
  // http://crubit.rs/rust/movable_types for an explanation of Rust types that
  // are C++ movable.
  PipeReader(PipeReader&&) = delete;
  ::rs::std::io::PipeReader& operator=(PipeReader&&) = delete;
  // `std::io::PipeReader` doesn't implement the `Clone` trait
  PipeReader(const PipeReader&) = delete;
  PipeReader& operator=(const PipeReader&) = delete;
  PipeReader(::crubit::UnsafeRelocateTag, PipeReader&& value);

  //  Creates a new [`PipeReader`] instance that shares the same underlying file
  //  description.
  //
  //  # Examples
  //
  //  ```no_run
  //  # fn main() -> std::io::Result<()> {
  //  use std::fs;
  //  use std::io::{pipe, Write};
  //  use std::process::Command;
  //  const NUM_SLOT: u8 = 2;
  //  const NUM_PROC: u8 = 5;
  //  const OUTPUT: &str = "work.txt";
  //
  //  let mut jobs = vec![];
  //  let (reader, mut writer) = pipe()?;
  //
  //  // Write NUM_SLOT characters the pipe.
  //  writer.write_all(&[b'|'; NUM_SLOT as usize])?;
  //
  //  // Spawn several processes that read a character from the pipe, do some
  //  work, then
  //  // write back to the pipe. When the pipe is empty, the processes block, so
  //  only
  //  // NUM_SLOT processes can be working at any given time.
  //  for _ in 0..NUM_PROC {
  //      jobs.push(
  //          Command::new("bash")
  //              .args(["-c",
  //                  &format!(
  //                       "read -n 1\
  // \\
  //                        echo -n 'x' >> '{OUTPUT}'\
  // \\
  //                        echo -n '|'",
  //                  ),
  //              ])
  //              .stdin(reader.try_clone()?)
  //              .stdout(writer.try_clone()?)
  //              .spawn()?,
  //      );
  //  }
  //
  //  // Wait for all jobs to finish.
  //  for mut job in jobs {
  //      job.wait()?;
  //  }
  //
  //  // Check our work and clean up.
  //  let xs = fs::read_to_string(OUTPUT)?;
  //  fs::remove_file(OUTPUT)?;
  //  assert_eq!(xs, "x".repeat(NUM_PROC.into()));
  //  # Ok(())
  //  # }
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/pipe.rs;l=173
  rs_std::Result<::rs::std::io::PipeReader, ::rs::std::io::Error> try_clone()
      const;

 private:
  // Field type has been replaced with a blob of bytes: Not a public or a
  // supported reexported type (b/262052635).
  ::std::array<unsigned char, 4> __field0;

 private:
  static void __crubit_field_offset_assertions();
};

//  Write end of an anonymous pipe.
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/pipe.rs;l=95
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: io :: PipeWriter") alignas(4)
    [[clang::trivial_abi]] PipeWriter final {
 public:
  // `std::io::PipeWriter` doesn't implement the `Default` trait
  PipeWriter() = delete;

  // Drop::drop
  ~PipeWriter();

  // C++ move operations are unavailable for this type. See
  // http://crubit.rs/rust/movable_types for an explanation of Rust types that
  // are C++ movable.
  PipeWriter(PipeWriter&&) = delete;
  ::rs::std::io::PipeWriter& operator=(PipeWriter&&) = delete;
  // `std::io::PipeWriter` doesn't implement the `Clone` trait
  PipeWriter(const PipeWriter&) = delete;
  PipeWriter& operator=(const PipeWriter&) = delete;
  PipeWriter(::crubit::UnsafeRelocateTag, PipeWriter&& value);

  //  Creates a new [`PipeWriter`] instance that shares the same underlying file
  //  description.
  //
  //  # Examples
  //
  //  ```no_run
  //  # fn main() -> std::io::Result<()> {
  //  use std::process::Command;
  //  use std::io::{pipe, Read};
  //  let (mut reader, writer) = pipe()?;
  //
  //  // Spawn a process that writes to stdout and stderr.
  //  let mut peer = Command::new("bash")
  //      .args([
  //          "-c",
  //          "echo -n foo\
  // \\
  //           echo -n bar >&2"
  //      ])
  //      .stdout(writer.try_clone()?)
  //      .stderr(writer)
  //      .spawn()?;
  //
  //  // Read and check the result.
  //  let mut msg = String::new();
  //  reader.read_to_string(&mut msg)?;
  //  assert_eq!(&msg, "foobar");
  //
  //  peer.wait()?;
  //  # Ok(())
  //  # }
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/pipe.rs;l=210
  rs_std::Result<::rs::std::io::PipeWriter, ::rs::std::io::Error> try_clone()
      const;

 private:
  // Field type has been replaced with a blob of bytes: Not a public or a
  // supported reexported type (b/262052635).
  ::std::array<unsigned char, 4> __field0;

 private:
  static void __crubit_field_offset_assertions();
};

//  Creates an anonymous pipe.
//
//  # Behavior
//
//  A pipe is a one-way data channel provided by the OS, which works across
//  processes. A pipe is typically used to communicate between two or more
//  separate processes, as there are better, faster ways to communicate within a
//  single process.
//
//  In particular:
//
//  * A read on a [`PipeReader`] blocks until the pipe is non-empty.
//  * A write on a [`PipeWriter`] blocks when the pipe is full.
//  * When all copies of a [`PipeWriter`] are closed, a read on the
//  corresponding [`PipeReader`]
//    returns EOF.
//  * [`PipeWriter`] can be shared, and multiple processes or threads can write
//  to it at once, but
//    writes (above a target-specific threshold) may have their data
//    interleaved.
//  * [`PipeReader`] can be shared, and multiple processes or threads can read
//  it at once. Any
//    given byte will only get consumed by one reader. There are no guarantees
//    about data interleaving.
//  * Portable applications cannot assume any atomicity of messages larger than
//  a single byte.
//
//  # Platform-specific behavior
//
//  This function currently corresponds to the `pipe` function on Unix and the
//  `CreatePipe` function on Windows.
//
//  Note that this [may change in the future][changes].
//
//  # Capacity
//
//  Pipe capacity is platform dependent. To quote the Linux [man page]:
//
//  > Different implementations have different limits for the pipe capacity.
//  Applications should > not rely on a particular capacity: an application
//  should be designed so that a reading process > consumes data as soon as it
//  is available, so that a writing process does not remain blocked.
//
//  # Example
//
//  ```no_run
//  # fn main() -> std::io::Result<()> {
//  use std::io::{Read, Write, pipe};
//  use std::process::Command;
//  let (ping_reader, mut ping_writer) = pipe()?;
//  let (mut pong_reader, pong_writer) = pipe()?;
//
//  // Spawn a child process that echoes its input.
//  let mut echo_command = Command::new("cat");
//  echo_command.stdin(ping_reader);
//  echo_command.stdout(pong_writer);
//  let mut echo_child = echo_command.spawn()?;
//
//  // Send input to the child process. Note that because we're writing all the
//  input before we
//  // read any output, this could deadlock if the child's input and output pipe
//  buffers both
//  // filled up. Those buffers are usually at least a few KB, so "hello" is
//  fine, but for longer
//  // inputs we'd need to read and write at the same time, e.g. using threads.
//  ping_writer.write_all(b"hello")?;
//
//  // `cat` exits when it reads EOF from stdin, but that can't happen while any
//  ping writer
//  // remains open. We need to drop our ping writer, or read_to_string will
//  deadlock below. drop(ping_writer);
//
//  // The pong reader can't report EOF while any pong writer remains open. Our
//  Command object is
//  // holding a pong writer, and again read_to_string will deadlock if we don't
//  drop it. drop(echo_command);
//
//  let mut buf = String::new();
//  // Block until `cat` closes its stdout (a pong writer).
//  pong_reader.read_to_string(&mut buf)?;
//  assert_eq!(&buf, "hello");
//
//  // At this point we know `cat` has exited, but we still need to wait to
//  clean up the "zombie". echo_child.wait()?; # Ok(()) # }
//  ```
//  [changes]: io#platform-specific-behavior
//  [man page]: https://man7.org/linux/man-pages/man7/pipe.7.html
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/pipe.rs;l=83
rs_std::Result<
    rs_std::Tuple<::rs::std::io::PipeReader, ::rs::std::io::PipeWriter>,
    ::rs::std::io::Error>
pipe();

}  // namespace rs::std::io

namespace rs::std::io {

//  Trait to determine if a descriptor/handle refers to a terminal/tty.
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/stdio.rs;l=1200
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: io :: IsTerminal") IsTerminal {
  template <typename T>
  using impl = rs_std::impl<T, IsTerminal>;
};

//  A handle to the standard error stream of a process.
//
//  For more information, see the [`io::stderr`] method.
//
//  [`io::stderr`]: stderr
//
//  ### Note: Windows Portability Considerations
//
//  When operating in a console, the Windows implementation of this stream does
//  not support non-UTF-8 byte sequences. Attempting to write bytes that are not
//  valid UTF-8 will return an error.
//
//  In a process with a detached console, such as one using
//  `#![windows_subsystem = "windows"]`, or in a child process spawned from such
//  a process, the contained handle will be null. In such cases, the standard
//  library's `Read` and `Write` will do nothing and silently succeed. All other
//  I/O operations, via the standard library or via raw Windows API calls, will
//  fail.
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/stdio.rs;l=895
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: io :: Stderr") alignas(8)
    [[clang::trivial_abi]] Stderr final {
 public:
  // `std::io::Stderr` doesn't implement the `Default` trait
  Stderr() = delete;

  // No custom `Drop` impl and no custom "drop glue" required
  ~Stderr() = default;
  Stderr(Stderr&&) = default;
  Stderr& operator=(Stderr&&) = default;

  // `std::io::Stderr` doesn't implement the `Clone` trait
  Stderr(const Stderr&) = delete;
  Stderr& operator=(const Stderr&) = delete;
  Stderr(::crubit::UnsafeRelocateTag, Stderr&& value);

  //  Locks this handle to the standard error stream, returning a writable
  //  guard.
  //
  //  The lock is released when the returned lock goes out of scope. The
  //  returned guard also implements the [`Write`] trait for writing data.
  //
  //  # Examples
  //
  //  ```
  //  use std::io::{self, Write};
  //
  //  fn foo() -> io::Result<()> {
  //      let stderr = io::stderr();
  //      let mut handle = stderr.lock();
  //
  //      handle.write_all(b"hello world")?;
  //
  //      Ok(())
  //  }
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/stdio.rs;l=1000
  ::rs::std::io::StderrLock lock() const;

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=1858
  explicit operator ::rs::std::process::Stdio();

 private:
  // Field type has been replaced with a blob of bytes: Failed to format the
  // referent of the reference type `&'static
  // sync::reentrant_lock::ReentrantLock<core::cell::RefCell<io::stdio::StderrRaw>>`:
  // Generic types are not supported yet (b/259749095)
  ::std::array<unsigned char, 8> inner;

 private:
  static void __crubit_field_offset_assertions();
};

//  A locked reference to the [`Stderr`] handle.
//
//  This handle implements the [`Write`] trait and is constructed via
//  the [`Stderr::lock`] method. See its documentation for more.
//
//  ### Note: Windows Portability Considerations
//
//  When operating in a console, the Windows implementation of this stream does
//  not support non-UTF-8 byte sequences. Attempting to write bytes that are not
//  valid UTF-8 will return an error.
//
//  In a process with a detached console, such as one using
//  `#![windows_subsystem = "windows"]`, or in a child process spawned from such
//  a process, the contained handle will be null. In such cases, the standard
//  library's `Read` and `Write` will do nothing and silently succeed. All other
//  I/O operations, via the standard library or via raw Windows API calls, will
//  fail.
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/stdio.rs;l=917
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: io :: StderrLock") alignas(8)
    [[clang::trivial_abi]] [[nodiscard(
        "if unused stderr will immediately unlock")]] StderrLock final {
 public:
  // `std::io::StderrLock` doesn't implement the `Default` trait
  StderrLock() = delete;

  // Drop::drop
  ~StderrLock();

  // C++ move operations are unavailable for this type. See
  // http://crubit.rs/rust/movable_types for an explanation of Rust types that
  // are C++ movable.
  StderrLock(StderrLock&&) = delete;
  ::rs::std::io::StderrLock& operator=(StderrLock&&) = delete;
  // `std::io::StderrLock` doesn't implement the `Clone` trait
  StderrLock(const StderrLock&) = delete;
  StderrLock& operator=(const StderrLock&) = delete;
  StderrLock(::crubit::UnsafeRelocateTag, StderrLock&& value);

 private:
  // Field type has been replaced with a blob of bytes: Generic types are not
  // supported yet (b/259749095)
  ::std::array<unsigned char, 8> inner;

 private:
  static void __crubit_field_offset_assertions();
};

//  A handle to the standard input stream of a process.
//
//  Each handle is a shared reference to a global buffer of input data to this
//  process. A handle can be `lock`'d to gain full access to [`BufRead`] methods
//  (e.g., `.lines()`). Reads to this handle are otherwise locked with respect
//  to other reads.
//
//  This handle implements the `Read` trait, but beware that concurrent reads
//  of `Stdin` must be executed with care.
//
//  Created by the [`io::stdin`] method.
//
//  [`io::stdin`]: stdin
//
//  ### Note: Windows Portability Considerations
//
//  When operating in a console, the Windows implementation of this stream does
//  not support non-UTF-8 byte sequences. Attempting to read bytes that are not
//  valid UTF-8 will return an error.
//
//  In a process with a detached console, such as one using
//  `#![windows_subsystem = "windows"]`, or in a child process spawned from such
//  a process, the contained handle will be null. In such cases, the standard
//  library's `Read` and `Write` will do nothing and silently succeed. All other
//  I/O operations, via the standard library or via raw Windows API calls, will
//  fail.
//
//  # Examples
//
//  ```no_run
//  use std::io;
//
//  fn main() -> io::Result<()> {
//      let mut buffer = String::new();
//      let stdin = io::stdin(); // We get `Stdin` here.
//      stdin.read_line(&mut buffer)?;
//      Ok(())
//  }
//  ```
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/stdio.rs;l=250
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: io :: Stdin") alignas(8)
    [[clang::trivial_abi]] Stdin final {
 public:
  // `std::io::Stdin` doesn't implement the `Default` trait
  Stdin() = delete;

  // No custom `Drop` impl and no custom "drop glue" required
  ~Stdin() = default;
  Stdin(Stdin&&) = default;
  Stdin& operator=(Stdin&&) = default;

  // `std::io::Stdin` doesn't implement the `Clone` trait
  Stdin(const Stdin&) = delete;
  Stdin& operator=(const Stdin&) = delete;
  Stdin(::crubit::UnsafeRelocateTag, Stdin&& value);

  //  Locks this handle to the standard input stream, returning a readable
  //  guard.
  //
  //  The lock is released when the returned lock goes out of scope. The
  //  returned guard also implements the [`Read`] and [`BufRead`] traits for
  //  accessing the underlying data.
  //
  //  # Examples
  //
  //  ```no_run
  //  use std::io::{self, BufRead};
  //
  //  fn main() -> io::Result<()> {
  //      let mut buffer = String::new();
  //      let stdin = io::stdin();
  //      let mut handle = stdin.lock();
  //
  //      handle.read_line(&mut buffer)?;
  //      Ok(())
  //  }
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/stdio.rs;l=373
  ::rs::std::io::StdinLock lock() const;

  // Error generating bindings for associated function
  // `io::stdio::Stdin::read_line` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/stdio.rs;l=412:
  // Error formatting function return type `core::result::Result<usize,
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  // Error generating bindings for associated function `io::stdio::Stdin::lines`
  // defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/stdio.rs;l=433:
  // Error formatting function return type
  // `alloc_crate::io::Lines<io::stdio::StdinLock<'static>>`: Generic types are
  // not supported yet (b/259749095)

 private:
  // Field type has been replaced with a blob of bytes: Failed to format the
  // referent of the reference type `&'static
  // sync::poison::mutex::Mutex<alloc_crate::io::BufReader<io::stdio::StdinRaw>>`:
  // Generic types are not supported yet (b/259749095)
  ::std::array<unsigned char, 8> inner;

 private:
  static void __crubit_field_offset_assertions();
};

//  A locked reference to the [`Stdin`] handle.
//
//  This handle implements both the [`Read`] and [`BufRead`] traits, and
//  is constructed via the [`Stdin::lock`] method.
//
//  ### Note: Windows Portability Considerations
//
//  When operating in a console, the Windows implementation of this stream does
//  not support non-UTF-8 byte sequences. Attempting to read bytes that are not
//  valid UTF-8 will return an error.
//
//  In a process with a detached console, such as one using
//  `#![windows_subsystem = "windows"]`, or in a child process spawned from such
//  a process, the contained handle will be null. In such cases, the standard
//  library's `Read` and `Write` will do nothing and silently succeed. All other
//  I/O operations, via the standard library or via raw Windows API calls, will
//  fail.
//
//  # Examples
//
//  ```no_run
//  use std::io::{self, BufRead};
//
//  fn main() -> io::Result<()> {
//      let mut buffer = String::new();
//      let stdin = io::stdin(); // We get `Stdin` here.
//      {
//          let mut handle = stdin.lock(); // We get `StdinLock` here.
//          handle.read_line(&mut buffer)?;
//      } // `StdinLock` is dropped here.
//      Ok(())
//  }
//  ```
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/stdio.rs;l=289
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: io :: StdinLock") alignas(8)
    [[clang::trivial_abi]] [[nodiscard(
        "if unused stdin will immediately unlock")]] StdinLock final {
 public:
  // `std::io::StdinLock` doesn't implement the `Default` trait
  StdinLock() = delete;

  // Drop::drop
  ~StdinLock();

  // C++ move operations are unavailable for this type. See
  // http://crubit.rs/rust/movable_types for an explanation of Rust types that
  // are C++ movable.
  StdinLock(StdinLock&&) = delete;
  ::rs::std::io::StdinLock& operator=(StdinLock&&) = delete;
  // `std::io::StdinLock` doesn't implement the `Clone` trait
  StdinLock(const StdinLock&) = delete;
  StdinLock& operator=(const StdinLock&) = delete;
  StdinLock(::crubit::UnsafeRelocateTag, StdinLock&& value);

 private:
  // Field type has been replaced with a blob of bytes: Generic types are not
  // supported yet (b/259749095)
  ::std::array<unsigned char, 8> inner;

 private:
  static void __crubit_field_offset_assertions();
};

//  A handle to the global standard output stream of the current process.
//
//  Each handle shares a global buffer of data to be written to the standard
//  output stream. Access is also synchronized via a lock and explicit control
//  over locking is available via the [`lock`] method.
//
//  By default, the handle is line-buffered when connected to a terminal,
//  meaning
//  it flushes automatically when a newline (`\
// `) is encountered. For immediate
//  output, you can manually call the [`flush`] method. When the handle goes out
//  of scope, the buffer is automatically flushed.
//
//  Created by the [`io::stdout`] method.
//
//  ### Note: Windows Portability Considerations
//
//  When operating in a console, the Windows implementation of this stream does
//  not support non-UTF-8 byte sequences. Attempting to write bytes that are not
//  valid UTF-8 will return an error.
//
//  In a process with a detached console, such as one using
//  `#![windows_subsystem = "windows"]`, or in a child process spawned from such
//  a process, the contained handle will be null. In such cases, the standard
//  library's `Read` and `Write` will do nothing and silently succeed. All other
//  I/O operations, via the standard library or via raw Windows API calls, will
//  fail.
//
//  [`lock`]: Stdout::lock
//  [`flush`]: Write::flush
//  [`io::stdout`]: stdout
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/stdio.rs;l=611
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: io :: Stdout") alignas(8)
    [[clang::trivial_abi]] Stdout final {
 public:
  // `std::io::Stdout` doesn't implement the `Default` trait
  Stdout() = delete;

  // No custom `Drop` impl and no custom "drop glue" required
  ~Stdout() = default;
  Stdout(Stdout&&) = default;
  Stdout& operator=(Stdout&&) = default;

  // `std::io::Stdout` doesn't implement the `Clone` trait
  Stdout(const Stdout&) = delete;
  Stdout& operator=(const Stdout&) = delete;
  Stdout(::crubit::UnsafeRelocateTag, Stdout&& value);

  //  Locks this handle to the standard output stream, returning a writable
  //  guard.
  //
  //  The lock is released when the returned lock goes out of scope. The
  //  returned guard also implements the `Write` trait for writing data.
  //
  //  # Examples
  //
  //  ```no_run
  //  use std::io::{self, Write};
  //
  //  fn main() -> io::Result<()> {
  //      let mut stdout = io::stdout().lock();
  //
  //      stdout.write_all(b"hello world")?;
  //
  //      Ok(())
  //  }
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/stdio.rs;l=768
  ::rs::std::io::StdoutLock lock() const;

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=1827
  explicit operator ::rs::std::process::Stdio();

 private:
  // Field type has been replaced with a blob of bytes: Failed to format the
  // referent of the reference type `&'static
  // sync::reentrant_lock::ReentrantLock<core::cell::RefCell<alloc_crate::io::LineWriter<io::stdio::StdoutRaw>>>`:
  // Generic types are not supported yet (b/259749095)
  ::std::array<unsigned char, 8> inner;

 private:
  static void __crubit_field_offset_assertions();
};

//  A locked reference to the [`Stdout`] handle.
//
//  This handle implements the [`Write`] trait, and is constructed via
//  the [`Stdout::lock`] method. See its documentation for more.
//
//  By default, the handle is line-buffered when connected to a terminal,
//  meaning
//  it flushes automatically when a newline (`\
// `) is encountered. For immediate
//  output, you can manually call the [`flush`] method. When the handle goes out
//  of scope, the buffer is automatically flushed.
//
//  ### Note: Windows Portability Considerations
//
//  When operating in a console, the Windows implementation of this stream does
//  not support non-UTF-8 byte sequences. Attempting to write bytes that are not
//  valid UTF-8 will return an error.
//
//  In a process with a detached console, such as one using
//  `#![windows_subsystem = "windows"]`, or in a child process spawned from such
//  a process, the contained handle will be null. In such cases, the standard
//  library's `Read` and `Write` will do nothing and silently succeed. All other
//  I/O operations, via the standard library or via raw Windows API calls, will
//  fail.
//
//  [`flush`]: Write::flush
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/stdio.rs;l=643
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: io :: StdoutLock") alignas(8)
    [[clang::trivial_abi]] [[nodiscard(
        "if unused stdout will immediately unlock")]] StdoutLock final {
 public:
  // `std::io::StdoutLock` doesn't implement the `Default` trait
  StdoutLock() = delete;

  // Drop::drop
  ~StdoutLock();

  // C++ move operations are unavailable for this type. See
  // http://crubit.rs/rust/movable_types for an explanation of Rust types that
  // are C++ movable.
  StdoutLock(StdoutLock&&) = delete;
  ::rs::std::io::StdoutLock& operator=(StdoutLock&&) = delete;
  // `std::io::StdoutLock` doesn't implement the `Clone` trait
  StdoutLock(const StdoutLock&) = delete;
  StdoutLock& operator=(const StdoutLock&) = delete;
  StdoutLock(::crubit::UnsafeRelocateTag, StdoutLock&& value);

 private:
  // Field type has been replaced with a blob of bytes: Generic types are not
  // supported yet (b/259749095)
  ::std::array<unsigned char, 8> inner;

 private:
  static void __crubit_field_offset_assertions();
};

//  Constructs a new handle to the standard error of the current process.
//
//  This handle is not buffered.
//
//  ### Note: Windows Portability Considerations
//
//  When operating in a console, the Windows implementation of this stream does
//  not support non-UTF-8 byte sequences. Attempting to write bytes that are not
//  valid UTF-8 will return an error.
//
//  In a process with a detached console, such as one using
//  `#![windows_subsystem = "windows"]`, or in a child process spawned from such
//  a process, the contained handle will be null. In such cases, the standard
//  library's `Read` and `Write` will do nothing and silently succeed. All other
//  I/O operations, via the standard library or via raw Windows API calls, will
//  fail.
//
//  # Examples
//
//  Using implicit synchronization:
//
//  ```no_run
//  use std::io::{self, Write};
//
//  fn main() -> io::Result<()> {
//      io::stderr().write_all(b"hello world")?;
//
//      Ok(())
//  }
//  ```
//
//  Using explicit synchronization:
//
//  ```no_run
//  use std::io::{self, Write};
//
//  fn main() -> io::Result<()> {
//      let stderr = io::stderr();
//      let mut handle = stderr.lock();
//
//      handle.write_all(b"hello world")?;
//
//      Ok(())
//  }
//  ```
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/stdio.rs;l=968
[[nodiscard]] ::rs::std::io::Stderr stderr();

//  Constructs a new handle to the standard input of the current process.
//
//  Each handle returned is a reference to a shared global buffer whose access
//  is synchronized via a mutex. If you need more explicit control over
//  locking, see the [`Stdin::lock`] method.
//
//  ### Note: Windows Portability Considerations
//
//  When operating in a console, the Windows implementation of this stream does
//  not support non-UTF-8 byte sequences. Attempting to read bytes that are not
//  valid UTF-8 will return an error.
//
//  In a process with a detached console, such as one using
//  `#![windows_subsystem = "windows"]`, or in a child process spawned from such
//  a process, the contained handle will be null. In such cases, the standard
//  library's `Read` and `Write` will do nothing and silently succeed. All other
//  I/O operations, via the standard library or via raw Windows API calls, will
//  fail.
//
//  # Examples
//
//  Using implicit synchronization:
//
//  ```no_run
//  use std::io;
//
//  fn main() -> io::Result<()> {
//      let mut buffer = String::new();
//      io::stdin().read_line(&mut buffer)?;
//      Ok(())
//  }
//  ```
//
//  Using explicit synchronization:
//
//  ```no_run
//  use std::io::{self, BufRead};
//
//  fn main() -> io::Result<()> {
//      let mut buffer = String::new();
//      let stdin = io::stdin();
//      let mut handle = stdin.lock();
//
//      handle.read_line(&mut buffer)?;
//      Ok(())
//  }
//  ```
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/stdio.rs;l=341
[[nodiscard]] ::rs::std::io::Stdin stdin();

//  Constructs a new handle to the standard output of the current process.
//
//  Each handle returned is a reference to a shared global buffer whose access
//  is synchronized via a mutex. If you need more explicit control over
//  locking, see the [`Stdout::lock`] method.
//
//  By default, the handle is line-buffered when connected to a terminal,
//  meaning
//  it flushes automatically when a newline (`\
// `) is encountered. For immediate
//  output, you can manually call the [`flush`] method. When the handle goes out
//  of scope, the buffer is automatically flushed.
//
//  ### Note: Windows Portability Considerations
//
//  When operating in a console, the Windows implementation of this stream does
//  not support non-UTF-8 byte sequences. Attempting to write bytes that are not
//  valid UTF-8 will return an error.
//
//  In a process with a detached console, such as one using
//  `#![windows_subsystem = "windows"]`, or in a child process spawned from such
//  a process, the contained handle will be null. In such cases, the standard
//  library's `Read` and `Write` will do nothing and silently succeed. All other
//  I/O operations, via the standard library or via raw Windows API calls, will
//  fail.
//
//  # Examples
//
//  Using implicit synchronization:
//
//  ```no_run
//  use std::io::{self, Write};
//
//  fn main() -> io::Result<()> {
//      io::stdout().write_all(b"hello world")?;
//
//      Ok(())
//  }
//  ```
//
//  Using explicit synchronization:
//
//  ```no_run
//  use std::io::{self, Write};
//
//  fn main() -> io::Result<()> {
//      let stdout = io::stdout();
//      let mut handle = stdout.lock();
//
//      handle.write_all(b"hello world")?;
//
//      Ok(())
//  }
//  ```
//
//  Ensuring output is flushed immediately:
//
//  ```no_run
//  use std::io::{self, Write};
//
//  fn main() -> io::Result<()> {
//      let mut stdout = io::stdout();
//      stdout.write_all(b"hello, ")?;
//      stdout.flush()?;                // Manual flush
//      stdout.write_all(b"world!\
// ")?; // Automatically flushed
//      Ok(())
//  }
//  ```
//
//  [`flush`]: Write::flush
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/stdio.rs;l=719
[[nodiscard]] ::rs::std::io::Stdout stdout();

}  // namespace rs::std::io

namespace rs::std {

// Error generating bindings for macro `macros::dbg` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/macros.rs;l=358:
// Unsupported rustc_hir::hir::DefKind: Macro(MacroKinds(1))

// Error generating bindings for macro `macros::eprint` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/macros.rs;l=183:
// Unsupported rustc_hir::hir::DefKind: Macro(MacroKinds(1))

// Error generating bindings for macro `macros::eprintln` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/macros.rs;l=221:
// Unsupported rustc_hir::hir::DefKind: Macro(MacroKinds(1))

// Error generating bindings for macro `macros::panic` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/macros.rs;l=17:
// Unsupported rustc_hir::hir::DefKind: Macro(MacroKinds(1))

// Error generating bindings for macro `macros::print` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/macros.rs;l=86:
// Unsupported rustc_hir::hir::DefKind: Macro(MacroKinds(1))

// Error generating bindings for macro `macros::println` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/macros.rs;l=143:
// Unsupported rustc_hir::hir::DefKind: Macro(MacroKinds(1))

}  // namespace rs::std

namespace rs::std::net {

//  Possible values which can be passed to the [`TcpStream::shutdown`] method.
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/mod.rs;l=52
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: net :: Shutdown") alignas(1)
    [[clang::trivial_abi]] Shutdown final {
 public:
  // `std::net::Shutdown` doesn't implement the `Default` trait
  Shutdown() = delete;

  //  The reading portion of the [`TcpStream`] should be shut down.
  //
  //  All currently blocked and future [reads] will return
  //  <code>[Ok]\\(0)</code>.
  //
  //  [reads]: crate::io::Read "io::Read"
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/mod.rs;l=59
  static constexpr Shutdown MakeRead();

  //  The writing portion of the [`TcpStream`] should be shut down.
  //
  //  All currently blocked and future [writes] will return an error.
  //
  //  [writes]: crate::io::Write "io::Write"
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/mod.rs;l=66
  static constexpr Shutdown MakeWrite();

  //  Both the reading and the writing portions of the [`TcpStream`] should be
  //  shut down.
  //
  //  See [`Shutdown::Read`] and [`Shutdown::Write`] for more information.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/mod.rs;l=71
  static constexpr Shutdown MakeBoth();

  // No custom `Drop` impl and no custom "drop glue" required
  ~Shutdown() = default;
  Shutdown(Shutdown&&) = default;
  Shutdown& operator=(Shutdown&&) = default;

  // Rust types that are `Copy` get trivial, `default` C++ copy constructor and
  // assignment operator.
  Shutdown(const Shutdown&) = default;
  Shutdown& operator=(const Shutdown&) = default;
  Shutdown(::crubit::UnsafeRelocateTag, Shutdown&& value);

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/mod.rs;l=50
  bool operator==(::rs::std::net::Shutdown const& other) const;

 private:
  // Field type has been replaced with a blob of bytes: No support for bindings
  // of individual non-repr(C) `enum`s
  ::std::array<unsigned char, 1> __opaque_blob_of_bytes;

 private:
  struct PrivateBytesTag {};
  constexpr Shutdown(PrivateBytesTag, ::std::array<unsigned char, 1> bytes)
      : __opaque_blob_of_bytes(bytes) {}

 private:
  static void __crubit_field_offset_assertions();
};

}  // namespace rs::std::net

namespace rs::std::net {

//  A trait for objects which can be converted or resolved to one or more
//  [`SocketAddr`] values.
//
//  This trait is used for generic address resolution when constructing network
//  objects. By default it is implemented for the following types:
//
//   * [`SocketAddr`]: [`to_socket_addrs`] is the identity function.
//
//   * [`SocketAddrV4`], [`SocketAddrV6`], <code>([IpAddr], [u16])</code>,
//     <code>([Ipv4Addr], [u16])</code>, <code>([Ipv6Addr], [u16])</code>:
//     [`to_socket_addrs`] constructs a [`SocketAddr`] trivially.
//
//   * <code>(&[str], [u16])</code>: <code>&[str]</code> should be either a
//   string representation
//     of an [`IpAddr`] address as expected by [`FromStr`] implementation or a
//     host name. [`u16`] is the port number.
//
//   * <code>&[str]</code>: the string should be either a string representation
//   of a
//     [`SocketAddr`] as expected by its [`FromStr`] implementation or a string
//     like
//     `<host_name>:<port>` pair where `<port>` is a [`u16`] value.
//
//   * <code>&[[SocketAddr]]</code>: all [`SocketAddr`] values in the slice will
//   be used.
//
//  This trait allows constructing network objects like [`TcpStream`] or
//  [`UdpSocket`] easily with values of various types for the bind/connection
//  address. It is needed because sometimes one type is more appropriate than
//  the other: for simple uses a string like `"localhost:12345"` is much nicer
//  than manual construction of the corresponding [`SocketAddr`], but sometimes
//  [`SocketAddr`] value is *the* main source of the address, and converting it
//  to some other type (e.g., a string) just for it to be converted back to
//  [`SocketAddr`] in constructor methods is pointless.
//
//  Addresses returned by the operating system that are not IP addresses are
//  silently ignored.
//
//  [`FromStr`]: crate::str::FromStr "std::str::FromStr"
//  [`TcpStream`]: crate::net::TcpStream "net::TcpStream"
//  [`to_socket_addrs`]: ToSocketAddrs::to_socket_addrs
//  [`UdpSocket`]: crate::net::UdpSocket "net::UdpSocket"
//
//  # Examples
//
//  Creating a [`SocketAddr`] iterator that yields one item:
//
//  ```
//  use std::net::{ToSocketAddrs, SocketAddr};
//
//  let addr = SocketAddr::from(([127, 0, 0, 1], 443));
//  let mut addrs_iter = addr.to_socket_addrs().unwrap();
//
//  assert_eq!(Some(addr), addrs_iter.next());
//  assert!(addrs_iter.next().is_none());
//  ```
//
//  Creating a [`SocketAddr`] iterator from a hostname:
//
//  ```no_run
//  use std::net::{SocketAddr, ToSocketAddrs};
//
//  // assuming 'localhost' resolves to 127.0.0.1
//  let mut addrs_iter = "localhost:443".to_socket_addrs().unwrap();
//  assert_eq!(addrs_iter.next(), Some(SocketAddr::from(([127, 0, 0, 1],
//  443)))); assert!(addrs_iter.next().is_none());
//
//  // assuming 'foo' does not resolve
//  assert!("foo:443".to_socket_addrs().is_err());
//  ```
//
//  Creating a [`SocketAddr`] iterator that yields multiple items:
//
//  ```
//  use std::net::{SocketAddr, ToSocketAddrs};
//
//  let addr1 = SocketAddr::from(([0, 0, 0, 0], 80));
//  let addr2 = SocketAddr::from(([127, 0, 0, 1], 443));
//  let addrs = vec![addr1, addr2];
//
//  let mut addrs_iter = (&addrs[..]).to_socket_addrs().unwrap();
//
//  assert_eq!(Some(addr1), addrs_iter.next());
//  assert_eq!(Some(addr2), addrs_iter.next());
//  assert!(addrs_iter.next().is_none());
//  ```
//
//  Attempting to create a [`SocketAddr`] iterator from an improperly formatted
//  socket address `&str` (missing the port):
//
//  ```
//  use std::io;
//  use std::net::ToSocketAddrs;
//
//  let err = "127.0.0.1".to_socket_addrs().unwrap_err();
//  assert_eq!(err.kind(), io::ErrorKind::InvalidInput);
//  ```
//
//  [`TcpStream::connect`] is an example of a function that utilizes
//  `ToSocketAddrs` as a trait bound on its parameter in order to accept
//  different types:
//
//  ```no_run
//  use std::net::{TcpStream, Ipv4Addr};
//
//  let stream = TcpStream::connect(("127.0.0.1", 443));
//  // or
//  let stream = TcpStream::connect("127.0.0.1:443");
//  // or
//  let stream = TcpStream::connect((Ipv4Addr::new(127, 0, 0, 1), 443));
//  ```
//
//  [`TcpStream::connect`]: crate::net::TcpStream::connect
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/socket_addr.rs;l=128
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: net :: ToSocketAddrs")
    ToSocketAddrs {
  template <typename T>
  using impl = rs_std::impl<T, ToSocketAddrs>;
};

}  // namespace rs::std::net

namespace rs::std::net {

//  An iterator that infinitely [`accept`]s connections on a [`TcpListener`].
//
//  This `struct` is created by the [`TcpListener::incoming`] method.
//  See its documentation for more.
//
//  [`accept`]: TcpListener::accept
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/tcp.rs;l=110
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: net :: Incoming") alignas(8)
    [[clang::trivial_abi]] [[nodiscard(
        "iterators are lazy and do nothing unless consumed")]] Incoming final {
 public:
  // `std::net::Incoming` doesn't implement the `Default` trait
  Incoming() = delete;

  // No custom `Drop` impl and no custom "drop glue" required
  ~Incoming() = default;
  Incoming(Incoming&&) = default;
  Incoming& operator=(Incoming&&) = default;

  // `std::net::Incoming` doesn't implement the `Clone` trait
  Incoming(const Incoming&) = delete;
  Incoming& operator=(const Incoming&) = delete;
  Incoming(::crubit::UnsafeRelocateTag, Incoming&& value);
  template <typename TAdaptedSelf_ = Incoming>
  inline rs::IteratorAdapter<TAdaptedSelf_*> begin() & {
    return rs::IteratorAdapter<TAdaptedSelf_*>(this);
  }
  inline rs::IteratorEnd end() & { return rs::IteratorEnd(); }

 private:
  union {
    // Generated from:
    // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/tcp.rs;l=111
    ::rs::std::net::TcpListener const* crubit_nonnull listener;
  };

 private:
  static void __crubit_field_offset_assertions();
};

//  A TCP socket server, listening for connections.
//
//  After creating a `TcpListener` by [`bind`]ing it to a socket address, it
//  listens for incoming TCP connections. These can be accepted by calling
//  [`accept`] or by iterating over the [`Incoming`] iterator returned by
//  [`incoming`][`TcpListener::incoming`].
//
//  The socket will be closed when the value is dropped.
//
//  The Transmission Control Protocol is specified in [IETF RFC 793].
//
//  [`accept`]: TcpListener::accept
//  [`bind`]: TcpListener::bind
//  [IETF RFC 793]: https://tools.ietf.org/html/rfc793
//
//  # Examples
//
//  ```no_run
//  use std::net::{TcpListener, TcpStream};
//
//  fn handle_client(stream: TcpStream) {
//      // ...
//  }
//
//  fn main() -> std::io::Result<()> {
//      let listener = TcpListener::bind("127.0.0.1:80")?;
//
//      // accept connections and process them serially
//      for stream in listener.incoming() {
//          handle_client(stream?);
//      }
//      Ok(())
//  }
//  ```
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/tcp.rs;l=99
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: net :: TcpListener") alignas(4)
    [[clang::trivial_abi]] TcpListener final {
 public:
  // `std::net::TcpListener` doesn't implement the `Default` trait
  TcpListener() = delete;

  // Drop::drop
  ~TcpListener();

  // C++ move operations are unavailable for this type. See
  // http://crubit.rs/rust/movable_types for an explanation of Rust types that
  // are C++ movable.
  TcpListener(TcpListener&&) = delete;
  ::rs::std::net::TcpListener& operator=(TcpListener&&) = delete;
  // `std::net::TcpListener` doesn't implement the `Clone` trait
  TcpListener(const TcpListener&) = delete;
  TcpListener& operator=(const TcpListener&) = delete;
  TcpListener(::crubit::UnsafeRelocateTag, TcpListener&& value);

  // Error generating bindings for associated function
  // `net::tcp::TcpListener::bind` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/tcp.rs;l=835:
  // No valid non-generic replacement for generic type param `A`

  //  Returns the local socket address of this listener.
  //
  //  # Examples
  //
  //  ```no_run
  //  use std::net::{Ipv4Addr, SocketAddr, SocketAddrV4, TcpListener};
  //
  //  let listener = TcpListener::bind("127.0.0.1:8080").unwrap();
  //  assert_eq!(listener.local_addr().unwrap(),
  //             SocketAddr::V4(SocketAddrV4::new(Ipv4Addr::new(127, 0, 0, 1),
  //             8080)));
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/tcp.rs;l=851
  rs_std::Result<::rs::core::net::SocketAddr, ::rs::std::io::Error> local_addr()
      const;

  //  Creates a new independently owned handle to the underlying socket.
  //
  //  The returned [`TcpListener`] is a reference to the same socket that this
  //  object references. Both handles can be used to accept incoming
  //  connections and options set on one listener will affect the other.
  //
  //  # Examples
  //
  //  ```no_run
  //  use std::net::TcpListener;
  //
  //  let listener = TcpListener::bind("127.0.0.1:8080").unwrap();
  //  let listener_clone = listener.try_clone().unwrap();
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/tcp.rs;l=870
  rs_std::Result<::rs::std::net::TcpListener, ::rs::std::io::Error> try_clone()
      const;

  //  Accept a new incoming connection from this listener.
  //
  //  This function will block the calling thread until a new TCP connection
  //  is established. When established, the corresponding [`TcpStream`] and the
  //  remote peer's address will be returned.
  //
  //  # Errors
  //
  //  Some errors this function returns do not indicate a problem with the
  //  listener itself, and a program serving a long-lived listener will
  //  usually want to handle them and keep accepting connections rather than
  //  treat them as fatal. These include, but are not limited to:
  //
  //  - An error specific to a single incoming connection that failed before
  //    it could be accepted, such as one aborted by the peer
  //    ([`ConnectionAborted`]). A later call may succeed immediately.
  //  - An error from reaching the per-process or system-wide open file
  //    descriptor limit. The call can be retried once other file descriptors
  //    have been closed, typically after a short delay.
  //  - An error from failing to allocate memory while accepting a connection
  //    ([`OutOfMemory`]).
  //
  //  Which errors can occur is platform-specific. On Unix, [`Interrupted`]
  //  errors are retried internally rather than being returned.
  //
  //  [`ConnectionAborted`]: io::ErrorKind::ConnectionAborted
  //  [`OutOfMemory`]: io::ErrorKind::OutOfMemory
  //  [`Interrupted`]: io::ErrorKind::Interrupted
  //
  //  # Examples
  //
  //  ```no_run
  //  use std::net::TcpListener;
  //
  //  let listener = TcpListener::bind("127.0.0.1:8080").unwrap();
  //  match listener.accept() {
  //      Ok((_socket, addr)) => println!("new client: {addr:?}"),
  //      Err(e) => println!("couldn't get client: {e:?}"),
  //  }
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/tcp.rs;l=915
  rs_std::Result<
      rs_std::Tuple<::rs::std::net::TcpStream, ::rs::core::net::SocketAddr>,
      ::rs::std::io::Error>
  accept() const;

  //  Returns an iterator over the connections being received on this
  //  listener.
  //
  //  The returned iterator will never return [`None`] and will also not yield
  //  the peer's [`SocketAddr`] structure. Iterating over it is equivalent to
  //  calling [`TcpListener::accept`] in a loop.
  //
  //  # Errors
  //
  //  Each connection yielded by the iterator can fail for the same reasons as
  //  [`TcpListener::accept`]; see its documentation for details.
  //
  //  # Examples
  //
  //  ```no_run
  //  use std::net::{TcpListener, TcpStream};
  //
  //  fn handle_connection(stream: TcpStream) {
  //     //...
  //  }
  //
  //  fn main() -> std::io::Result<()> {
  //      let listener = TcpListener::bind("127.0.0.1:80")?;
  //
  //      for stream in listener.incoming() {
  //          match stream {
  //              Ok(stream) => {
  //                  handle_connection(stream);
  //              }
  //              Err(e) => { /* connection failed */ }
  //          }
  //      }
  //      Ok(())
  //  }
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/tcp.rs;l=958
  ::rs::std::net::Incoming incoming() const& $(__anon1) CRUBIT_LIFETIME_BOUND;

  // Error generating bindings for associated function
  // `net::tcp::TcpListener::set_ttl` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/tcp.rs;l=1013:
  // Error formatting function return type `core::result::Result<(),
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  //  Gets the value of the `IP_TTL` option for this socket.
  //
  //  For more information about this option, see [`TcpListener::set_ttl`].
  //
  //  # Examples
  //
  //  ```no_run
  //  use std::net::TcpListener;
  //
  //  let listener = TcpListener::bind("127.0.0.1:80").unwrap();
  //  listener.set_ttl(100).expect("set_ttl should succeed");
  //  assert_eq!(listener.ttl().unwrap_or(0), 100);
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/tcp.rs;l=1031
  rs_std::Result<::std::uint32_t, ::rs::std::io::Error> ttl() const;

  // Error generating bindings for associated function
  // `net::tcp::TcpListener::set_only_v6` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/tcp.rs;l=1038:
  // Error formatting function return type `core::result::Result<(),
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/tcp.rs;l=1045
  [[deprecated(
      "this option can only be set before the socket is bound")]] rs_std::
      Result<bool, ::rs::std::io::Error>
      only_v6() const;

  // Error generating bindings for associated function
  // `net::tcp::TcpListener::take_error` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/tcp.rs;l=1064:
  // Error formatting function return type
  // `core::result::Result<core::option::Option<core::io::Error>,
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  // Error generating bindings for associated function
  // `net::tcp::TcpListener::set_nonblocking` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/tcp.rs;l=1111:
  // Error formatting function return type `core::result::Result<(),
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

 private:
  // Field type has been replaced with a blob of bytes: Not a public or a
  // supported reexported type (b/262052635).
  ::std::array<unsigned char, 4> __field0;

 private:
  static void __crubit_field_offset_assertions();
};

//  A TCP stream between a local and a remote socket.
//
//  After creating a `TcpStream` by either [`connect`]ing to a remote host or
//  [`accept`]ing a connection on a [`TcpListener`], data can be transmitted
//  by [reading] and [writing] to it.
//
//  The connection will be closed when the value is dropped. The reading and
//  writing portions of the connection can also be shut down individually with
//  the [`shutdown`] method.
//
//  The Transmission Control Protocol is specified in [IETF RFC 793].
//
//  [`accept`]: TcpListener::accept
//  [`connect`]: TcpStream::connect
//  [IETF RFC 793]: https://tools.ietf.org/html/rfc793
//  [reading]: Read
//  [`shutdown`]: TcpStream::shutdown
//  [writing]: Write
//
//  # Examples
//
//  ```no_run
//  use std::io::prelude::*;
//  use std::net::TcpStream;
//
//  fn main() -> std::io::Result<()> {
//      let mut stream = TcpStream::connect("127.0.0.1:34254")?;
//
//      stream.write(&[1])?;
//      stream.read(&mut [0; 128])?;
//      Ok(())
//  } // the stream is closed here
//  ```
//
//  # Platform-specific Behavior
//
//  On Unix, writes to the underlying socket in `SOCK_STREAM` mode are made with
//  `MSG_NOSIGNAL` flag. This suppresses the emission of the  `SIGPIPE` signal
//  when writing to disconnected socket. In some cases, getting a `SIGPIPE`
//  would trigger process termination.
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/tcp.rs;l=63
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: net :: TcpStream") alignas(4)
    [[clang::trivial_abi]] TcpStream final {
 public:
  // `std::net::TcpStream` doesn't implement the `Default` trait
  TcpStream() = delete;

  // Drop::drop
  ~TcpStream();

  // C++ move operations are unavailable for this type. See
  // http://crubit.rs/rust/movable_types for an explanation of Rust types that
  // are C++ movable.
  TcpStream(TcpStream&&) = delete;
  ::rs::std::net::TcpStream& operator=(TcpStream&&) = delete;
  // `std::net::TcpStream` doesn't implement the `Clone` trait
  TcpStream(const TcpStream&) = delete;
  TcpStream& operator=(const TcpStream&) = delete;
  TcpStream(::crubit::UnsafeRelocateTag, TcpStream&& value);

  // Error generating bindings for associated function
  // `net::tcp::TcpStream::connect` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/tcp.rs;l=169:
  // No valid non-generic replacement for generic type param `A`

  //  Opens a TCP connection to a remote host with a timeout.
  //
  //  Unlike `connect`, `connect_timeout` takes a single [`SocketAddr`] since
  //  timeout must be applied to individual addresses.
  //
  //  It is an error to pass a zero `Duration` to this function.
  //
  //  Unlike other methods on `TcpStream`, this does not correspond to a
  //  single system call. It instead calls `connect` in nonblocking mode and
  //  then uses an OS-specific mechanism to await the completion of the
  //  connection request.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/tcp.rs;l=185
  static rs_std::Result<::rs::std::net::TcpStream, ::rs::std::io::Error>
  connect_timeout(::rs::core::net::SocketAddr const& addr,
                  ::rs::core::time::Duration timeout);

  //  Returns the socket address of the remote peer of this TCP connection.
  //
  //  # Examples
  //
  //  ```no_run
  //  use std::net::{Ipv4Addr, SocketAddr, SocketAddrV4, TcpStream};
  //
  //  let stream = TcpStream::connect("127.0.0.1:8080")
  //                         .expect("Couldn't connect to the server...");
  //  assert_eq!(stream.peer_addr().unwrap(),
  //             SocketAddr::V4(SocketAddrV4::new(Ipv4Addr::new(127, 0, 0, 1),
  //             8080)));
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/tcp.rs;l=202
  rs_std::Result<::rs::core::net::SocketAddr, ::rs::std::io::Error> peer_addr()
      const;

  //  Returns the socket address of the local half of this TCP connection.
  //
  //  # Examples
  //
  //  ```no_run
  //  use std::net::{IpAddr, Ipv4Addr, TcpStream};
  //
  //  let stream = TcpStream::connect("127.0.0.1:8080")
  //                         .expect("Couldn't connect to the server...");
  //  assert_eq!(stream.local_addr().unwrap().ip(),
  //             IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)));
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/tcp.rs;l=219
  rs_std::Result<::rs::core::net::SocketAddr, ::rs::std::io::Error> local_addr()
      const;

  // Error generating bindings for associated function
  // `net::tcp::TcpStream::shutdown` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/tcp.rs;l=246:
  // Error formatting function return type `core::result::Result<(),
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  //  Creates a new independently owned handle to the underlying socket.
  //
  //  The returned `TcpStream` is a reference to the same stream that this
  //  object references. Both handles will read and write the same stream of
  //  data, and options set on one stream will be propagated to the other
  //  stream.
  //
  //  # Examples
  //
  //  ```no_run
  //  use std::net::TcpStream;
  //
  //  let stream = TcpStream::connect("127.0.0.1:8080")
  //                         .expect("Couldn't connect to the server...");
  //  let stream_clone = stream.try_clone().expect("clone should succeed");
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/tcp.rs;l=267
  rs_std::Result<::rs::std::net::TcpStream, ::rs::std::io::Error> try_clone()
      const;

  // Error generating bindings for associated function
  // `net::tcp::TcpStream::set_read_timeout` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/tcp.rs;l=311:
  // Error formatting function return type `core::result::Result<(),
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  // Error generating bindings for associated function
  // `net::tcp::TcpStream::set_write_timeout` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/tcp.rs;l=355:
  // Error formatting function return type `core::result::Result<(),
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  //  Returns the read timeout of this socket.
  //
  //  If the timeout is [`None`], then [`read`] calls will block indefinitely.
  //
  //  # Platform-specific behavior
  //
  //  Some platforms do not provide access to the current timeout.
  //
  //  [`read`]: Read::read
  //
  //  # Examples
  //
  //  ```no_run
  //  use std::net::TcpStream;
  //
  //  let stream = TcpStream::connect("127.0.0.1:8080")
  //                         .expect("Couldn't connect to the server...");
  //  stream.set_read_timeout(None).expect("set_read_timeout should succeed");
  //  assert_eq!(stream.read_timeout().unwrap(), None);
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/tcp.rs;l=380
  rs_std::Result<rs_std::Option<::rs::core::time::Duration>,
                 ::rs::std::io::Error>
  read_timeout() const;

  //  Returns the write timeout of this socket.
  //
  //  If the timeout is [`None`], then [`write`] calls will block indefinitely.
  //
  //  # Platform-specific behavior
  //
  //  Some platforms do not provide access to the current timeout.
  //
  //  [`write`]: Write::write
  //
  //  # Examples
  //
  //  ```no_run
  //  use std::net::TcpStream;
  //
  //  let stream = TcpStream::connect("127.0.0.1:8080")
  //                         .expect("Couldn't connect to the server...");
  //  stream.set_write_timeout(None).expect("set_write_timeout should succeed");
  //  assert_eq!(stream.write_timeout().unwrap(), None);
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/tcp.rs;l=405
  rs_std::Result<rs_std::Option<::rs::core::time::Duration>,
                 ::rs::std::io::Error>
  write_timeout() const;

  // Error generating bindings for associated function
  // `net::tcp::TcpStream::peek` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/tcp.rs;l=427:
  // Error formatting function return type `core::result::Result<usize,
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  // Error generating bindings for associated function
  // `net::tcp::TcpStream::set_nodelay` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/tcp.rs;l=547:
  // Error formatting function return type `core::result::Result<(),
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  //  Gets the value of the `TCP_NODELAY` option on this socket.
  //
  //  For more information about this option, see [`TcpStream::set_nodelay`].
  //
  //  # Examples
  //
  //  ```no_run
  //  use std::net::TcpStream;
  //
  //  let stream = TcpStream::connect("127.0.0.1:8080")
  //                         .expect("Couldn't connect to the server...");
  //  stream.set_nodelay(true).expect("set_nodelay should succeed");
  //  assert_eq!(stream.nodelay().unwrap_or(false), true);
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/tcp.rs;l=566
  rs_std::Result<bool, ::rs::std::io::Error> nodelay() const;

  // Error generating bindings for associated function
  // `net::tcp::TcpStream::set_ttl` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/tcp.rs;l=585:
  // Error formatting function return type `core::result::Result<(),
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  //  Gets the value of the `IP_TTL` option for this socket.
  //
  //  For more information about this option, see [`TcpStream::set_ttl`].
  //
  //  # Examples
  //
  //  ```no_run
  //  use std::net::TcpStream;
  //
  //  let stream = TcpStream::connect("127.0.0.1:8080")
  //                         .expect("Couldn't connect to the server...");
  //  stream.set_ttl(100).expect("set_ttl should succeed");
  //  assert_eq!(stream.ttl().unwrap_or(0), 100);
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/tcp.rs;l=604
  rs_std::Result<::std::uint32_t, ::rs::std::io::Error> ttl() const;

  // Error generating bindings for associated function
  // `net::tcp::TcpStream::take_error` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/tcp.rs;l=624:
  // Error formatting function return type
  // `core::result::Result<core::option::Option<core::io::Error>,
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  // Error generating bindings for associated function
  // `net::tcp::TcpStream::set_nonblocking` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/tcp.rs;l=669:
  // Error formatting function return type `core::result::Result<(),
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

 private:
  // Field type has been replaced with a blob of bytes: Not a public or a
  // supported reexported type (b/262052635).
  ::std::array<unsigned char, 4> __field0;

 private:
  static void __crubit_field_offset_assertions();
};

}  // namespace rs::std::net

namespace rs::std::net {

//  A UDP socket.
//
//  After creating a `UdpSocket` by [`bind`]ing it to a socket address, data can
//  be [sent to] and [received from] any other socket address.
//
//  Although UDP is a connectionless protocol, this implementation provides an
//  interface to set an address where data should be sent and received from.
//  After setting a remote address with [`connect`], data can be sent to and
//  received from that address with
//  [`send`] and [`recv`].
//
//  As stated in the User Datagram Protocol's specification in [IETF RFC 768],
//  UDP is an unordered, unreliable protocol; refer to [`TcpListener`] and
//  [`TcpStream`] for TCP primitives.
//
//  [`bind`]: UdpSocket::bind
//  [`connect`]: UdpSocket::connect
//  [IETF RFC 768]: https://tools.ietf.org/html/rfc768
//  [`recv`]: UdpSocket::recv
//  [received from]: UdpSocket::recv_from
//  [`send`]: UdpSocket::send
//  [sent to]: UdpSocket::send_to
//  [`TcpListener`]: crate::net::TcpListener
//  [`TcpStream`]: crate::net::TcpStream
//
//  # Examples
//
//  ```no_run
//  use std::net::UdpSocket;
//
//  fn main() -> std::io::Result<()> {
//      {
//          let socket = UdpSocket::bind("127.0.0.1:34254")?;
//
//          // Receives a single datagram message on the socket. If `buf` is too
//          small to hold
//          // the message, it will be cut off.
//          let mut buf = [0; 10];
//          let (amt, src) = socket.recv_from(&mut buf)?;
//
//          // Redeclare `buf` as slice of the received data and send reverse
//          data back to origin. let buf = &mut buf[..amt]; buf.reverse();
//          socket.send_to(buf, &src)?;
//      } // the socket is closed here
//      Ok(())
//  }
//  ```
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/udp.rs;l=67
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: net :: UdpSocket") alignas(4)
    [[clang::trivial_abi]] UdpSocket final {
 public:
  // `std::net::UdpSocket` doesn't implement the `Default` trait
  UdpSocket() = delete;

  // Drop::drop
  ~UdpSocket();

  // C++ move operations are unavailable for this type. See
  // http://crubit.rs/rust/movable_types for an explanation of Rust types that
  // are C++ movable.
  UdpSocket(UdpSocket&&) = delete;
  ::rs::std::net::UdpSocket& operator=(UdpSocket&&) = delete;
  // `std::net::UdpSocket` doesn't implement the `Clone` trait
  UdpSocket(const UdpSocket&) = delete;
  UdpSocket& operator=(const UdpSocket&) = delete;
  UdpSocket(::crubit::UnsafeRelocateTag, UdpSocket&& value);

  // Error generating bindings for associated function
  // `net::udp::UdpSocket::bind` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/udp.rs;l=122:
  // No valid non-generic replacement for generic type param `A`

  // Error generating bindings for associated function
  // `net::udp::UdpSocket::recv_from` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/udp.rs;l=149:
  // Error formatting function return type `core::result::Result<(usize,
  // core::net::SocketAddr), core::io::Error>`: Generic types are not supported
  // yet (b/259749095)

  // Error generating bindings for associated function
  // `net::udp::UdpSocket::peek_from` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/udp.rs;l=178:
  // Error formatting function return type `core::result::Result<(usize,
  // core::net::SocketAddr), core::io::Error>`: Generic types are not supported
  // yet (b/259749095)

  // Error generating bindings for associated function
  // `net::udp::UdpSocket::send_to` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/udp.rs;l=209:
  // No valid non-generic replacement for generic type param `A`

  //  Returns the socket address of the remote peer this socket was connected
  //  to.
  //
  //  # Examples
  //
  //  ```no_run
  //  use std::net::{Ipv4Addr, SocketAddr, SocketAddrV4, UdpSocket};
  //
  //  let socket = UdpSocket::bind("127.0.0.1:34254").expect("couldn't bind to
  //  address"); socket.connect("192.168.0.1:41203").expect("couldn't connect to
  //  address"); assert_eq!(socket.peer_addr().unwrap(),
  //             SocketAddr::V4(SocketAddrV4::new(Ipv4Addr::new(192, 168, 0, 1),
  //             41203)));
  //  ```
  //
  //  If the socket isn't connected, it will return a [`NotConnected`] error.
  //
  //  [`NotConnected`]: io::ErrorKind::NotConnected
  //
  //  ```no_run
  //  use std::net::UdpSocket;
  //
  //  let socket = UdpSocket::bind("127.0.0.1:34254").expect("couldn't bind to
  //  address"); assert_eq!(socket.peer_addr().unwrap_err().kind(),
  //             std::io::ErrorKind::NotConnected);
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/udp.rs;l=241
  rs_std::Result<::rs::core::net::SocketAddr, ::rs::std::io::Error> peer_addr()
      const;

  //  Returns the socket address that this socket was created from.
  //
  //  # Examples
  //
  //  ```no_run
  //  use std::net::{Ipv4Addr, SocketAddr, SocketAddrV4, UdpSocket};
  //
  //  let socket = UdpSocket::bind("127.0.0.1:34254").expect("couldn't bind to
  //  address"); assert_eq!(socket.local_addr().unwrap(),
  //             SocketAddr::V4(SocketAddrV4::new(Ipv4Addr::new(127, 0, 0, 1),
  //             34254)));
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/udp.rs;l=257
  rs_std::Result<::rs::core::net::SocketAddr, ::rs::std::io::Error> local_addr()
      const;

  //  Creates a new independently owned handle to the underlying socket.
  //
  //  The returned `UdpSocket` is a reference to the same socket that this
  //  object references. Both handles will read and write the same port, and
  //  options set on one socket will be propagated to the other.
  //
  //  # Examples
  //
  //  ```no_run
  //  use std::net::UdpSocket;
  //
  //  let socket = UdpSocket::bind("127.0.0.1:34254").expect("couldn't bind to
  //  address"); let socket_clone = socket.try_clone().expect("couldn't clone
  //  the socket");
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/udp.rs;l=276
  rs_std::Result<::rs::std::net::UdpSocket, ::rs::std::io::Error> try_clone()
      const;

  // Error generating bindings for associated function
  // `net::udp::UdpSocket::set_read_timeout` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/udp.rs;l=319:
  // Error formatting function return type `core::result::Result<(),
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  // Error generating bindings for associated function
  // `net::udp::UdpSocket::set_write_timeout` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/udp.rs;l=362:
  // Error formatting function return type `core::result::Result<(),
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  //  Returns the read timeout of this socket.
  //
  //  If the timeout is [`None`], then [`read`] calls will block indefinitely.
  //
  //  [`read`]: io::Read::read
  //
  //  # Examples
  //
  //  ```no_run
  //  use std::net::UdpSocket;
  //
  //  let socket = UdpSocket::bind("127.0.0.1:34254").expect("couldn't bind to
  //  address"); socket.set_read_timeout(None).expect("set_read_timeout call
  //  failed"); assert_eq!(socket.read_timeout().unwrap(), None);
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/udp.rs;l=382
  rs_std::Result<rs_std::Option<::rs::core::time::Duration>,
                 ::rs::std::io::Error>
  read_timeout() const;

  //  Returns the write timeout of this socket.
  //
  //  If the timeout is [`None`], then [`write`] calls will block indefinitely.
  //
  //  [`write`]: io::Write::write
  //
  //  # Examples
  //
  //  ```no_run
  //  use std::net::UdpSocket;
  //
  //  let socket = UdpSocket::bind("127.0.0.1:34254").expect("couldn't bind to
  //  address"); socket.set_write_timeout(None).expect("set_write_timeout call
  //  failed"); assert_eq!(socket.write_timeout().unwrap(), None);
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/udp.rs;l=402
  rs_std::Result<rs_std::Option<::rs::core::time::Duration>,
                 ::rs::std::io::Error>
  write_timeout() const;

  // Error generating bindings for associated function
  // `net::udp::UdpSocket::set_broadcast` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/udp.rs;l=420:
  // Error formatting function return type `core::result::Result<(),
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  //  Gets the value of the `SO_BROADCAST` option for this socket.
  //
  //  For more information about this option, see [`UdpSocket::set_broadcast`].
  //
  //  # Examples
  //
  //  ```no_run
  //  use std::net::UdpSocket;
  //
  //  let socket = UdpSocket::bind("127.0.0.1:34254").expect("couldn't bind to
  //  address"); socket.set_broadcast(false).expect("set_broadcast call
  //  failed"); assert_eq!(socket.broadcast().unwrap(), false);
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/udp.rs;l=438
  rs_std::Result<bool, ::rs::std::io::Error> broadcast() const;

  // Error generating bindings for associated function
  // `net::udp::UdpSocket::set_multicast_loop_v4` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/udp.rs;l=456:
  // Error formatting function return type `core::result::Result<(),
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  //  Gets the value of the `IP_MULTICAST_LOOP` option for this socket.
  //
  //  For more information about this option, see
  //  [`UdpSocket::set_multicast_loop_v4`].
  //
  //  # Examples
  //
  //  ```no_run
  //  use std::net::UdpSocket;
  //
  //  let socket = UdpSocket::bind("127.0.0.1:34254").expect("couldn't bind to
  //  address");
  //  socket.set_multicast_loop_v4(false).expect("set_multicast_loop_v4 call
  //  failed"); assert_eq!(socket.multicast_loop_v4().unwrap(), false);
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/udp.rs;l=474
  rs_std::Result<bool, ::rs::std::io::Error> multicast_loop_v4() const;

  // Error generating bindings for associated function
  // `net::udp::UdpSocket::set_multicast_ttl_v4` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/udp.rs;l=495:
  // Error formatting function return type `core::result::Result<(),
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  //  Gets the value of the `IP_MULTICAST_TTL` option for this socket.
  //
  //  For more information about this option, see
  //  [`UdpSocket::set_multicast_ttl_v4`].
  //
  //  # Examples
  //
  //  ```no_run
  //  use std::net::UdpSocket;
  //
  //  let socket = UdpSocket::bind("127.0.0.1:34254").expect("couldn't bind to
  //  address"); socket.set_multicast_ttl_v4(42).expect("set_multicast_ttl_v4
  //  call failed"); assert_eq!(socket.multicast_ttl_v4().unwrap(), 42);
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/udp.rs;l=513
  rs_std::Result<::std::uint32_t, ::rs::std::io::Error> multicast_ttl_v4()
      const;

  // Error generating bindings for associated function
  // `net::udp::UdpSocket::set_multicast_loop_v6` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/udp.rs;l=531:
  // Error formatting function return type `core::result::Result<(),
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  //  Gets the value of the `IPV6_MULTICAST_LOOP` option for this socket.
  //
  //  For more information about this option, see
  //  [`UdpSocket::set_multicast_loop_v6`].
  //
  //  # Examples
  //
  //  ```no_run
  //  use std::net::UdpSocket;
  //
  //  let socket = UdpSocket::bind("127.0.0.1:34254").expect("couldn't bind to
  //  address");
  //  socket.set_multicast_loop_v6(false).expect("set_multicast_loop_v6 call
  //  failed"); assert_eq!(socket.multicast_loop_v6().unwrap(), false);
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/udp.rs;l=549
  rs_std::Result<bool, ::rs::std::io::Error> multicast_loop_v6() const;

  // Error generating bindings for associated function
  // `net::udp::UdpSocket::set_ttl` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/udp.rs;l=567:
  // Error formatting function return type `core::result::Result<(),
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  //  Gets the value of the `IP_TTL` option for this socket.
  //
  //  For more information about this option, see [`UdpSocket::set_ttl`].
  //
  //  # Examples
  //
  //  ```no_run
  //  use std::net::UdpSocket;
  //
  //  let socket = UdpSocket::bind("127.0.0.1:34254").expect("couldn't bind to
  //  address"); socket.set_ttl(42).expect("set_ttl call failed");
  //  assert_eq!(socket.ttl().unwrap(), 42);
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/udp.rs;l=585
  rs_std::Result<::std::uint32_t, ::rs::std::io::Error> ttl() const;

  // Error generating bindings for associated function
  // `net::udp::UdpSocket::join_multicast_v4` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/udp.rs;l=597:
  // Error formatting function return type `core::result::Result<(),
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  // Error generating bindings for associated function
  // `net::udp::UdpSocket::join_multicast_v6` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/udp.rs;l=607:
  // Error formatting function return type `core::result::Result<(),
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  // Error generating bindings for associated function
  // `net::udp::UdpSocket::leave_multicast_v4` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/udp.rs;l=615:
  // Error formatting function return type `core::result::Result<(),
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  // Error generating bindings for associated function
  // `net::udp::UdpSocket::leave_multicast_v6` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/udp.rs;l=623:
  // Error formatting function return type `core::result::Result<(),
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  // Error generating bindings for associated function
  // `net::udp::UdpSocket::take_error` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/udp.rs;l=646:
  // Error formatting function return type
  // `core::result::Result<core::option::Option<core::io::Error>,
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  // Error generating bindings for associated function
  // `net::udp::UdpSocket::connect` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/udp.rs;l=683:
  // No valid non-generic replacement for generic type param `A`

  // Error generating bindings for associated function
  // `net::udp::UdpSocket::send` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/udp.rs;l=705:
  // Error formatting function return type `core::result::Result<usize,
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  // Error generating bindings for associated function
  // `net::udp::UdpSocket::recv` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/udp.rs;l=737:
  // Error formatting function return type `core::result::Result<usize,
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  // Error generating bindings for associated function
  // `net::udp::UdpSocket::peek` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/udp.rs;l=777:
  // Error formatting function return type `core::result::Result<usize,
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  // Error generating bindings for associated function
  // `net::udp::UdpSocket::set_nonblocking` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/udp.rs;l=822:
  // Error formatting function return type `core::result::Result<(),
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

 private:
  // Field type has been replaced with a blob of bytes: Not a public or a
  // supported reexported type (b/262052635).
  ::std::array<unsigned char, 4> __field0;

 private:
  static void __crubit_field_offset_assertions();
};

}  // namespace rs::std::net

namespace rs::std::panic {

//  A struct providing information about a panic.
//
//  `PanicHookInfo` structure is passed to a panic hook set by the [`set_hook`]
//  function.
//
//  # Examples
//
//  ```should_panic
//  use std::panic;
//
//  panic::set_hook(Box::new(|panic_info| {
//      println!("panic occurred: {panic_info}");
//  }));
//
//  panic!("critical system failure");
//  ```
//
//  [`set_hook`]: ../../std/panic/fn.set_hook.html
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/panic.rs;l=42
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: panic :: PanicHookInfo") alignas(8)
    [[clang::trivial_abi]] PanicHookInfo final {
 public:
  // `std::panic::PanicHookInfo` doesn't implement the `Default` trait
  PanicHookInfo() = delete;

  // No custom `Drop` impl and no custom "drop glue" required
  ~PanicHookInfo() = default;
  PanicHookInfo(PanicHookInfo&&) = default;
  PanicHookInfo& operator=(PanicHookInfo&&) = default;

  // `std::panic::PanicHookInfo` doesn't implement the `Clone` trait
  PanicHookInfo(const PanicHookInfo&) = delete;
  PanicHookInfo& operator=(const PanicHookInfo&) = delete;
  PanicHookInfo(::crubit::UnsafeRelocateTag, PanicHookInfo&& value);

  // Error generating bindings for associated function
  // `panic::PanicHookInfo::<'a>::payload` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/panic.rs;l=95:
  // Error formatting function return type `&'__anon1 (dyn core::any::Any +
  // core::marker::Send + 'static)`: Failed to format the referent of the
  // reference type `&'__anon1 (dyn core::any::Any + core::marker::Send +
  // 'static)`: The following Rust type is not supported yet: (dyn
  // core::any::Any + core::marker::Send + 'static)

  //  Returns the payload associated with the panic, if it is a string.
  //
  //  This returns the payload if it is of type `&'static str` or `String`.
  //
  //  A invocation of the `panic!()` macro in Rust 2021 or later will always
  //  result in a panic payload where `payload_as_str` returns `Some`.
  //
  //  Only an invocation of [`panic_any`]
  //  (or, in Rust 2018 and earlier, `panic!(x)` where `x` is something other
  //  than a string) can result in a panic payload where `payload_as_str`
  //  returns `None`.
  //
  //  # Example
  //
  //  ```should_panic
  //  std::panic::set_hook(Box::new(|panic_info| {
  //      if let Some(s) = panic_info.payload_as_str() {
  //          println!("panic occurred: {s:?}");
  //      } else {
  //          println!("panic occurred");
  //      }
  //  }));
  //
  //  panic!("Normal panic");
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/panic.rs;l=126
  [[nodiscard]] ::std::optional<rs_std::StrRef> payload_as_str() const& $(
      __anon1) CRUBIT_LIFETIME_BOUND;

  //  Returns information about the location from which the panic originated,
  //  if available.
  //
  //  This method will currently always return [`Some`], but this may change
  //  in future versions.
  //
  //  # Examples
  //
  //  ```should_panic
  //  use std::panic;
  //
  //  panic::set_hook(Box::new(|panic_info| {
  //      if let Some(location) = panic_info.location() {
  //          println!("panic occurred in file '{}' at line {}",
  //              location.file(),
  //              location.line(),
  //          );
  //      } else {
  //          println!("panic occurred but can't get location information...");
  //      }
  //  }));
  //
  //  panic!("Normal panic");
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/panic.rs;l=163
  [[nodiscard]] ::std::optional<::rs::core::panic::Location const *
                                $static crubit_nonnull>
  location() const;

  // AbslStringify and std::ostream support via std::fmt::Display
  template <typename Sink, typename Str = rs::alloc::string::String>
  friend void AbslStringify(Sink& sink, const PanicHookInfo& self) {
    crubit::Slot<Str> s;
    __crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std5panic13PanicHookInfoNtNtCsaddbpR6HRqH_u5alloc6string8ToString9to_ustringB6_u(
        self, s.Get());
    AbslStringify(sink, ::std::move(s).AssumeInitAndTakeValue().as_str());
  }
  template <typename Str = rs::alloc::string::String>
  friend ::std::ostream& operator<<(::std::ostream& os,
                                    const PanicHookInfo& self) {
    crubit::Slot<Str> s;
    __crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std5panic13PanicHookInfoNtNtCsaddbpR6HRqH_u5alloc6string8ToString9to_ustringB6_u(
        self, s.Get());
    return os << ::std::string_view(
               ::std::move(s).AssumeInitAndTakeValue().as_str());
  }

 private:
  // Field type has been replaced with a blob of bytes: Failed to format the
  // referent of the reference type `&(dyn core::any::Any + core::marker::Send +
  // 'static)`: The following Rust type is not supported yet: (dyn
  // core::any::Any + core::marker::Send + 'static)
  ::std::array<unsigned char, 16> payload;
  union {
    // Generated from:
    // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/panic.rs;l=44
    ::rs::core::panic::Location const* $static crubit_nonnull location_;
  };
  union {
    // Generated from:
    // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/panic.rs;l=45
    bool can_unwind;
  };
  union {
    // Generated from:
    // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/panic.rs;l=46
    bool force_no_backtrace;
  };
  unsigned char __padding3[6];

 private:
  static void __crubit_field_offset_assertions();
};

// Error generating bindings for function `panic::catch_unwind` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/panic.rs;l=358:
// No valid non-generic replacement for generic type param `F`

// Error generating bindings for function `panic::panic_any` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/panic.rs;l=259:
// No valid non-generic replacement for generic type param `M`

// Error generating bindings for function `panic::resume_unwind` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/panic.rs;l=390:
// Error handling parameter #0 of type `alloc_crate::boxed::Box<(dyn
// core::any::Any + core::marker::Send + 'static)>`: Generic types are not
// supported yet (b/259749095)

}  // namespace rs::std::panic

namespace rs::std::panic {

// Error generating bindings for function `panicking::set_hook` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/panicking.rs;l=142:
// Error handling parameter #0 of type `alloc_crate::boxed::Box<(dyn for<'a, 'b>
// core::ops::Fn(&'a panic::PanicHookInfo<'b>) + core::marker::Send +
// core::marker::Sync + 'static)>`: Generic types are not supported yet
// (b/259749095)

// Error generating bindings for function `panicking::take_hook` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/panicking.rs;l=182:
// Error formatting function return type `alloc_crate::boxed::Box<(dyn for<'a,
// 'b> core::ops::Fn(&'a panic::PanicHookInfo<'b>) + core::marker::Send +
// core::marker::Sync + 'static)>`: Generic types are not supported yet
// (b/259749095)

}  // namespace rs::std::panic

namespace rs::std::path {

//  An iterator over [`Path`] and its ancestors.
//
//  This `struct` is created by the [`ancestors`] method on [`Path`].
//  See its documentation for more.
//
//  # Examples
//
//  ```
//  use std::path::Path;
//
//  let path = Path::new("/foo/bar");
//
//  for ancestor in path.ancestors() {
//      println!("{}", ancestor.display());
//  }
//  ```
//
//  [`ancestors`]: Path::ancestors
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=1124
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: path :: Ancestors") alignas(8)
    [[clang::trivial_abi]] [[nodiscard(
        "iterators are lazy and do nothing unless consumed")]] Ancestors final {
 public:
  // `std::path::Ancestors` doesn't implement the `Default` trait
  Ancestors() = delete;

  // No custom `Drop` impl and no custom "drop glue" required
  ~Ancestors() = default;
  Ancestors(Ancestors&&) = default;
  Ancestors& operator=(Ancestors&&) = default;

  // Rust types that are `Copy` get trivial, `default` C++ copy constructor and
  // assignment operator.
  Ancestors(const Ancestors&) = default;
  Ancestors& operator=(const Ancestors&) = default;
  Ancestors(::crubit::UnsafeRelocateTag, Ancestors&& value);
  template <typename TAdaptedSelf_ = Ancestors>
  inline rs::IteratorAdapter<TAdaptedSelf_*> begin() & {
    return rs::IteratorAdapter<TAdaptedSelf_*>(this);
  }
  inline rs::IteratorEnd end() & { return rs::IteratorEnd(); }

 private:
  // Field type has been replaced with a blob of bytes: Failed to format the
  // referent of the reference type `&'static path::Path`: Failed to format type
  // for the definition of `path::Path`: Bindings for dynamically sized types
  // are not supported.
  ::std::array<unsigned char, 16> next;

 private:
  static void __crubit_field_offset_assertions();
};

//  A single component of a path.
//
//  A `Component` roughly corresponds to a substring between path separators
//  (`/` or `\\`).
//
//  This `enum` is created by iterating over [`Components`], which in turn is
//  created by the [`components`](Path::components) method on [`Path`].
//
//  # Examples
//
//  ```rust
//  use std::path::{Component, Path};
//
//  let path = Path::new("/tmp/foo/bar.txt");
//  let components = path.components().collect::<Vec<_>>();
//  assert_eq!(&components, &[
//      Component::RootDir,
//      Component::Normal("tmp".as_ref()),
//      Component::Normal("foo".as_ref()),
//      Component::Normal("bar.txt".as_ref()),
//  ]);
//  ```
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=527
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: path :: Component") alignas(8)
    [[clang::trivial_abi]] Component final {
 public:
  // `std::path::Component` doesn't implement the `Default` trait
  Component() = delete;

  //  A Windows path prefix, e.g., `C:` or `\\\\server\\share`.
  //
  //  There is a large variety of prefix types, see [`Prefix`]'s documentation
  //  for more.
  //
  //  Does not occur on Unix.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=535
  static ::rs::std::path::Component MakePrefix(
      ::rs::std::path::PrefixComponent __param_0);

  //  The root directory component, appears after any prefix and before anything
  //  else.
  //
  //  It represents a separator that designates that a path starts from root.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=541
  static constexpr Component MakeRootDir();

  //  A reference to the current directory, i.e., `.`.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=545
  static constexpr Component MakeCurDir();

  //  A reference to the parent directory, i.e., `..`.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=549
  static constexpr Component MakeParentDir();

  // Error generating bindings for variant `path::Component::Normal` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=556:
  // Failed to format the referent of the reference type `&ffi::os_str::OsStr`:
  // Failed to format type for the definition of `ffi::os_str::OsStr`: Bindings
  // for dynamically sized types are not supported.

  // No custom `Drop` impl and no custom "drop glue" required
  ~Component() = default;
  Component(Component&&) = default;
  Component& operator=(Component&&) = default;

  // Rust types that are `Copy` get trivial, `default` C++ copy constructor and
  // assignment operator.
  Component(const Component&) = default;
  Component& operator=(const Component&) = default;
  Component(::crubit::UnsafeRelocateTag, Component&& value);

  // Error generating bindings for associated function
  // `path::Component::<'a>::as_os_str` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=573:
  // Error formatting function return type `&'a ffi::os_str::OsStr`: Failed to
  // format the referent of the reference type `&'a ffi::os_str::OsStr`: Failed
  // to format type for the definition of `ffi::os_str::OsStr`: Bindings for
  // dynamically sized types are not supported.

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=525
  bool operator==(::rs::std::path::Component const& other) const;

  ::std::strong_ordering operator<=>(const Component& other) const;

 private:
  // Field type has been replaced with a blob of bytes: No support for bindings
  // of individual non-repr(C) `enum`s
  ::std::array<unsigned char, 56> __opaque_blob_of_bytes;

 private:
  struct PrivateBytesTag {};
  constexpr Component(PrivateBytesTag, ::std::array<unsigned char, 56> bytes)
      : __opaque_blob_of_bytes(bytes) {}

 private:
  static void __crubit_field_offset_assertions();
};

//  Helper struct for safely printing paths with [`format!`] and `{}`.
//
//  A [`Path`] might contain non-Unicode data. This `struct` implements the
//  [`Display`] trait in a way that mitigates that. It is created by the
//  [`display`](Path::display) method on [`Path`]. This may perform lossy
//  conversion, depending on the platform. If you would like an implementation
//  which escapes the path please use [`Debug`] instead.
//
//  # Examples
//
//  ```
//  use std::path::Path;
//
//  let path = Path::new("/tmp/foo.rs");
//
//  println!("{}", path.display());
//  ```
//
//  [`Display`]: fmt::Display
//  [`format!`]: crate::format
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=3735
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: path :: Display") alignas(8)
    [[clang::trivial_abi]] Display final {
 public:
  // `std::path::Display` doesn't implement the `Default` trait
  Display() = delete;

  // No custom `Drop` impl and no custom "drop glue" required
  ~Display() = default;
  Display(Display&&) = default;
  Display& operator=(Display&&) = default;

  // `std::path::Display` doesn't implement the `Clone` trait
  Display(const Display&) = delete;
  Display& operator=(const Display&) = delete;
  Display(::crubit::UnsafeRelocateTag, Display&& value);

  // AbslStringify and std::ostream support via std::fmt::Display
  template <typename Sink, typename Str = rs::alloc::string::String>
  friend void AbslStringify(Sink& sink, const Display& self) {
    crubit::Slot<Str> s;
    __crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std4path7DisplayNtNtCsaddbpR6HRqH_u5alloc6string8ToString9to_ustringB6_u(
        self, s.Get());
    AbslStringify(sink, ::std::move(s).AssumeInitAndTakeValue().as_str());
  }
  template <typename Str = rs::alloc::string::String>
  friend ::std::ostream& operator<<(::std::ostream& os, const Display& self) {
    crubit::Slot<Str> s;
    __crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std4path7DisplayNtNtCsaddbpR6HRqH_u5alloc6string8ToString9to_ustringB6_u(
        self, s.Get());
    return os << ::std::string_view(
               ::std::move(s).AssumeInitAndTakeValue().as_str());
  }

 private:
  union {
    // Generated from:
    // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=3736
    ::rs::std::ffi::os_str::Display inner;
  };

 private:
  static void __crubit_field_offset_assertions();
};

// Error generating bindings for constant `path::MAIN_SEPARATOR` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=290:
// Unsupported constant type: char

static constexpr rs_std::StrRef MAIN_SEPARATOR_STR = rs_std::StrRef("/");

// Error generating bindings for struct `path::Path` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=2356:
// Bindings for dynamically sized types are not supported.

//  An owned, mutable path (akin to [`String`]).
//
//  This type provides methods like [`push`] and [`set_extension`] that mutate
//  the path in place. It also implements [`Deref`] to [`Path`], meaning that
//  all methods on [`Path`] slices are available on `PathBuf` values as well.
//
//  [`push`]: PathBuf::push
//  [`set_extension`]: PathBuf::set_extension
//
//  More details about the overall approach can be found in
//  the [module documentation](self).
//
//  # Examples
//
//  You can use [`push`] to build up a `PathBuf` from
//  components:
//
//  ```
//  use std::path::PathBuf;
//
//  let mut path = PathBuf::new();
//
//  path.push(r"C:\\");
//  path.push("windows");
//  path.push("system32");
//
//  path.set_extension("dll");
//  ```
//
//  However, [`push`] is best used for dynamic situations. This is a better way
//  to do this when you know all of the components ahead of time:
//
//  ```
//  use std::path::PathBuf;
//
//  let path: PathBuf = [r"C:\\", "windows", "system32.dll"].iter().collect();
//  ```
//
//  We can still do better than this! Since these are all strings, we can use
//  `From::from`:
//
//  ```
//  use std::path::PathBuf;
//
//  let path = PathBuf::from(r"C:\\windows\\system32.dll");
//  ```
//
//  Which method works best depends on what kind of situation you're in.
//
//  Note that `PathBuf` does not always sanitize arguments, for example
//  [`push`] allows paths built from strings which include separators:
//
//  ```
//  use std::path::PathBuf;
//
//  let mut path = PathBuf::new();
//
//  path.push(r"C:\\");
//  path.push("windows");
//  path.push(r"..\\otherdir");
//  path.push("system32");
//  ```
//
//  The behavior of `PathBuf` may be changed to a panic on such inputs
//  in the future. [`Extend::extend`] should be used to add multi-part paths.
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=1214
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: path :: PathBuf") alignas(8)
    [[clang::trivial_abi]] PathBuf final {
 public:
  // Default::default
  PathBuf();

  // Drop::drop
  ~PathBuf();

  PathBuf(PathBuf&&);
  ::rs::std::path::PathBuf& operator=(PathBuf&&);

  // Clone::clone
  PathBuf(const PathBuf&);

  // Clone::clone_from
  ::rs::std::path::PathBuf& operator=(const PathBuf&);

  PathBuf(::crubit::UnsafeRelocateTag, PathBuf&& value);

  //  Allocates an empty `PathBuf`.
  //
  //  # Examples
  //
  //  ```
  //  use std::path::PathBuf;
  //
  //  let path = PathBuf::new();
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=1232
  [[nodiscard]] static ::rs::std::path::PathBuf new_();

  //  Creates a new `PathBuf` with a given capacity used to create the
  //  internal [`OsString`]. See [`with_capacity`] defined on [`OsString`].
  //
  //  # Examples
  //
  //  ```
  //  use std::path::PathBuf;
  //
  //  let mut path = PathBuf::with_capacity(10);
  //  let capacity = path.capacity();
  //
  //  // This push is done without reallocating
  //  path.push(r"C:\\");
  //
  //  assert_eq!(capacity, path.capacity());
  //  ```
  //
  //  [`with_capacity`]: OsString::with_capacity
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=1257
  [[nodiscard]] static ::rs::std::path::PathBuf with_capacity(
      ::std::uintptr_t capacity);

  // Error generating bindings for associated function `path::PathBuf::as_path`
  // defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=1275:
  // Error formatting function return type `&'__anon1 path::Path`: Failed to
  // format the referent of the reference type `&'__anon1 path::Path`: Failed to
  // format type for the definition of `path::Path`: Bindings for dynamically
  // sized types are not supported.

  // Error generating bindings for associated function `path::PathBuf::leak`
  // defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=1294:
  // Error formatting function return type `&'a mut path::Path`: Failed to
  // format the referent of the reference type `&'a mut path::Path`: Failed to
  // format type for the definition of `path::Path`: Bindings for dynamically
  // sized types are not supported.

  // Error generating bindings for associated function `path::PathBuf::push`
  // defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=1337:
  // Error handling parameter #1 of type `&path::Path`: Failed to format the
  // referent of the reference type `&path::Path`: Failed to format type for the
  // definition of `path::Path`: Bindings for dynamically sized types are not
  // supported.

  //  Truncates `self` to [`self.parent`].
  //
  //  Returns `false` and does nothing if [`self.parent`] is [`None`].
  //  Otherwise, returns `true`.
  //
  //  [`self.parent`]: Path::parent
  //
  //  # Examples
  //
  //  ```
  //  use std::path::{Path, PathBuf};
  //
  //  let mut p = PathBuf::from("/spirited/away.rs");
  //
  //  p.pop();
  //  assert_eq!(Path::new("/spirited"), p);
  //  p.pop();
  //  assert_eq!(Path::new("/"), p);
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=1442
  bool pop();

  // Error generating bindings for associated function
  // `path::PathBuf::set_file_name` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=1585:
  // Error handling parameter #1 of type `&ffi::os_str::OsStr`: Failed to format
  // the referent of the reference type `&ffi::os_str::OsStr`: Failed to format
  // type for the definition of `ffi::os_str::OsStr`: Bindings for dynamically
  // sized types are not supported.

  // Error generating bindings for associated function
  // `path::PathBuf::set_extension` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=1654:
  // Error handling parameter #1 of type `&ffi::os_str::OsStr`: Failed to format
  // the referent of the reference type `&ffi::os_str::OsStr`: Failed to format
  // type for the definition of `ffi::os_str::OsStr`: Bindings for dynamically
  // sized types are not supported.

  // Error generating bindings for associated function
  // `path::PathBuf::add_extension` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=1728:
  // Error handling parameter #1 of type `&ffi::os_str::OsStr`: Failed to format
  // the referent of the reference type `&ffi::os_str::OsStr`: Failed to format
  // type for the definition of `ffi::os_str::OsStr`: Bindings for dynamically
  // sized types are not supported.

  //  Yields a mutable reference to the underlying [`OsString`] instance.
  //
  //  # Examples
  //
  //  ```
  //  use std::path::{Path, PathBuf};
  //
  //  let mut path = PathBuf::from("/foo");
  //
  //  path.push("bar");
  //  assert_eq!(path, Path::new("/foo/bar"));
  //
  //  // OsString's `push` does not add a separator.
  //  path.as_mut_os_string().push("baz");
  //  assert_eq!(path, Path::new("/foo/barbaz"));
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=1778
  [[nodiscard]] ::rs::std::ffi::OsString& $(__anon1) as_mut_os_string() &
      $(__anon1) CRUBIT_LIFETIME_BOUND;

  //  Consumes the `PathBuf`, yielding its internal [`OsString`] storage.
  //
  //  # Examples
  //
  //  ```
  //  use std::path::PathBuf;
  //
  //  let p = PathBuf::from("/the/head");
  //  let os_str = p.into_os_string();
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=1795
  [[nodiscard("`self` will be dropped if the result is not used")]] ::rs::std::
      ffi::OsString
      into_os_string() &&;

  //  Converts the `PathBuf` into a `String` if it contains valid Unicode data.
  //
  //  On failure, ownership of the original `PathBuf` is returned.
  //
  //  # Examples
  //
  //  ```
  //  use std::path::PathBuf;
  //
  //  let path_buf = PathBuf::from("foo");
  //  let string = path_buf.into_string();
  //  assert_eq!(string, Ok(String::from("foo")));
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=1813
  rs_std::Result<::rs::alloc::string::String, ::rs::std::path::PathBuf>
  into_string() &&;

  // Error generating bindings for associated function
  // `path::PathBuf::into_boxed_path` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=1821:
  // Error formatting function return type
  // `alloc_crate::boxed::Box<path::Path>`: Generic types are not supported yet
  // (b/259749095)

  //  Invokes [`capacity`] on the underlying instance of [`OsString`].
  //
  //  [`capacity`]: OsString::capacity
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=1832
  [[nodiscard]] ::std::uintptr_t capacity() const;

  //  Invokes [`clear`] on the underlying instance of [`OsString`].
  //
  //  [`clear`]: OsString::clear
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=1841
  void clear();

  //  Invokes [`reserve`] on the underlying instance of [`OsString`].
  //
  //  [`reserve`]: OsString::reserve
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=1850
  void reserve(::std::uintptr_t additional);

  // Error generating bindings for associated function
  // `path::PathBuf::try_reserve` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=1859:
  // Error formatting function return type `core::result::Result<(),
  // alloc_crate::collections::TryReserveError>`: Generic types are not
  // supported yet (b/259749095)

  //  Invokes [`reserve_exact`] on the underlying instance of [`OsString`].
  //
  //  [`reserve_exact`]: OsString::reserve_exact
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=1868
  void reserve_exact(::std::uintptr_t additional);

  // Error generating bindings for associated function
  // `path::PathBuf::try_reserve_exact` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=1877:
  // Error formatting function return type `core::result::Result<(),
  // alloc_crate::collections::TryReserveError>`: Generic types are not
  // supported yet (b/259749095)

  //  Invokes [`shrink_to_fit`] on the underlying instance of [`OsString`].
  //
  //  [`shrink_to_fit`]: OsString::shrink_to_fit
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=1886
  void shrink_to_fit();

  //  Invokes [`shrink_to`] on the underlying instance of [`OsString`].
  //
  //  [`shrink_to`]: OsString::shrink_to
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=1895
  void shrink_to(::std::uintptr_t min_capacity);

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=2005
  explicit operator ::rs::std::ffi::OsString();

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=2247
  bool operator==(::rs::std::path::PathBuf const& other) const;

  // Error generating bindings for associated function `<path::PathBuf as
  // core::cmp::PartialEq<str>>::eq` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=2255:
  // The following Rust type is not supported yet: str

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=2271
  bool operator==(::rs::alloc::string::String const& other) const;

  // Error generating bindings for associated function `<path::PathBuf as
  // core::cmp::PartialEq<path::Path>>::eq` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=3952:
  // Error handling parameter #1 of type `&'__anon2 path::Path`: Failed to
  // format the referent of the reference type `&'__anon2 path::Path`: Failed to
  // format type for the definition of `path::Path`: Bindings for dynamically
  // sized types are not supported.

  // Error generating bindings for associated function `<path::PathBuf as
  // core::cmp::PartialEq<&path::Path>>::eq` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=3952:
  // Error handling parameter #1 of type `&'__anon2 &'__anon3 path::Path`:
  // Failed to format the referent of the reference type `&'__anon2 &'__anon3
  // path::Path`: Failed to format the referent of the reference type `&'__anon3
  // path::Path`: Failed to format type for the definition of `path::Path`:
  // Bindings for dynamically sized types are not supported.

  // Error generating bindings for associated function `<path::PathBuf as
  // core::cmp::PartialEq<alloc_crate::borrow::Cow<'_, path::Path>>>::eq`
  // defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=3960:
  // Error handling parameter #1 of type `&'__anon2
  // alloc_crate::borrow::Cow<'__anon3, path::Path>`: Failed to format the
  // referent of the reference type `&'__anon2
  // alloc_crate::borrow::Cow<'__anon3, path::Path>`: Generic types are not
  // supported yet (b/259749095)

  // Error generating bindings for associated function `<path::PathBuf as
  // core::cmp::PartialEq<ffi::os_str::OsStr>>::eq` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=3994:
  // Error handling parameter #1 of type `&'__anon2 ffi::os_str::OsStr`: Failed
  // to format the referent of the reference type `&'__anon2
  // ffi::os_str::OsStr`: Failed to format type for the definition of
  // `ffi::os_str::OsStr`: Bindings for dynamically sized types are not
  // supported.

  // Error generating bindings for associated function `<path::PathBuf as
  // core::cmp::PartialEq<&ffi::os_str::OsStr>>::eq` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=3994:
  // Error handling parameter #1 of type `&'__anon2 &'__anon3
  // ffi::os_str::OsStr`: Failed to format the referent of the reference type
  // `&'__anon2 &'__anon3 ffi::os_str::OsStr`: Failed to format the referent of
  // the reference type `&'__anon3 ffi::os_str::OsStr`: Failed to format type
  // for the definition of `ffi::os_str::OsStr`: Bindings for dynamically sized
  // types are not supported.

  // Error generating bindings for associated function `<path::PathBuf as
  // core::cmp::PartialEq<alloc_crate::borrow::Cow<'_,
  // ffi::os_str::OsStr>>>::eq` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=3994:
  // Error handling parameter #1 of type `&'__anon2
  // alloc_crate::borrow::Cow<'__anon3, ffi::os_str::OsStr>`: Failed to format
  // the referent of the reference type `&'__anon2
  // alloc_crate::borrow::Cow<'__anon3, ffi::os_str::OsStr>`: Generic types are
  // not supported yet (b/259749095)

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=3994
  bool operator==(::rs::std::ffi::OsString const& other) const;

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=1994
  explicit PathBuf(::rs::std::ffi::OsString value);

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=2016
  explicit PathBuf(::rs::alloc::string::String value);

  // Error generating bindings for struct `path::PathBuf` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=1214:
  // Failed to format IntoIterator::Item: Failed to format the referent of the
  // reference type `&ffi::os_str::OsStr`: Failed to format type for the
  // definition of `ffi::os_str::OsStr`: Bindings for dynamically sized types
  // are not supported.

  ::std::strong_ordering operator<=>(const PathBuf& other) const;

  // Error generating bindings for implementation `<path::PathBuf as
  // core::cmp::PartialOrd<path::Path>>` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=3966:
  // Failed to format the referent of the reference type `&path::Path`: Failed
  // to format type for the definition of `path::Path`: Bindings for dynamically
  // sized types are not supported.

  // Error generating bindings for implementation `<path::PathBuf as
  // core::cmp::PartialOrd<&path::Path>>` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=3966:
  // Failed to format the referent of the reference type `&&'static path::Path`:
  // Failed to format the referent of the reference type `&'static path::Path`:
  // Failed to format type for the definition of `path::Path`: Bindings for
  // dynamically sized types are not supported.

  // Error generating bindings for implementation `<path::PathBuf as
  // core::cmp::PartialOrd<alloc_crate::borrow::Cow<'_, path::Path>>>` defined
  // at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=3974:
  // Failed to format the referent of the reference type
  // `&alloc_crate::borrow::Cow<'static, path::Path>`: Generic types are not
  // supported yet (b/259749095)

  // Error generating bindings for implementation `<path::PathBuf as
  // core::cmp::PartialOrd<ffi::os_str::OsStr>>` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=4008:
  // Failed to format the referent of the reference type `&ffi::os_str::OsStr`:
  // Failed to format type for the definition of `ffi::os_str::OsStr`: Bindings
  // for dynamically sized types are not supported.

  // Error generating bindings for implementation `<path::PathBuf as
  // core::cmp::PartialOrd<&ffi::os_str::OsStr>>` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=4008:
  // Failed to format the referent of the reference type `&&'static
  // ffi::os_str::OsStr`: Failed to format the referent of the reference type
  // `&'static ffi::os_str::OsStr`: Failed to format type for the definition of
  // `ffi::os_str::OsStr`: Bindings for dynamically sized types are not
  // supported.

  // Error generating bindings for implementation `<path::PathBuf as
  // core::cmp::PartialOrd<alloc_crate::borrow::Cow<'_, ffi::os_str::OsStr>>>`
  // defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=4008:
  // Failed to format the referent of the reference type
  // `&alloc_crate::borrow::Cow<'static, ffi::os_str::OsStr>`: Generic types are
  // not supported yet (b/259749095)

  ::std::partial_ordering operator<=>(
      ::rs::std::ffi::OsString const& other) const;

 private:
  union {
    // Generated from:
    // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=1215
    ::rs::std::ffi::OsString inner;
  };

 private:
  static void __crubit_field_offset_assertions();
};

//  Windows path prefixes, e.g., `C:` or `\\\\server\\share`.
//
//  Windows uses a variety of path prefix styles, including references to drive
//  volumes (like `C:`), network shared folders (like `\\\\server\\share`), and
//  others. In addition, some path prefixes are "verbatim" (i.e., prefixed with
//  `\\\\?\\`), in which case `/` is *not* treated as a separator and
//  essentially no normalization is performed.
//
//  # Examples
//
//  ```
//  use std::path::{Component, Path, Prefix};
//  use std::path::Prefix::*;
//  use std::ffi::OsStr;
//
//  fn get_path_prefix(s: &str) -> Prefix<'_> {
//      let path = Path::new(s);
//      match path.components().next().unwrap() {
//          Component::Prefix(prefix_component) => prefix_component.kind(),
//          _ => panic!(),
//      }
//  }
//
//  # if cfg!(windows) {
//  assert_eq!(Verbatim(OsStr::new("pictures")),
//             get_path_prefix(r"\\\\?\\pictures\\kittens"));
//  assert_eq!(VerbatimUNC(OsStr::new("server"), OsStr::new("share")),
//             get_path_prefix(r"\\\\?\\UNC\\server\\share"));
//  assert_eq!(VerbatimDisk(b'C'), get_path_prefix(r"\\\\?\\c:\\"));
//  assert_eq!(DeviceNS(OsStr::new("BrainInterface")),
//             get_path_prefix(r"\\\\.\\BrainInterface"));
//  assert_eq!(UNC(OsStr::new("server"), OsStr::new("share")),
//             get_path_prefix(r"\\\\server\\share"));
//  assert_eq!(Disk(b'C'),
//  get_path_prefix(r"C:\\Users\\Rust\\Pictures\\Ferris")); # }
//  ```
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=151
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: path :: Prefix") alignas(8)
    [[clang::trivial_abi]] Prefix final {
 public:
  // `std::path::Prefix` doesn't implement the `Default` trait
  Prefix() = delete;

  // Error generating bindings for variant `path::Prefix::Verbatim` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=157:
  // Failed to format the referent of the reference type `&ffi::os_str::OsStr`:
  // Failed to format type for the definition of `ffi::os_str::OsStr`: Bindings
  // for dynamically sized types are not supported.

  // Error generating bindings for variant `path::Prefix::VerbatimUNC` defined
  // at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=165:
  // Failed to format the referent of the reference type `&ffi::os_str::OsStr`:
  // Failed to format type for the definition of `ffi::os_str::OsStr`: Bindings
  // for dynamically sized types are not supported.

  //  Verbatim disk prefix, e.g., `\\\\?\\C:`.
  //
  //  Verbatim disk prefixes consist of `\\\\?\\` immediately followed by the
  //  drive letter and `:`.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=175
  static ::rs::std::path::Prefix MakeVerbatimDisk(::std::uint8_t __param_0);

  // Error generating bindings for variant `path::Prefix::DeviceNS` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=182:
  // Failed to format the referent of the reference type `&ffi::os_str::OsStr`:
  // Failed to format type for the definition of `ffi::os_str::OsStr`: Bindings
  // for dynamically sized types are not supported.

  // Error generating bindings for variant `path::Prefix::UNC` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=189:
  // Failed to format the referent of the reference type `&ffi::os_str::OsStr`:
  // Failed to format type for the definition of `ffi::os_str::OsStr`: Bindings
  // for dynamically sized types are not supported.

  //  Prefix `C:` for the given disk drive.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=196
  static ::rs::std::path::Prefix MakeDisk(::std::uint8_t __param_0);

  // No custom `Drop` impl and no custom "drop glue" required
  ~Prefix() = default;
  Prefix(Prefix&&) = default;
  Prefix& operator=(Prefix&&) = default;

  // Rust types that are `Copy` get trivial, `default` C++ copy constructor and
  // assignment operator.
  Prefix(const Prefix&) = default;
  Prefix& operator=(const Prefix&) = default;
  Prefix(::crubit::UnsafeRelocateTag, Prefix&& value);

  //  Determines if the prefix is verbatim, i.e., begins with `\\\\?\\`.
  //
  //  # Examples
  //
  //  ```
  //  use std::path::Prefix::*;
  //  use std::ffi::OsStr;
  //
  //  assert!(Verbatim(OsStr::new("pictures")).is_verbatim());
  //  assert!(VerbatimUNC(OsStr::new("server"),
  //  OsStr::new("share")).is_verbatim());
  //  assert!(VerbatimDisk(b'C').is_verbatim());
  //  assert!(!DeviceNS(OsStr::new("BrainInterface")).is_verbatim());
  //  assert!(!UNC(OsStr::new("server"), OsStr::new("share")).is_verbatim());
  //  assert!(!Disk(b'C').is_verbatim());
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=236
  [[nodiscard]] bool is_verbatim() const;

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=149
  bool operator==(::rs::std::path::Prefix const& other) const;

  ::std::strong_ordering operator<=>(const Prefix& other) const;

 private:
  // Field type has been replaced with a blob of bytes: No support for bindings
  // of individual non-repr(C) `enum`s
  ::std::array<unsigned char, 40> __opaque_blob_of_bytes;

 private:
  struct PrivateBytesTag {};
  constexpr Prefix(PrivateBytesTag, ::std::array<unsigned char, 40> bytes)
      : __opaque_blob_of_bytes(bytes) {}

 private:
  static void __crubit_field_offset_assertions();
};

//  A structure wrapping a Windows path prefix as well as its unparsed string
//  representation.
//
//  In addition to the parsed [`Prefix`] information returned by [`kind`],
//  `PrefixComponent` also holds the raw and unparsed [`OsStr`] slice,
//  returned by [`as_os_str`].
//
//  Instances of this `struct` can be obtained by matching against the
//  [`Prefix` variant] on [`Component`].
//
//  Does not occur on Unix.
//
//  # Examples
//
//  ```
//  # if cfg!(windows) {
//  use std::path::{Component, Path, Prefix};
//  use std::ffi::OsStr;
//
//  let path = Path::new(r"c:\\you\\later\\");
//  match path.components().next().unwrap() {
//      Component::Prefix(prefix_component) => {
//          assert_eq!(Prefix::Disk(b'C'), prefix_component.kind());
//          assert_eq!(OsStr::new("c:"), prefix_component.as_os_str());
//      }
//      _ => unreachable!(),
//  }
//  # }
//  ```
//
//  [`as_os_str`]: PrefixComponent::as_os_str
//  [`kind`]: PrefixComponent::kind
//  [`Prefix` variant]: Component::Prefix
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=443
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: path :: PrefixComponent") alignas(8)
    [[clang::trivial_abi]] PrefixComponent final {
 public:
  // `std::path::PrefixComponent` doesn't implement the `Default` trait
  PrefixComponent() = delete;

  // No custom `Drop` impl and no custom "drop glue" required
  ~PrefixComponent() = default;
  PrefixComponent(PrefixComponent&&) = default;
  PrefixComponent& operator=(PrefixComponent&&) = default;

  // Rust types that are `Copy` get trivial, `default` C++ copy constructor and
  // assignment operator.
  PrefixComponent(const PrefixComponent&) = default;
  PrefixComponent& operator=(const PrefixComponent&) = default;
  PrefixComponent(::crubit::UnsafeRelocateTag, PrefixComponent&& value);

  //  Returns the parsed prefix data.
  //
  //  See [`Prefix`]'s documentation for more information on the different
  //  kinds of prefixes.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=459
  [[nodiscard]] ::rs::std::path::Prefix kind() const;

  // Error generating bindings for associated function
  // `path::PrefixComponent::<'a>::as_os_str` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=467:
  // Error formatting function return type `&'a ffi::os_str::OsStr`: Failed to
  // format the referent of the reference type `&'a ffi::os_str::OsStr`: Failed
  // to format type for the definition of `ffi::os_str::OsStr`: Bindings for
  // dynamically sized types are not supported.

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=475
  bool operator==(::rs::std::path::PrefixComponent const& other) const;

  ::std::strong_ordering operator<=>(const PrefixComponent& other) const;

 private:
  union {
    //  The parsed prefix data.
    //
    // Generated from:
    // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=448
    ::rs::std::path::Prefix parsed;
  };
  // Field type has been replaced with a blob of bytes: Failed to format the
  // referent of the reference type `&ffi::os_str::OsStr`: Failed to format type
  // for the definition of `ffi::os_str::OsStr`: Bindings for dynamically sized
  // types are not supported.
  ::std::array<unsigned char, 16> raw;

 private:
  static void __crubit_field_offset_assertions();
};

// Error generating bindings for struct `path::StripPrefixError` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=2368:
// Zero-sized types (ZSTs) are not supported (b/258259459)

// Error generating bindings for function `path::absolute` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=4144:
// Error handling parameter #0 of type `&path::Path`: Failed to format the
// referent of the reference type `&path::Path`: Failed to format type for the
// definition of `path::Path`: Bindings for dynamically sized types are not
// supported.

//  Determines whether the character is one of the permitted path
//  separators for the current platform.
//
//  # Examples
//
//  ```
//  use std::path;
//
//  assert!(path::is_separator('/')); // '/' works for both Unix and Windows
//  assert!(!path::is_separator('❤'));
//  ```
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=270
[[nodiscard]] bool is_separator(rs_std::char_ c);

}  // namespace rs::std::path

namespace rs::std::process {

//  A handle to a child process's stderr.
//
//  This struct is used in the [`stderr`] field on [`Child`].
//
//  When an instance of `ChildStderr` is [dropped], the `ChildStderr`'s
//  underlying file handle will be closed.
//
//  [`stderr`]: Child::stderr
//  [dropped]: Drop
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=471
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: process :: ChildStderr") alignas(4)
    [[clang::trivial_abi]] ChildStderr final {
 public:
  // `std::process::ChildStderr` doesn't implement the `Default` trait
  ChildStderr() = delete;

  // Drop::drop
  ~ChildStderr();

  // C++ move operations are unavailable for this type. See
  // http://crubit.rs/rust/movable_types for an explanation of Rust types that
  // are C++ movable.
  ChildStderr(ChildStderr&&) = delete;
  ::rs::std::process::ChildStderr& operator=(ChildStderr&&) = delete;
  // `std::process::ChildStderr` doesn't implement the `Clone` trait
  ChildStderr(const ChildStderr&) = delete;
  ChildStderr& operator=(const ChildStderr&) = delete;
  ChildStderr(::crubit::UnsafeRelocateTag, ChildStderr&& value);

 private:
  // Field type has been replaced with a blob of bytes: Not a public or a
  // supported reexported type (b/262052635).
  ::std::array<unsigned char, 4> inner;

 private:
  static void __crubit_field_offset_assertions();
};

//  A handle to a child process's standard input (stdin).
//
//  This struct is used in the [`stdin`] field on [`Child`].
//
//  When an instance of `ChildStdin` is [dropped], the `ChildStdin`'s underlying
//  file handle will be closed. If the child process was blocked on input prior
//  to being dropped, it will become unblocked after dropping.
//
//  [`stdin`]: Child::stdin
//  [dropped]: Drop
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=315
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: process :: ChildStdin") alignas(4)
    [[clang::trivial_abi]] ChildStdin final {
 public:
  // `std::process::ChildStdin` doesn't implement the `Default` trait
  ChildStdin() = delete;

  // Drop::drop
  ~ChildStdin();

  // C++ move operations are unavailable for this type. See
  // http://crubit.rs/rust/movable_types for an explanation of Rust types that
  // are C++ movable.
  ChildStdin(ChildStdin&&) = delete;
  ::rs::std::process::ChildStdin& operator=(ChildStdin&&) = delete;
  // `std::process::ChildStdin` doesn't implement the `Clone` trait
  ChildStdin(const ChildStdin&) = delete;
  ChildStdin& operator=(const ChildStdin&) = delete;
  ChildStdin(::crubit::UnsafeRelocateTag, ChildStdin&& value);

 private:
  // Field type has been replaced with a blob of bytes: Not a public or a
  // supported reexported type (b/262052635).
  ::std::array<unsigned char, 4> inner;

 private:
  static void __crubit_field_offset_assertions();
};

//  A handle to a child process's standard output (stdout).
//
//  This struct is used in the [`stdout`] field on [`Child`].
//
//  When an instance of `ChildStdout` is [dropped], the `ChildStdout`'s
//  underlying file handle will be closed.
//
//  [`stdout`]: Child::stdout
//  [dropped]: Drop
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=401
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: process :: ChildStdout") alignas(4)
    [[clang::trivial_abi]] ChildStdout final {
 public:
  // `std::process::ChildStdout` doesn't implement the `Default` trait
  ChildStdout() = delete;

  // Drop::drop
  ~ChildStdout();

  // C++ move operations are unavailable for this type. See
  // http://crubit.rs/rust/movable_types for an explanation of Rust types that
  // are C++ movable.
  ChildStdout(ChildStdout&&) = delete;
  ::rs::std::process::ChildStdout& operator=(ChildStdout&&) = delete;
  // `std::process::ChildStdout` doesn't implement the `Clone` trait
  ChildStdout(const ChildStdout&) = delete;
  ChildStdout& operator=(const ChildStdout&) = delete;
  ChildStdout(::crubit::UnsafeRelocateTag, ChildStdout&& value);

 private:
  // Field type has been replaced with a blob of bytes: Not a public or a
  // supported reexported type (b/262052635).
  ::std::array<unsigned char, 4> inner;

 private:
  static void __crubit_field_offset_assertions();
};

//  A process builder, providing fine-grained control
//  over how a new process should be spawned.
//
//  A default configuration can be
//  generated using `Command::new(program)`, where `program` gives a path to the
//  program to be executed. Additional builder methods allow the configuration
//  to be changed (for example, by adding arguments) prior to spawning:
//
//  ```
//  # if cfg!(not(all(target_vendor = "apple", not(target_os = "macos")))) {
//  use std::process::Command;
//
//  let output = if cfg!(target_os = "windows") {
//      Command::new("cmd")
//          .args(["/C", "echo hello"])
//          .output()
//          .expect("failed to execute process")
//  } else {
//      Command::new("sh")
//          .arg("-c")
//          .arg("echo hello")
//          .output()
//          .expect("failed to execute process")
//  };
//
//  let hello = output.stdout;
//  # }
//  ```
//
//  `Command` can be reused to spawn multiple processes. The builder methods
//  change the command without needing to immediately spawn the process.
//
//  ```no_run
//  use std::process::Command;
//
//  let mut echo_hello = Command::new("sh");
//  echo_hello.arg("-c").arg("echo hello");
//  let hello_1 = echo_hello.output().expect("failed to execute process");
//  let hello_2 = echo_hello.output().expect("failed to execute process");
//  ```
//
//  Similarly, you can call builder methods after spawning a process and then
//  spawn a new process with the modified settings.
//
//  ```no_run
//  use std::process::Command;
//
//  let mut list_dir = Command::new("ls");
//
//  // Execute `ls` in the current directory of the program.
//  list_dir.status().expect("process failed to execute");
//
//  println!();
//
//  // Change `ls` to execute in the root directory.
//  list_dir.current_dir("/");
//
//  // And then execute `ls` again but in the root directory.
//  list_dir.status().expect("process failed to execute");
//  ```
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=593
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: process :: Command") alignas(8)
    [[clang::trivial_abi]] Command final {
 public:
  // `std::process::Command` doesn't implement the `Default` trait
  Command() = delete;

  // Drop::drop
  ~Command();

  // C++ move operations are unavailable for this type. See
  // http://crubit.rs/rust/movable_types for an explanation of Rust types that
  // are C++ movable.
  Command(Command&&) = delete;
  ::rs::std::process::Command& operator=(Command&&) = delete;
  // `std::process::Command` doesn't implement the `Clone` trait
  Command(const Command&) = delete;
  Command& operator=(const Command&) = delete;
  Command(::crubit::UnsafeRelocateTag, Command&& value);

  // Error generating bindings for associated function `process::Command::new`
  // defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=687:
  // Error handling parameter #0 of type `&ffi::os_str::OsStr`: Failed to format
  // the referent of the reference type `&ffi::os_str::OsStr`: Failed to format
  // type for the definition of `ffi::os_str::OsStr`: Bindings for dynamically
  // sized types are not supported.

  // Error generating bindings for associated function `process::Command::arg`
  // defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=750:
  // Error handling parameter #1 of type `&ffi::os_str::OsStr`: Failed to format
  // the referent of the reference type `&ffi::os_str::OsStr`: Failed to format
  // type for the definition of `ffi::os_str::OsStr`: Bindings for dynamically
  // sized types are not supported.

  // Error generating bindings for associated function `process::Command::args`
  // defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=796:
  // No valid non-generic replacement for generic type param `I`

  // Error generating bindings for associated function `process::Command::env`
  // defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=832:
  // Error handling parameter #1 of type `&ffi::os_str::OsStr`: Failed to format
  // the referent of the reference type `&ffi::os_str::OsStr`: Failed to format
  // type for the definition of `ffi::os_str::OsStr`: Bindings for dynamically
  // sized types are not supported.

  // Error generating bindings for associated function `process::Command::envs`
  // defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=876:
  // No valid non-generic replacement for generic type param `I`

  // Error generating bindings for associated function
  // `process::Command::env_remove` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=916:
  // Error handling parameter #1 of type `&ffi::os_str::OsStr`: Failed to format
  // the referent of the reference type `&ffi::os_str::OsStr`: Failed to format
  // type for the definition of `ffi::os_str::OsStr`: Bindings for dynamically
  // sized types are not supported.

  //  Clears all explicitly set environment variables and prevents inheriting
  //  any parent process environment variables.
  //
  //  This method will remove all explicitly added environment variables set via
  //  [`Command::env`] or [`Command::envs`]. In addition, it will prevent the
  //  spawned child process from inheriting any environment variable from its
  //  parent process.
  //
  //  After calling [`Command::env_clear`], the iterator from
  //  [`Command::get_envs`] will be empty.
  //
  //  You can use [`Command::env_remove`] to clear a single mapping.
  //
  //  # Examples
  //
  //  The behavior of `sort` is affected by `LANG` and `LC_*` environment
  //  variables. Clearing the environment makes `sort`'s behavior independent of
  //  the parent processes' language.
  //
  //  ```no_run
  //  use std::process::Command;
  //
  //  Command::new("sort")
  //      .arg("file.txt")
  //      .env_clear()
  //      .spawn()?;
  //  # std::io::Result::Ok(())
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=948
  ::rs::std::process::Command& $(__anon1) env_clear() &
      $(__anon1) CRUBIT_LIFETIME_BOUND;

  // Error generating bindings for associated function
  // `process::Command::current_dir` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=976:
  // Error handling parameter #1 of type `&path::Path`: Failed to format the
  // referent of the reference type `&path::Path`: Failed to format type for the
  // definition of `path::Path`: Bindings for dynamically sized types are not
  // supported.

  // Error generating bindings for associated function `process::Command::stdin`
  // defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=1003:
  // Can't pass type `process::Stdio` by value without a move constructor. See
  // crubit.rs/rust/movable_types for what types are C++ movable.

  // Error generating bindings for associated function
  // `process::Command::stdout` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=1030:
  // Can't pass type `process::Stdio` by value without a move constructor. See
  // crubit.rs/rust/movable_types for what types are C++ movable.

  // Error generating bindings for associated function
  // `process::Command::stderr` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=1057:
  // Can't pass type `process::Stdio` by value without a move constructor. See
  // crubit.rs/rust/movable_types for what types are C++ movable.

  //  Executes the command as a child process, returning a handle to it.
  //
  //  By default, stdin, stdout and stderr are inherited from the parent.
  //
  //  # Errors
  //
  //  This method returns an [`io::Error`] if the child process could not be
  //  spawned. Common reasons include:
  //
  //  * the program could not be found (for example, it does not exist, or,
  //    when given a bare name, it is not present in the `PATH`);
  //  * the current process does not have permission to execute the program
  //    (for example, the file is not marked executable, or execution is
  //    denied by a security policy such as `seccomp`);
  //  * the operating system could not create the new process because of
  //    resource exhaustion (for example, a limit on the number of processes
  //    was reached).
  //
  //  An error is only returned for failures that occur while the child is
  //  being spawned. Once the child has started successfully, anything that
  //  happens to it afterwards — including being terminated by a signal — is
  //  reported through its [`ExitStatus`] rather than as an error from the
  //  spawning method.
  //
  //  # Examples
  //
  //  ```no_run
  //  use std::process::Command;
  //
  //  Command::new("ls")
  //      .spawn()
  //      .expect("ls command failed to start");
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=1096
  rs_std::Result<::rs::std::process::Child, ::rs::std::io::Error> spawn();

  //  Executes the command as a child process, waiting for it to finish and
  //  collecting all of its output.
  //
  //  By default, stdout and stderr are captured (and used to provide the
  //  resulting output). Stdin is not inherited from the parent and any
  //  attempt by the child process to read from the stdin stream will result
  //  in the stream immediately closing.
  //
  //  # Errors
  //
  //  Like [`spawn`], this method returns an [`io::Error`] if the child
  //  process could not be spawned; see [`spawn`] for the common reasons. It
  //  may also return an error if reading the child's output or waiting on the
  //  child fails.
  //
  //  Note that this method does **not** return an error if the child runs and
  //  then exits unsuccessfully, or is terminated by a signal. In those cases
  //  it still returns [`Ok`], and the outcome is reflected in the
  //  [`ExitStatus`] stored in the returned [`Output`].
  //
  //  [`spawn`]: Command::spawn
  //
  //  # Examples
  //
  //  ```should_panic
  //  use std::process::Command;
  //  use std::io::{self, Write};
  //  let output = Command::new("/bin/cat")
  //      .arg("file.txt")
  //      .output()?;
  //
  //  println!("status: {}", output.status);
  //  io::stdout().write_all(&output.stdout)?;
  //  io::stderr().write_all(&output.stderr)?;
  //
  //  assert!(output.status.success());
  //  # io::Result::Ok(())
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=1139
  rs_std::Result<::rs::std::process::Output, ::rs::std::io::Error> output();

  //  Executes a command as a child process, waiting for it to finish and
  //  collecting its status.
  //
  //  By default, stdin, stdout and stderr are inherited from the parent.
  //
  //  # Errors
  //
  //  Like [`spawn`], this method returns an [`io::Error`] if the child
  //  process could not be spawned; see [`spawn`] for the common reasons. It
  //  may also return an error if waiting on the child fails.
  //
  //  Note that this method does **not** return an error if the child runs and
  //  then exits unsuccessfully, or is terminated by a signal. In those cases
  //  it still returns [`Ok`], and the outcome is reflected in the returned
  //  [`ExitStatus`].
  //
  //  [`spawn`]: Command::spawn
  //
  //  # Examples
  //
  //  ```should_panic
  //  use std::process::Command;
  //
  //  let status = Command::new("/bin/cat")
  //      .arg("file.txt")
  //      .status()
  //      .expect("failed to execute process");
  //
  //  println!("process finished with: {status}");
  //
  //  assert!(status.success());
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=1177
  rs_std::Result<::rs::std::process::ExitStatus, ::rs::std::io::Error> status();

  // Error generating bindings for associated function
  // `process::Command::get_program` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=1196:
  // Error formatting function return type `&'__anon1 ffi::os_str::OsStr`:
  // Failed to format the referent of the reference type `&'__anon1
  // ffi::os_str::OsStr`: Failed to format type for the definition of
  // `ffi::os_str::OsStr`: Bindings for dynamically sized types are not
  // supported.

  //  Returns an iterator of the arguments that will be passed to the program.
  //
  //  This does not include the path to the program as the first argument;
  //  it only includes the arguments specified with [`Command::arg`] and
  //  [`Command::args`].
  //
  //  # Examples
  //
  //  ```
  //  use std::ffi::OsStr;
  //  use std::process::Command;
  //
  //  let mut cmd = Command::new("echo");
  //  cmd.arg("first").arg("second");
  //  let args: Vec<&OsStr> = cmd.get_args().collect();
  //  assert_eq!(args, &["first", "second"]);
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=1218
  ::rs::std::process::CommandArgs get_args() const& $(__anon1)
      CRUBIT_LIFETIME_BOUND;

  //  Returns an iterator of the environment variables explicitly set for the
  //  child process.
  //
  //  Environment variables explicitly set using [`Command::env`],
  //  [`Command::envs`], and
  //  [`Command::env_remove`] can be retrieved with this method.
  //
  //  Note that this output does not include environment variables inherited
  //  from the parent process. To see the full list of environment variables,
  //  including those inherited from the parent process, use
  //  [`Command::get_resolved_envs`].
  //
  //  Each element is a tuple key/value pair `(&OsStr, Option<&OsStr>)`. A
  //  [`None`] value indicates its key was explicitly removed via
  //  [`Command::env_remove`]. The associated key for the [`None`] value will no
  //  longer inherit from its parent process.
  //
  //  An empty iterator can indicate that no explicit mappings were added or
  //  that
  //  [`Command::env_clear`] was called. After calling [`Command::env_clear`],
  //  the child process will not inherit any environment variables from its
  //  parent process.
  //
  //  # Examples
  //
  //  ```
  //  use std::ffi::OsStr;
  //  use std::process::Command;
  //
  //  let mut cmd = Command::new("ls");
  //  cmd.env("TERM", "dumb").env_remove("TZ");
  //  let envs: Vec<(&OsStr, Option<&OsStr>)> = cmd.get_envs().collect();
  //  assert_eq!(envs, &[
  //      (OsStr::new("TERM"), Some(OsStr::new("dumb"))),
  //      (OsStr::new("TZ"), None)
  //  ]);
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=1254
  ::rs::std::process::CommandEnvs get_envs() const& $(__anon1)
      CRUBIT_LIFETIME_BOUND;

  // Error generating bindings for associated function
  // `process::Command::get_current_dir` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=1311:
  // Error formatting function return type `core::option::Option<&'__anon1
  // path::Path>`: Failed to format the referent of the reference type `&'static
  // path::Path`: Failed to format type for the definition of `path::Path`:
  // Bindings for dynamically sized types are not supported.

 private:
  // Field type has been replaced with a blob of bytes: Not a public or a
  // supported reexported type (b/262052635).
  ::std::array<unsigned char, 200> inner;

 private:
  static void __crubit_field_offset_assertions();
};

//  An iterator over the command arguments.
//
//  This struct is created by [`Command::get_args`]. See its documentation for
//  more.
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=1380
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: process :: CommandArgs") alignas(8)
    [[clang::trivial_abi]] [[nodiscard(
        "iterators are lazy and do nothing unless consumed")]]
    CommandArgs final {
 public:
  // `std::process::CommandArgs` doesn't implement the `Default` trait
  CommandArgs() = delete;

  // No custom `Drop` impl and no custom "drop glue" required
  ~CommandArgs() = default;
  CommandArgs(CommandArgs&&) = default;
  CommandArgs& operator=(CommandArgs&&) = default;

  // `std::process::CommandArgs` doesn't implement the `Clone` trait
  CommandArgs(const CommandArgs&) = delete;
  CommandArgs& operator=(const CommandArgs&) = delete;
  CommandArgs(::crubit::UnsafeRelocateTag, CommandArgs&& value);
  template <typename TAdaptedSelf_ = CommandArgs>
  inline rs::IteratorAdapter<TAdaptedSelf_*> begin() & {
    return rs::IteratorAdapter<TAdaptedSelf_*>(this);
  }
  inline rs::IteratorEnd end() & { return rs::IteratorEnd(); }

 private:
  // Field type has been replaced with a blob of bytes: Not a public or a
  // supported reexported type (b/262052635).
  ::std::array<unsigned char, 16> inner;

 private:
  static void __crubit_field_offset_assertions();
};

//  An iterator over the command environment variables.
//
//  This struct is created by
//  [`Command::get_envs`][crate::process::Command::get_envs]. See its
//  documentation for more.
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=1418
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: process :: CommandEnvs") alignas(8)
    [[clang::trivial_abi]] [[nodiscard(
        "iterators are lazy and do nothing unless consumed")]]
    CommandEnvs final {
 public:
  // `std::process::CommandEnvs` doesn't implement the `Default` trait
  CommandEnvs() = delete;

  // No custom `Drop` impl and no custom "drop glue" required
  ~CommandEnvs() = default;
  CommandEnvs(CommandEnvs&&) = default;
  CommandEnvs& operator=(CommandEnvs&&) = default;

  // `std::process::CommandEnvs` doesn't implement the `Clone` trait
  CommandEnvs(const CommandEnvs&) = delete;
  CommandEnvs& operator=(const CommandEnvs&) = delete;
  CommandEnvs(::crubit::UnsafeRelocateTag, CommandEnvs&& value);
  template <typename TAdaptedSelf_ = CommandEnvs>
  inline rs::IteratorAdapter<TAdaptedSelf_*> begin() & {
    return rs::IteratorAdapter<TAdaptedSelf_*>(this);
  }
  inline rs::IteratorEnd end() & { return rs::IteratorEnd(); }

 private:
  // Field type has been replaced with a blob of bytes: Not a public or a
  // supported reexported type (b/262052635).
  ::std::array<unsigned char, 72> iter;

 private:
  static void __crubit_field_offset_assertions();
};

//  This type represents the status code the current process can return
//  to its parent under normal termination.
//
//  `ExitCode` is intended to be consumed only by the standard library (via
//  [`Termination::report()`]). For forwards compatibility with potentially
//  unusual targets, this type currently does not provide `Eq`, `Hash`, or
//  access to the raw value. This type does provide `PartialEq` for
//  comparison, but note that there may potentially be multiple failure
//  codes, some of which will _not_ compare equal to `ExitCode::FAILURE`.
//  The standard library provides the canonical `SUCCESS` and `FAILURE`
//  exit codes as well as `From<u8> for ExitCode` for constructing other
//  arbitrary exit codes.
//
//  # Portability
//
//  Numeric values used in this type don't have portable meanings, and
//  different platforms may mask different amounts of them.
//
//  For the platform's canonical successful and unsuccessful codes, see
//  the [`SUCCESS`] and [`FAILURE`] associated items.
//
//  [`SUCCESS`]: ExitCode::SUCCESS
//  [`FAILURE`]: ExitCode::FAILURE
//
//  # Differences from `ExitStatus`
//
//  `ExitCode` is intended for terminating the currently running process, via
//  the `Termination` trait, in contrast to [`ExitStatus`], which represents the
//  termination of a child process. These APIs are separate due to platform
//  compatibility differences and their expected usage; it is not generally
//  possible to exactly reproduce an `ExitStatus` from a child for the current
//  process after the fact.
//
//  # Examples
//
//  `ExitCode` can be returned from the `main` function of a crate, as it
//  implements
//  [`Termination`]:
//
//  ```
//  use std::process::ExitCode;
//  # fn check_foo() -> bool { true }
//
//  fn main() -> ExitCode {
//      if !check_foo() {
//          return ExitCode::from(42);
//      }
//
//      ExitCode::SUCCESS
//  }
//  ```
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=2210
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: process :: ExitCode") alignas(1)
    [[clang::trivial_abi]] ExitCode final {
 public:
  // Default::default
  ExitCode();

  // No custom `Drop` impl and no custom "drop glue" required
  ~ExitCode() = default;
  ExitCode(ExitCode&&) = default;
  ExitCode& operator=(ExitCode&&) = default;

  // Rust types that are `Copy` get trivial, `default` C++ copy constructor and
  // assignment operator.
  ExitCode(const ExitCode&) = default;
  ExitCode& operator=(const ExitCode&) = default;
  ExitCode(::crubit::UnsafeRelocateTag, ExitCode&& value);

  // Error generating bindings for associated constant
  // `process::ExitCode::SUCCESS` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=2220:
  // Unsupported constant type: process::ExitCode

  // Error generating bindings for associated constant
  // `process::ExitCode::FAILURE` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=2228:
  // Unsupported constant type: process::ExitCode

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=2208
  bool operator==(::rs::std::process::ExitCode const& other) const;

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=2303
  explicit ExitCode(::std::uint8_t value);

 private:
  // Field type has been replaced with a blob of bytes: Not a public or a
  // supported reexported type (b/262052635).
  ::std::array<unsigned char, 1> __field0;

 private:
  static void __crubit_field_offset_assertions();
};

//  Describes the result of a process after it has terminated.
//
//  This `struct` is used to represent the exit status or other termination of a
//  child process. Child processes are created via the [`Command`] struct and
//  their exit status is exposed through the [`status`] method, or the [`wait`]
//  method of a [`Child`] process.
//
//  An `ExitStatus` represents every possible disposition of a process.  On Unix
//  this is the **wait status**.  It is *not* simply an *exit status* (a value
//  passed to `exit`).
//
//  For proper error reporting of failed processes, print the value of
//  `ExitStatus` or `ExitStatusError` using their implementations of
//  [`Display`](crate::fmt::Display).
//
//  # Differences from `ExitCode`
//
//  [`ExitCode`] is intended for terminating the currently running process, via
//  the `Termination` trait, in contrast to `ExitStatus`, which represents the
//  termination of a child process. These APIs are separate due to platform
//  compatibility differences and their expected usage; it is not generally
//  possible to exactly reproduce an `ExitStatus` from a child for the current
//  process after the fact.
//
//  [`status`]: Command::status
//  [`wait`]: Child::wait
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=1931
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: process :: ExitStatus") alignas(4)
    [[clang::trivial_abi]] ExitStatus final {
 public:
  // Default::default
  ExitStatus();

  // No custom `Drop` impl and no custom "drop glue" required
  ~ExitStatus() = default;
  ExitStatus(ExitStatus&&) = default;
  ExitStatus& operator=(ExitStatus&&) = default;

  // Rust types that are `Copy` get trivial, `default` C++ copy constructor and
  // assignment operator.
  ExitStatus(const ExitStatus&) = default;
  ExitStatus& operator=(const ExitStatus&) = default;
  ExitStatus(::crubit::UnsafeRelocateTag, ExitStatus&& value);

  //  Was termination successful? Signal termination is not considered a
  //  success, and success is defined as a zero exit status.
  //
  //  # Examples
  //
  //  ```rust,no_run
  //  use std::process::Command;
  //
  //  let status = Command::new("mkdir")
  //      .arg("projects")
  //      .status()
  //      .expect("failed to execute mkdir");
  //
  //  if status.success() {
  //      println!("'projects/' directory created");
  //  } else {
  //      println!("failed to create 'projects/' directory: {status}");
  //  }
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=1987
  [[nodiscard]] bool success() const;

  //  Returns the exit code of the process, if any.
  //
  //  In Unix terms the return value is the **exit status**: the value passed to
  //  `exit`, if the process finished by calling `exit`.  Note that on Unix the
  //  exit status is truncated to 8 bits, and that values that didn't come from
  //  a program's call to `exit` may be invented by the runtime system (often,
  //  for example, 255, 254, 127 or 126).
  //
  //  On Unix, this will return `None` if the process was terminated by a
  //  signal.
  //  [`ExitStatusExt`](crate::os::unix::process::ExitStatusExt) is an
  //  extension trait for extracting any such signal, and other details, from
  //  the `ExitStatus`.
  //
  //  # Examples
  //
  //  ```no_run
  //  use std::process::Command;
  //
  //  let status = Command::new("mkdir")
  //      .arg("projects")
  //      .status()
  //      .expect("failed to execute mkdir");
  //
  //  match status.code() {
  //      Some(code) => println!("Exited with status code: {code}"),
  //      None => println!("Process terminated by signal")
  //  }
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=2019
  [[nodiscard]] ::std::optional<::std::int32_t> code() const;

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=1929
  bool operator==(::rs::std::process::ExitStatus const& other) const;

  // AbslStringify and std::ostream support via std::fmt::Display
  template <typename Sink, typename Str = rs::alloc::string::String>
  friend void AbslStringify(Sink& sink, const ExitStatus& self) {
    crubit::Slot<Str> s;
    __crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std7process10ExitStatusNtNtCsaddbpR6HRqH_u5alloc6string8ToString9to_ustringB6_u(
        self, s.Get());
    AbslStringify(sink, ::std::move(s).AssumeInitAndTakeValue().as_str());
  }
  template <typename Str = rs::alloc::string::String>
  friend ::std::ostream& operator<<(::std::ostream& os,
                                    const ExitStatus& self) {
    crubit::Slot<Str> s;
    __crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std7process10ExitStatusNtNtCsaddbpR6HRqH_u5alloc6string8ToString9to_ustringB6_u(
        self, s.Get());
    return os << ::std::string_view(
               ::std::move(s).AssumeInitAndTakeValue().as_str());
  }

 private:
  // Field type has been replaced with a blob of bytes: Not a public or a
  // supported reexported type (b/262052635).
  ::std::array<unsigned char, 4> __field0;

 private:
  static void __crubit_field_offset_assertions();
};

//  Describes what to do with a standard I/O stream for a child process when
//  passed to the [`stdin`], [`stdout`], and [`stderr`] methods of [`Command`].
//
//  [`stdin`]: Command::stdin
//  [`stdout`]: Command::stdout
//  [`stderr`]: Command::stderr
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=1545
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: process :: Stdio") alignas(4)
    [[clang::trivial_abi]] Stdio final {
 public:
  // `std::process::Stdio` doesn't implement the `Default` trait
  Stdio() = delete;

  // Drop::drop
  ~Stdio();

  // C++ move operations are unavailable for this type. See
  // http://crubit.rs/rust/movable_types for an explanation of Rust types that
  // are C++ movable.
  Stdio(Stdio&&) = delete;
  ::rs::std::process::Stdio& operator=(Stdio&&) = delete;
  // `std::process::Stdio` doesn't implement the `Clone` trait
  Stdio(const Stdio&) = delete;
  Stdio& operator=(const Stdio&) = delete;
  Stdio(::crubit::UnsafeRelocateTag, Stdio&& value);

  //  A new pipe should be arranged to connect the parent and child processes.
  //
  //  # Examples
  //
  //  With stdout:
  //
  //  ```no_run
  //  use std::process::{Command, Stdio};
  //
  //  let output = Command::new("echo")
  //      .arg("Hello, world!")
  //      .stdout(Stdio::piped())
  //      .output()
  //      .expect("Failed to execute command");
  //
  //  assert_eq!(String::from_utf8_lossy(&output.stdout), "Hello, world!\
  // ");
  //  // Nothing echoed to console
  //  ```
  //
  //  With stdin:
  //
  //  ```no_run
  //  use std::io::Write;
  //  use std::process::{Command, Stdio};
  //
  //  let mut child = Command::new("rev")
  //      .stdin(Stdio::piped())
  //      .stdout(Stdio::piped())
  //      .spawn()
  //      .expect("Failed to spawn child process");
  //
  //  let mut stdin = child.stdin.take().expect("Failed to open stdin");
  //  std::thread::spawn(move || {
  //      stdin.write_all("Hello, world!".as_bytes()).expect("Failed to write to
  //      stdin");
  //  });
  //
  //  let output = child.wait_with_output().expect("Failed to read stdout");
  //  assert_eq!(String::from_utf8_lossy(&output.stdout), "!dlrow ,olleH");
  //  ```
  //
  //  Writing more than a pipe buffer's worth of input to stdin without also
  //  reading stdout and stderr at the same time may cause a deadlock. This is
  //  an issue when running any program that doesn't guarantee that it reads its
  //  entire stdin before writing more than a pipe buffer's worth of output. The
  //  size of a pipe buffer varies on different targets.
  //
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=1596
  [[nodiscard]] static ::rs::std::process::Stdio piped();

  //  The child inherits from the corresponding parent descriptor.
  //
  //  # Examples
  //
  //  With stdout:
  //
  //  ```no_run
  //  use std::process::{Command, Stdio};
  //
  //  let output = Command::new("echo")
  //      .arg("Hello, world!")
  //      .stdout(Stdio::inherit())
  //      .output()
  //      .expect("Failed to execute command");
  //
  //  assert_eq!(String::from_utf8_lossy(&output.stdout), "");
  //  // "Hello, world!" echoed to console
  //  ```
  //
  //  With stdin:
  //
  //  ```no_run
  //  use std::process::{Command, Stdio};
  //  use std::io::{self, Write};
  //
  //  let output = Command::new("rev")
  //      .stdin(Stdio::inherit())
  //      .stdout(Stdio::piped())
  //      .output()?;
  //
  //  print!("You piped in the reverse of: ");
  //  io::stdout().write_all(&output.stdout)?;
  //  # io::Result::Ok(())
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=1636
  [[nodiscard]] static ::rs::std::process::Stdio inherit();

  //  This stream will be ignored. This is the equivalent of attaching the
  //  stream to `/dev/null`.
  //
  //  # Examples
  //
  //  With stdout:
  //
  //  ```no_run
  //  use std::process::{Command, Stdio};
  //
  //  let output = Command::new("echo")
  //      .arg("Hello, world!")
  //      .stdout(Stdio::null())
  //      .output()
  //      .expect("Failed to execute command");
  //
  //  assert_eq!(String::from_utf8_lossy(&output.stdout), "");
  //  // Nothing echoed to console
  //  ```
  //
  //  With stdin:
  //
  //  ```no_run
  //  use std::process::{Command, Stdio};
  //
  //  let output = Command::new("rev")
  //      .stdin(Stdio::null())
  //      .stdout(Stdio::piped())
  //      .output()
  //      .expect("Failed to execute command");
  //
  //  assert_eq!(String::from_utf8_lossy(&output.stdout), "");
  //  // Ignores any piped-in input
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=1676
  [[nodiscard]] static ::rs::std::process::Stdio null();

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=1827
  explicit Stdio(::rs::std::io::Stdout value);

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=1858
  explicit Stdio(::rs::std::io::Stderr value);

 private:
  // Field type has been replaced with a blob of bytes: Not a public or a
  // supported reexported type (b/262052635).
  ::std::array<unsigned char, 8> __field0;

 private:
  static void __crubit_field_offset_assertions();
};

//  A trait for implementing arbitrary return types in the `main` function.
//
//  The C-main function only supports returning integers.
//  So, every type implementing the `Termination` trait has to be converted
//  to an integer.
//
//  The default implementations are returning `libc::EXIT_SUCCESS` to indicate
//  a successful execution. In case of a failure, `libc::EXIT_FAILURE` is
//  returned.
//
//  Because different runtimes have different specifications on the return value
//  of the `main` function, this trait is likely to be available only on
//  standard library's runtime for convenience. Other runtimes are not required
//  to provide similar functionality.
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=2681
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: process :: Termination")
    Termination {
  template <typename T>
  using impl = rs_std::impl<T, Termination>;
};

//  Terminates the process in an abnormal fashion.
//
//  The function will never return and will immediately terminate the current
//  process in a platform specific "abnormal" manner. As a consequence,
//  no destructors on the current stack or any other thread's stack
//  will be run, Rust IO buffers (eg, from `BufWriter`) will not be flushed,
//  and C stdio buffers will (on most platforms) not be flushed.
//
//  This is in contrast to the default behavior of [`panic!`] which unwinds
//  the current thread's stack and calls all destructors.
//  When `panic="abort"` is set, either as an argument to `rustc` or in a
//  crate's Cargo.toml, [`panic!`] and `abort` are similar. However,
//  [`panic!`] will still call the [panic hook] while `abort` will not.
//
//  If a clean shutdown is needed it is recommended to only call
//  this function at a known point where there are no more destructors left
//  to run.
//
//  The process's termination will be similar to that from the C `abort()`
//  function.  On Unix, the process will terminate with signal `SIGABRT`, which
//  typically means that the shell prints "Aborted".
//
//  # Examples
//
//  ```no_run
//  use std::process;
//
//  fn main() {
//      println!("aborting");
//
//      process::abort();
//
//      // execution never gets here
//  }
//  ```
//
//  The `abort` function terminates the process, so the destructor will not
//  get run on the example below:
//
//  ```no_run
//  use std::process;
//
//  struct HasDrop;
//
//  impl Drop for HasDrop {
//      fn drop(&mut self) {
//          println!("This will never be printed!");
//      }
//  }
//
//  fn main() {
//      let _x = HasDrop;
//      process::abort();
//      // the destructor implemented for HasDrop will never get run
//  }
//  ```
//
//  [panic hook]: crate::panic::set_hook
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=2638
[[noreturn]] void abort();

//  Terminates the current process with the specified exit code.
//
//  This function will never return and will immediately terminate the current
//  process. The exit code is passed through to the underlying OS and will be
//  available for consumption by another process.
//
//  Note that because this function never returns, and that it terminates the
//  process, no destructors on the current stack or any other thread's stack
//  will be run. If a clean shutdown is needed it is recommended to only call
//  this function at a known point where there are no more destructors left
//  to run; or, preferably, simply return a type implementing [`Termination`]
//  (such as [`ExitCode`] or `Result`) from the `main` function and avoid this
//  function altogether:
//
//  ```
//  # use std::io::Error as MyError;
//  fn main() -> Result<(), MyError> {
//      // ...
//      Ok(())
//  }
//  ```
//
//  In its current implementation, this function will execute exit handlers
//  registered with `atexit` as well as other platform-specific exit handlers
//  (e.g. `fini` sections of ELF shared objects). This means that Rust requires
//  that all exit handlers are safe to execute at any time. In particular, if an
//  exit handler cleans up some state that might be concurrently accessed by
//  other threads, it is required that the exit handler performs suitable
//  synchronization with those threads. (The alternative to this requirement
//  would be to not run exit handlers at all, which is considered undesirable.
//  Note that returning from `main` also calls `exit`, so making `exit` an
//  unsafe operation is not an option.)
//
//  ## Platform-specific behavior
//
//  **Unix**: On Unix-like platforms, it is unlikely that all 32 bits of `exit`
//  will be visible to a parent process inspecting the exit code. On most
//  Unix-like platforms, only the eight least-significant bits are considered.
//
//  For example, the exit code for this example will be `0` on Linux, but `256`
//  on Windows:
//
//  ```no_run
//  use std::process;
//
//  process::exit(0x0100);
//  ```
//
//  ### Safe interop with C code
//
//  On Unix, this function is currently implemented using the `exit` C function
//  [`exit`][C-exit]. As of C23, the C standard does not permit multiple threads
//  to call `exit` concurrently. Rust mitigates this with a lock, but if C code
//  calls `exit`, that can still cause undefined behavior. Note that returning
//  from `main` is equivalent to calling `exit`.
//
//  Therefore, it is undefined behavior to have two concurrent threads perform
//  the following without synchronization:
//  - One thread calls Rust's `exit` function or returns from Rust's `main`
//  function
//  - Another thread calls the C function `exit` or `quick_exit`, or returns
//  from C's `main` function
//
//  Note that if a binary contains multiple copies of the Rust runtime (e.g.,
//  when combining multiple `cdylib` or `staticlib`), they each have their own
//  separate lock, so from the perspective of code running in one of the Rust
//  runtimes, the "outside" Rust code is basically C code, and concurrent `exit`
//  again causes undefined behavior.
//
//  Individual C implementations might provide more guarantees than the standard
//  and permit concurrent calls to `exit`; consult the documentation of your C
//  implementation for details.
//
//  For some of the on-going discussion to make `exit` thread-safe in C, see:
//  - [Rust issue #126600](https://github.com/rust-lang/rust/issues/126600)
//  - [Austin Group Bugzilla (for
//  POSIX)](https://austingroupbugs.net/view.php?id=1845)
//  - [GNU C library
//  Bugzilla](https://sourceware.org/bugzilla/show_bug.cgi?id=31997)
//
//  [C-exit]: https://en.cppreference.com/w/c/program/exit
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=2571
[[noreturn]] void exit(::std::int32_t code);

//  Returns the OS-assigned process identifier associated with this process.
//
//  # Examples
//
//  ```no_run
//  use std::process;
//
//  println!("My pid is {}", process::id());
//  ```
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=2657
[[nodiscard]] ::std::uint32_t id();

}  // namespace rs::std::process

namespace rs::std::sync {

//  A type indicating whether a timed wait on a condition variable returned
//  due to a time out or not.
//
//  It is returned by the [`wait_timeout`] method.
//
//  [`wait_timeout`]: Condvar::wait_timeout
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/mod.rs;l=262
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: sync :: WaitTimeoutResult") alignas(
    1) [[clang::trivial_abi]] WaitTimeoutResult final {
 public:
  // `std::sync::WaitTimeoutResult` doesn't implement the `Default` trait
  WaitTimeoutResult() = delete;

  // No custom `Drop` impl and no custom "drop glue" required
  ~WaitTimeoutResult() = default;
  WaitTimeoutResult(WaitTimeoutResult&&) = default;
  WaitTimeoutResult& operator=(WaitTimeoutResult&&) = default;

  // Rust types that are `Copy` get trivial, `default` C++ copy constructor and
  // assignment operator.
  WaitTimeoutResult(const WaitTimeoutResult&) = default;
  WaitTimeoutResult& operator=(const WaitTimeoutResult&) = default;
  WaitTimeoutResult(::crubit::UnsafeRelocateTag, WaitTimeoutResult&& value);

  //  Returns `true` if the wait was known to have timed out.
  //
  //  # Examples
  //
  //  This example spawns a thread which will sleep 20 milliseconds before
  //  updating a boolean value and then notifying the condvar.
  //
  //  The main thread will wait with a 10 millisecond timeout on the condvar
  //  and will leave the loop upon timeout.
  //
  //  ```
  //  use std::sync::{Arc, Condvar, Mutex};
  //  use std::thread;
  //  use std::time::Duration;
  //
  //  let pair = Arc::new((Mutex::new(false), Condvar::new()));
  //  let pair2 = Arc::clone(&pair);
  //
  //  # let handle =
  //  thread::spawn(move || {
  //      let (lock, cvar) = &*pair2;
  //
  //      // Let's wait 20 milliseconds before notifying the condvar.
  //      thread::sleep(Duration::from_millis(20));
  //
  //      let mut started = lock.lock().unwrap();
  //      // We update the boolean value.
  //      *started = true;
  //      cvar.notify_one();
  //  });
  //
  //  // Wait for the thread to start up.
  //  let (lock, cvar) = &*pair;
  //  loop {
  //      // Let's put a timeout on the condvar's wait.
  //      let result = cvar.wait_timeout(lock.lock().unwrap(),
  //      Duration::from_millis(10)).unwrap();
  //      // 10 milliseconds have passed.
  //      if result.1.timed_out() {
  //          // timed out now and we can leave.
  //          break
  //      }
  //  }
  //  # // Prevent leaks for Miri.
  //  # let _ = handle.join();
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/mod.rs;l=312
  [[nodiscard]] bool timed_out() const;

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/mod.rs;l=260
  bool operator==(::rs::std::sync::WaitTimeoutResult const& other) const;

 private:
  union {
    // Generated from:
    // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/mod.rs;l=262
    bool __field0;
  };

 private:
  static void __crubit_field_offset_assertions();
};

}  // namespace rs::std::sync

namespace rs::std::sync {

//  A barrier enables multiple threads to synchronize the beginning
//  of some computation.
//
//  # Examples
//
//  ```
//  use std::sync::Barrier;
//  use std::thread;
//
//  let n = 10;
//  let barrier = Barrier::new(n);
//  thread::scope(|s| {
//      for _ in 0..n {
//          // The same messages will be printed together.
//          // You will NOT see any interleaving.
//          s.spawn(|| {
//              println!("before wait");
//              barrier.wait();
//              println!("after wait");
//          });
//      }
//  });
//  ```
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/barrier.rs;l=29
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: sync :: Barrier") alignas(8)
    [[clang::trivial_abi]] Barrier final {
 public:
  // `std::sync::Barrier` doesn't implement the `Default` trait
  Barrier() = delete;

  // No custom `Drop` impl and no custom "drop glue" required
  ~Barrier() = default;
  Barrier(Barrier&&) = default;
  Barrier& operator=(Barrier&&) = default;

  // `std::sync::Barrier` doesn't implement the `Clone` trait
  Barrier(const Barrier&) = delete;
  Barrier& operator=(const Barrier&) = delete;
  Barrier(::crubit::UnsafeRelocateTag, Barrier&& value);

  //  Creates a new barrier that can block a given number of threads.
  //
  //  A barrier will block all threads which call [`wait()`] until the `n`th
  //  thread calls [`wait()`], and then wake up all threads at once.
  //
  //  [`wait()`]: Barrier::wait
  //
  //  # Examples
  //
  //  ```
  //  use std::sync::Barrier;
  //
  //  let barrier = Barrier::new(10);
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/barrier.rs;l=84
  [[nodiscard]] static ::rs::std::sync::Barrier new_(::std::uintptr_t n);

  //  Blocks the current thread until all threads have rendezvoused here.
  //
  //  Barriers are re-usable after all threads have rendezvoused once, and can
  //  be used continuously.
  //
  //  A single (arbitrary) thread will receive a [`BarrierWaitResult`] that
  //  returns `true` from [`BarrierWaitResult::is_leader()`] when returning
  //  from this function, and all other threads will receive a result that
  //  will return `false` from [`BarrierWaitResult::is_leader()`].
  //
  //  # Examples
  //
  //  ```
  //  use std::sync::Barrier;
  //  use std::thread;
  //
  //  let n = 10;
  //  let barrier = Barrier::new(n);
  //  thread::scope(|s| {
  //      for _ in 0..n {
  //          // The same messages will be printed together.
  //          // You will NOT see any interleaving.
  //          s.spawn(|| {
  //              println!("before wait");
  //              barrier.wait();
  //              println!("after wait");
  //          });
  //      }
  //  });
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/barrier.rs;l=123
  ::rs::std::sync::BarrierWaitResult wait() const;

 private:
  // Field type has been replaced with a blob of bytes: Generic types are not
  // supported yet (b/259749095)
  ::std::array<unsigned char, 24> lock;
  union {
    // Generated from:
    // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/barrier.rs;l=32
    ::std::uintptr_t num_threads;
  };
  // Field type has been replaced with a blob of bytes: Not a public or a
  // supported reexported type (b/262052635).
  ::std::array<unsigned char, 8> cvar;

 private:
  static void __crubit_field_offset_assertions();
};

//  A `BarrierWaitResult` is returned by [`Barrier::wait()`] when all threads
//  in the [`Barrier`] have rendezvoused.
//
//  # Examples
//
//  ```
//  use std::sync::Barrier;
//
//  let barrier = Barrier::new(1);
//  let barrier_wait_result = barrier.wait();
//  ```
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/barrier.rs;l=56
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: sync :: BarrierWaitResult") alignas(
    1) [[clang::trivial_abi]] BarrierWaitResult final {
 public:
  // `std::sync::BarrierWaitResult` doesn't implement the `Default` trait
  BarrierWaitResult() = delete;

  // No custom `Drop` impl and no custom "drop glue" required
  ~BarrierWaitResult() = default;
  BarrierWaitResult(BarrierWaitResult&&) = default;
  BarrierWaitResult& operator=(BarrierWaitResult&&) = default;

  // `std::sync::BarrierWaitResult` doesn't implement the `Clone` trait
  BarrierWaitResult(const BarrierWaitResult&) = delete;
  BarrierWaitResult& operator=(const BarrierWaitResult&) = delete;
  BarrierWaitResult(::crubit::UnsafeRelocateTag, BarrierWaitResult&& value);

  //  Returns `true` if this thread is the "leader thread" for the call to
  //  [`Barrier::wait()`].
  //
  //  Only one thread will have `true` returned from their result, all other
  //  threads will have `false` returned.
  //
  //  # Examples
  //
  //  ```
  //  use std::sync::Barrier;
  //
  //  let barrier = Barrier::new(1);
  //  let barrier_wait_result = barrier.wait();
  //  println!("{:?}", barrier_wait_result.is_leader());
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/barrier.rs;l=164
  [[nodiscard]] bool is_leader() const;

 private:
  union {
    // Generated from:
    // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/barrier.rs;l=56
    bool __field0;
  };

 private:
  static void __crubit_field_offset_assertions();
};

}  // namespace rs::std::sync

namespace rs::std::sync {

// Error generating bindings for struct `sync::lazy_lock::LazyLock` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/lazy_lock.rs;l=81:
// crubit.rs/errors/unsupported_type: Generic types are not supported yet
// (b/259749095)

}

namespace rs::std::sync::mpsc {

// Error generating bindings for struct `sync::mpsc::IntoIter` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/mpsc.rs;l=301:
// crubit.rs/errors/unsupported_type: Generic types are not supported yet
// (b/259749095)

// Error generating bindings for struct `sync::mpsc::Iter` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/mpsc.rs;l=222:
// crubit.rs/errors/unsupported_type: Generic types are not supported yet
// (b/259749095)

// Error generating bindings for struct `sync::mpsc::Receiver` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/mpsc.rs;l=181:
// crubit.rs/errors/unsupported_type: Generic types are not supported yet
// (b/259749095)

// Error generating bindings for struct `sync::mpsc::RecvError` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/mpsc.rs;l=425:
// Zero-sized types (ZSTs) are not supported (b/258259459)

//  This enumeration is the list of possible errors that made [`recv_timeout`]
//  unable to return data when called. This can occur with both a [`channel`]
//  and a [`sync_channel`].
//
//  [`recv_timeout`]: Receiver::recv_timeout
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/mpsc.rs;l=453
struct CRUBIT_INTERNAL_RUST_TYPE(
    ":: std :: sync :: mpsc :: RecvTimeoutError") alignas(1)
    [[clang::trivial_abi]] RecvTimeoutError final {
 public:
  // `std::sync::mpsc::RecvTimeoutError` doesn't implement the `Default` trait
  RecvTimeoutError() = delete;

  //  This **channel** is currently empty, but the **Sender**(s) have not yet
  //  disconnected, so data may yet become available.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/mpsc.rs;l=457
  static constexpr RecvTimeoutError MakeTimeout();

  //  The **channel**'s sending half has become disconnected, and there will
  //  never be any more data received on it.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/mpsc.rs;l=461
  static constexpr RecvTimeoutError MakeDisconnected();

  // No custom `Drop` impl and no custom "drop glue" required
  ~RecvTimeoutError() = default;
  RecvTimeoutError(RecvTimeoutError&&) = default;
  RecvTimeoutError& operator=(RecvTimeoutError&&) = default;

  // Rust types that are `Copy` get trivial, `default` C++ copy constructor and
  // assignment operator.
  RecvTimeoutError(const RecvTimeoutError&) = default;
  RecvTimeoutError& operator=(const RecvTimeoutError&) = default;
  RecvTimeoutError(::crubit::UnsafeRelocateTag, RecvTimeoutError&& value);

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/mpsc.rs;l=451
  bool operator==(::rs::std::sync::mpsc::RecvTimeoutError const& other) const;

  // AbslStringify and std::ostream support via std::fmt::Display
  template <typename Sink, typename Str = rs::alloc::string::String>
  friend void AbslStringify(Sink& sink, const RecvTimeoutError& self) {
    crubit::Slot<Str> s;
    __crubit_thunk_818b180788380d74__uRNvYNtNtNtCsb7ytMsthdgm_u3std4sync4mpsc16RecvTimeoutErrorNtNtCsaddbpR6HRqH_u5alloc6string8ToString9to_ustringB8_u(
        self, s.Get());
    AbslStringify(sink, ::std::move(s).AssumeInitAndTakeValue().as_str());
  }
  template <typename Str = rs::alloc::string::String>
  friend ::std::ostream& operator<<(::std::ostream& os,
                                    const RecvTimeoutError& self) {
    crubit::Slot<Str> s;
    __crubit_thunk_818b180788380d74__uRNvYNtNtNtCsb7ytMsthdgm_u3std4sync4mpsc16RecvTimeoutErrorNtNtCsaddbpR6HRqH_u5alloc6string8ToString9to_ustringB8_u(
        self, s.Get());
    return os << ::std::string_view(
               ::std::move(s).AssumeInitAndTakeValue().as_str());
  }

 private:
  // Field type has been replaced with a blob of bytes: No support for bindings
  // of individual non-repr(C) `enum`s
  ::std::array<unsigned char, 1> __opaque_blob_of_bytes;

 private:
  struct PrivateBytesTag {};
  constexpr RecvTimeoutError(PrivateBytesTag,
                             ::std::array<unsigned char, 1> bytes)
      : __opaque_blob_of_bytes(bytes) {}

 private:
  static void __crubit_field_offset_assertions();
};

// Error generating bindings for struct `sync::mpsc::SendError` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/mpsc.rs;l=414:
// crubit.rs/errors/unsupported_type: Generic types are not supported yet
// (b/259749095)

// Error generating bindings for struct `sync::mpsc::Sender` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/mpsc.rs;l=340:
// crubit.rs/errors/unsupported_type: Generic types are not supported yet
// (b/259749095)

// Error generating bindings for struct `sync::mpsc::SyncSender` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/mpsc.rs;l=399:
// crubit.rs/errors/unsupported_type: Generic types are not supported yet
// (b/259749095)

// Error generating bindings for struct `sync::mpsc::TryIter` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/mpsc.rs;l=267:
// crubit.rs/errors/unsupported_type: Generic types are not supported yet
// (b/259749095)

//  This enumeration is the list of the possible reasons that [`try_recv`] could
//  not return data when called. This can occur with both a [`channel`] and
//  a [`sync_channel`].
//
//  [`try_recv`]: Receiver::try_recv
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/mpsc.rs;l=434
struct CRUBIT_INTERNAL_RUST_TYPE(
    ":: std :: sync :: mpsc :: TryRecvError") alignas(1) [[clang::trivial_abi]]
TryRecvError final {
 public:
  // `std::sync::mpsc::TryRecvError` doesn't implement the `Default` trait
  TryRecvError() = delete;

  //  This **channel** is currently empty, but the **Sender**(s) have not yet
  //  disconnected, so data may yet become available.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/mpsc.rs;l=438
  static constexpr TryRecvError MakeEmpty();

  //  The **channel**'s sending half has become disconnected, and there will
  //  never be any more data received on it.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/mpsc.rs;l=443
  static constexpr TryRecvError MakeDisconnected();

  // No custom `Drop` impl and no custom "drop glue" required
  ~TryRecvError() = default;
  TryRecvError(TryRecvError&&) = default;
  TryRecvError& operator=(TryRecvError&&) = default;

  // Rust types that are `Copy` get trivial, `default` C++ copy constructor and
  // assignment operator.
  TryRecvError(const TryRecvError&) = default;
  TryRecvError& operator=(const TryRecvError&) = default;
  TryRecvError(::crubit::UnsafeRelocateTag, TryRecvError&& value);

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/mpsc.rs;l=432
  bool operator==(::rs::std::sync::mpsc::TryRecvError const& other) const;

  // AbslStringify and std::ostream support via std::fmt::Display
  template <typename Sink, typename Str = rs::alloc::string::String>
  friend void AbslStringify(Sink& sink, const TryRecvError& self) {
    crubit::Slot<Str> s;
    __crubit_thunk_818b180788380d74__uRNvYNtNtNtCsb7ytMsthdgm_u3std4sync4mpsc12TryRecvErrorNtNtCsaddbpR6HRqH_u5alloc6string8ToString9to_ustringB8_u(
        self, s.Get());
    AbslStringify(sink, ::std::move(s).AssumeInitAndTakeValue().as_str());
  }
  template <typename Str = rs::alloc::string::String>
  friend ::std::ostream& operator<<(::std::ostream& os,
                                    const TryRecvError& self) {
    crubit::Slot<Str> s;
    __crubit_thunk_818b180788380d74__uRNvYNtNtNtCsb7ytMsthdgm_u3std4sync4mpsc12TryRecvErrorNtNtCsaddbpR6HRqH_u5alloc6string8ToString9to_ustringB8_u(
        self, s.Get());
    return os << ::std::string_view(
               ::std::move(s).AssumeInitAndTakeValue().as_str());
  }

 private:
  // Field type has been replaced with a blob of bytes: No support for bindings
  // of individual non-repr(C) `enum`s
  ::std::array<unsigned char, 1> __opaque_blob_of_bytes;

 private:
  struct PrivateBytesTag {};
  constexpr TryRecvError(PrivateBytesTag, ::std::array<unsigned char, 1> bytes)
      : __opaque_blob_of_bytes(bytes) {}

 private:
  static void __crubit_field_offset_assertions();
};

// Error generating bindings for enum `sync::mpsc::TrySendError` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/mpsc.rs;l=470:
// crubit.rs/errors/unsupported_type: Generic types are not supported yet
// (b/259749095)

// Error generating bindings for function `sync::mpsc::channel` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/mpsc.rs;l=526:
// No valid non-generic replacement for generic type param `T`

// Error generating bindings for function `sync::mpsc::sync_channel` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/mpsc.rs;l=576:
// No valid non-generic replacement for generic type param `T`

}  // namespace rs::std::sync::mpsc

namespace rs::std::sync {

// Error generating bindings for constant `sync::once::ONCE_INIT` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/once.rs;l=75:
// const of type `sync::once::Once` cannot be generated as only scalar consts
// are supported.

//  A low-level synchronization primitive for one-time global execution.
//
//  Previously this was the only "execute once" synchronization in `std`.
//  Other libraries implemented novel synchronizing types with `Once`, like
//  [`OnceLock<T>`] or [`LazyLock<T, F>`], before those were added to `std`.
//  `OnceLock<T>` in particular supersedes `Once` in functionality and should
//  be preferred for the common case where the `Once` is associated with data.
//
//  This type can only be constructed with [`Once::new()`].
//
//  # Examples
//
//  ```
//  use std::sync::Once;
//
//  static START: Once = Once::new();
//
//  START.call_once(|| {
//      // run initialization here
//  });
//  ```
//
//  [`OnceLock<T>`]: crate::sync::OnceLock
//  [`LazyLock<T, F>`]: crate::sync::LazyLock
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/once.rs;l=35
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: sync :: Once") alignas(4)
    [[clang::trivial_abi]] Once final {
 public:
  // `std::sync::Once` doesn't implement the `Default` trait
  Once() = delete;

  // No custom `Drop` impl and no custom "drop glue" required
  ~Once() = default;
  Once(Once&&) = default;
  Once& operator=(Once&&) = default;

  // `std::sync::Once` doesn't implement the `Clone` trait
  Once(const Once&) = delete;
  Once& operator=(const Once&) = delete;
  Once(::crubit::UnsafeRelocateTag, Once&& value);

  //  Creates a new `Once` value.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/once.rs;l=83
  [[nodiscard]] static ::rs::std::sync::Once new_();

  // Error generating bindings for associated function
  // `sync::once::Once::call_once` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/once.rs;l=156:
  // No valid non-generic replacement for generic type param `F`

  // Error generating bindings for associated function
  // `sync::once::Once::call_once_force` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/once.rs;l=216:
  // No valid non-generic replacement for generic type param `F`

  //  Returns `true` if some [`call_once()`] call has completed
  //  successfully. Specifically, `is_completed` will return false in
  //  the following situations:
  //    * [`call_once()`] was not called at all,
  //    * [`call_once()`] was called, but has not yet completed,
  //    * the [`Once`] instance is poisoned
  //
  //  This function returning `false` does not mean that [`Once`] has not been
  //  executed. For example, it may have been executed in the time between
  //  when `is_completed` starts executing and when it returns, in which case
  //  the `false` return value would be stale (but still permissible).
  //
  //  [`call_once()`]: Once::call_once
  //
  //  # Examples
  //
  //  ```
  //  use std::sync::Once;
  //
  //  static INIT: Once = Once::new();
  //
  //  assert_eq!(INIT.is_completed(), false);
  //  INIT.call_once(|| {
  //      assert_eq!(INIT.is_completed(), false);
  //  });
  //  assert_eq!(INIT.is_completed(), true);
  //  ```
  //
  //  ```
  //  use std::sync::Once;
  //  use std::thread;
  //
  //  static INIT: Once = Once::new();
  //
  //  assert_eq!(INIT.is_completed(), false);
  //  let handle = thread::spawn(|| {
  //      INIT.call_once(|| panic!());
  //  });
  //  assert!(handle.join().is_err());
  //  assert_eq!(INIT.is_completed(), false);
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/once.rs;l=272
  bool is_completed() const;

  //  Blocks the current thread until initialization has completed.
  //
  //  # Example
  //
  //  ```rust
  //  use std::sync::Once;
  //  use std::thread;
  //
  //  static READY: Once = Once::new();
  //
  //  let thread = thread::spawn(|| {
  //      READY.wait();
  //      println!("everything is ready");
  //  });
  //
  //  READY.call_once(|| println!("performing setup"));
  //  ```
  //
  //  # Panics
  //
  //  If this [`Once`] has been poisoned because an initialization closure has
  //  panicked, this method will also panic. Use
  //  [`wait_force`](Self::wait_force) if this behavior is not desired.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/once.rs;l=302
  void wait() const;

  //  Blocks the current thread until initialization has completed, ignoring
  //  poisoning.
  //
  //  If this [`Once`] has been poisoned, this function blocks until it
  //  becomes completed, unlike [`Once::wait()`], which panics in this case.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/once.rs;l=316
  void wait_force() const;

 private:
  // Field type has been replaced with a blob of bytes: Not a public or a
  // supported reexported type (b/262052635).
  ::std::array<unsigned char, 4> inner;

 private:
  static void __crubit_field_offset_assertions();
};

//  State yielded to [`Once::call_once_force()`]’s closure parameter. The state
//  can be used to query the poison status of the [`Once`].
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/once.rs;l=48
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: sync :: OnceState") alignas(4)
    [[clang::trivial_abi]] OnceState final {
 public:
  // `std::sync::OnceState` doesn't implement the `Default` trait
  OnceState() = delete;

  // No custom `Drop` impl and no custom "drop glue" required
  ~OnceState() = default;
  OnceState(OnceState&&) = default;
  OnceState& operator=(OnceState&&) = default;

  // `std::sync::OnceState` doesn't implement the `Clone` trait
  OnceState(const OnceState&) = delete;
  OnceState& operator=(const OnceState&) = delete;
  OnceState(::crubit::UnsafeRelocateTag, OnceState&& value);

  //  Returns `true` if the associated [`Once`] was poisoned prior to the
  //  invocation of the closure passed to [`Once::call_once_force()`].
  //
  //  # Examples
  //
  //  A poisoned [`Once`]:
  //
  //  ```
  //  use std::sync::Once;
  //  use std::thread;
  //
  //  static INIT: Once = Once::new();
  //
  //  // poison the once
  //  let handle = thread::spawn(|| {
  //      INIT.call_once(|| panic!());
  //  });
  //  assert!(handle.join().is_err());
  //
  //  INIT.call_once_force(|state| {
  //      assert!(state.is_poisoned());
  //  });
  //  ```
  //
  //  An unpoisoned [`Once`]:
  //
  //  ```
  //  use std::sync::Once;
  //
  //  static INIT: Once = Once::new();
  //
  //  INIT.call_once_force(|state| {
  //      assert!(!state.is_poisoned());
  //  });
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/once.rs;l=387
  bool is_poisoned() const;

 private:
  // Field type has been replaced with a blob of bytes: Not a public or a
  // supported reexported type (b/262052635).
  ::std::array<unsigned char, 8> inner;

 private:
  static void __crubit_field_offset_assertions();
};

}  // namespace rs::std::sync

namespace rs::std::sync {

// Error generating bindings for struct `sync::once_lock::OnceLock` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/once_lock.rs;l=109:
// crubit.rs/errors/unsupported_type: Generic types are not supported yet
// (b/259749095)

}

namespace rs::std::sync {

// Error generating bindings for type alias `sync::poison::LockResult` defined
// at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/poison.rs;l=232:
// crubit.rs/errors/unsupported_type: Generic type parameter `T` is not
// supported without monomorphization

// Error generating bindings for struct `sync::poison::PoisonError` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/poison.rs;l=194:
// crubit.rs/errors/unsupported_type: Generic types are not supported yet
// (b/259749095)

// Error generating bindings for enum `sync::poison::TryLockError` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/poison.rs;l=210:
// crubit.rs/errors/unsupported_type: Generic types are not supported yet
// (b/259749095)

// Error generating bindings for type alias `sync::poison::TryLockResult`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/poison.rs;l=240:
// crubit.rs/errors/unsupported_type: Generic type parameter `Guard` is not
// supported without monomorphization

}  // namespace rs::std::sync

namespace rs::std::sync {

//  A Condition Variable
//
//  Condition variables represent the ability to block a thread such that it
//  consumes no CPU time while waiting for an event to occur. Condition
//  variables are typically associated with a boolean predicate (a condition)
//  and a mutex. The predicate is always verified inside of the mutex before
//  determining that a thread must block.
//
//  Functions in this module will block the current **thread** of execution.
//  Note that any attempt to use multiple mutexes on the same condition
//  variable may result in a runtime panic.
//
//  # Examples
//
//  ```
//  use std::sync::{Arc, Mutex, Condvar};
//  use std::thread;
//
//  let pair = Arc::new((Mutex::new(false), Condvar::new()));
//  let pair2 = Arc::clone(&pair);
//
//  // Inside of our lock, spawn a new thread, and then wait for it to start.
//  thread::spawn(move || {
//      let (lock, cvar) = &*pair2;
//      let mut started = lock.lock().unwrap();
//      *started = true;
//      // We notify the condvar that the value has changed.
//      cvar.notify_one();
//  });
//
//  // Wait for the thread to start up.
//  let (lock, cvar) = &*pair;
//  let mut started = lock.lock().unwrap();
//  while !*started {
//      started = cvar.wait(started).unwrap();
//  }
//  ```
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/poison/condvar.rs;l=45
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: sync :: Condvar") alignas(4)
    [[clang::trivial_abi]] Condvar final {
 public:
  // Default::default
  Condvar();

  // No custom `Drop` impl and no custom "drop glue" required
  ~Condvar() = default;
  Condvar(Condvar&&) = default;
  Condvar& operator=(Condvar&&) = default;

  // `std::sync::Condvar` doesn't implement the `Clone` trait
  Condvar(const Condvar&) = delete;
  Condvar& operator=(const Condvar&) = delete;
  Condvar(::crubit::UnsafeRelocateTag, Condvar&& value);

  //  Creates a new condition variable which is ready to be waited on and
  //  notified.
  //
  //  # Examples
  //
  //  ```
  //  use std::sync::Condvar;
  //
  //  let condvar = Condvar::new();
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/poison/condvar.rs;l=64
  [[nodiscard]] static ::rs::std::sync::Condvar new_();

  // Error generating bindings for associated function
  // `sync::poison::condvar::Condvar::wait` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/poison/condvar.rs;l=125:
  // No valid non-generic replacement for generic type param `T`

  // Error generating bindings for associated function
  // `sync::poison::condvar::Condvar::wait_while` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/poison/condvar.rs;l=182:
  // No valid non-generic replacement for generic type param `T`

  // Error generating bindings for associated function
  // `sync::poison::condvar::Condvar::wait_timeout_ms` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/poison/condvar.rs;l=252:
  // No valid non-generic replacement for generic type param `T`

  // Error generating bindings for associated function
  // `sync::poison::condvar::Condvar::wait_timeout` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/poison/condvar.rs;l=323:
  // No valid non-generic replacement for generic type param `T`

  // Error generating bindings for associated function
  // `sync::poison::condvar::Condvar::wait_timeout_while` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/poison/condvar.rs;l=390:
  // No valid non-generic replacement for generic type param `T`

  //  Wakes up one blocked thread on this condvar.
  //
  //  If there is a blocked thread on this condition variable, then it will
  //  be woken up from its call to [`wait`] or [`wait_timeout`]. Calls to
  //  `notify_one` are not buffered in any way.
  //
  //  To wake up all threads, see [`notify_all`].
  //
  //  [`wait`]: Self::wait
  //  [`wait_timeout`]: Self::wait_timeout
  //  [`notify_all`]: Self::notify_all
  //
  //  # Examples
  //
  //  ```
  //  use std::sync::{Arc, Mutex, Condvar};
  //  use std::thread;
  //
  //  let pair = Arc::new((Mutex::new(false), Condvar::new()));
  //  let pair2 = Arc::clone(&pair);
  //
  //  thread::spawn(move || {
  //      let (lock, cvar) = &*pair2;
  //      let mut started = lock.lock().unwrap();
  //      *started = true;
  //      // We notify the condvar that the value has changed.
  //      cvar.notify_one();
  //  });
  //
  //  // Wait for the thread to start up.
  //  let (lock, cvar) = &*pair;
  //  let mut started = lock.lock().unwrap();
  //  // As long as the value inside the `Mutex<bool>` is `false`, we wait.
  //  while !*started {
  //      started = cvar.wait(started).unwrap();
  //  }
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/poison/condvar.rs;l=451
  void notify_one() const;

  //  Wakes up all blocked threads on this condvar.
  //
  //  This method will ensure that any current waiters on the condition
  //  variable are awoken. Calls to `notify_all()` are not buffered in any
  //  way.
  //
  //  To wake up only one thread, see [`notify_one`].
  //
  //  [`notify_one`]: Self::notify_one
  //
  //  # Examples
  //
  //  ```
  //  use std::sync::{Arc, Mutex, Condvar};
  //  use std::thread;
  //
  //  let pair = Arc::new((Mutex::new(false), Condvar::new()));
  //  let pair2 = Arc::clone(&pair);
  //
  //  thread::spawn(move || {
  //      let (lock, cvar) = &*pair2;
  //      let mut started = lock.lock().unwrap();
  //      *started = true;
  //      // We notify the condvar that the value has changed.
  //      cvar.notify_all();
  //  });
  //
  //  // Wait for the thread to start up.
  //  let (lock, cvar) = &*pair;
  //  let mut started = lock.lock().unwrap();
  //  // As long as the value inside the `Mutex<bool>` is `false`, we wait.
  //  while !*started {
  //      started = cvar.wait(started).unwrap();
  //  }
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/poison/condvar.rs;l=492
  void notify_all() const;

 private:
  // Field type has been replaced with a blob of bytes: Not a public or a
  // supported reexported type (b/262052635).
  ::std::array<unsigned char, 4> inner;

 private:
  static void __crubit_field_offset_assertions();
};

}  // namespace rs::std::sync

namespace rs::std::sync {

// Error generating bindings for struct `sync::poison::mutex::Mutex` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/poison/mutex.rs;l=227:
// crubit.rs/errors/unsupported_type: Generic types are not supported yet
// (b/259749095)

// Error generating bindings for struct `sync::poison::mutex::MutexGuard`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/poison/mutex.rs;l=277:
// crubit.rs/errors/unsupported_type: Generic types are not supported yet
// (b/259749095)

}  // namespace rs::std::sync

namespace rs::std::sync {

// Error generating bindings for struct `sync::poison::rwlock::RwLock` defined
// at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/poison/rwlock.rs;l=94:
// crubit.rs/errors/unsupported_type: Generic types are not supported yet
// (b/259749095)

// Error generating bindings for struct `sync::poison::rwlock::RwLockReadGuard`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/poison/rwlock.rs;l=128:
// crubit.rs/errors/unsupported_type: Generic types are not supported yet
// (b/259749095)

// Error generating bindings for struct `sync::poison::rwlock::RwLockWriteGuard`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/poison/rwlock.rs;l=160:
// crubit.rs/errors/unsupported_type: Generic types are not supported yet
// (b/259749095)

}  // namespace rs::std::sync

namespace rs::std::thread {

// Error generating bindings for type alias `thread::Result` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/thread/mod.rs;l=263:
// crubit.rs/errors/unsupported_type: Generic type parameter `T` is not
// supported without monomorphization

}

namespace rs::std::thread {

//  Gets a handle to the thread that invokes it.
//
//  # Examples
//
//  Getting a handle to the current thread with `thread::current()`:
//
//  ```
//  use std::thread;
//
//  let handler = thread::Builder::new()
//      .name("named thread".into())
//      .spawn(|| {
//          let handle = thread::current();
//          assert_eq!(handle.name(), Some("named thread"));
//      })
//      .unwrap();
//
//  handler.join().unwrap();
//  ```
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/thread/current.rs;l=276
[[nodiscard]] ::rs::std::thread::Thread current();

}  // namespace rs::std::thread

namespace rs::std::thread {

// Error generating bindings for function
// `thread::functions::available_parallelism` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/thread/functions.rs;l=694:
// Error formatting function return type
// `core::result::Result<core::num::NonZero<usize>, core::io::Error>`: Generic
// types are not supported yet (b/259749095)

//  Determines whether the current thread is panicking.
//
//  This returns `true` both when the thread is unwinding due to a panic,
//  or executing a panic hook. Note that the latter case will still happen
//  when `panic=abort` is set.
//
//  A common use of this feature is to poison shared resources when writing
//  unsafe code, by checking `panicking` when the `drop` is called.
//
//  This is usually not needed when writing safe code, as [`Mutex`es][Mutex]
//  already poison themselves when a thread panics while holding the lock.
//
//  This can also be used in multithreaded applications, in order to send a
//  message to other threads warning that a thread has panicked (e.g., for
//  monitoring purposes).
//
//  # Examples
//
//  ```should_panic
//  use std::thread;
//
//  struct SomeStruct;
//
//  impl Drop for SomeStruct {
//      fn drop(&mut self) {
//          if thread::panicking() {
//              println!("dropped while unwinding");
//          } else {
//              println!("dropped while not unwinding");
//          }
//      }
//  }
//
//  {
//      print!("a: ");
//      let a = SomeStruct;
//  }
//
//  {
//      print!("b: ");
//      let b = SomeStruct;
//      panic!()
//  }
//  ```
//
//  [Mutex]: crate::sync::Mutex
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/thread/functions.rs;l=220
[[nodiscard]] bool panicking();

//  Blocks unless or until the current thread's token is made available.
//
//  A call to `park` does not guarantee that the thread will remain parked
//  forever, and callers should be prepared for this possibility. However,
//  it is guaranteed that this function will not panic (it may abort the
//  process if the implementation encounters some rare errors).
//
//  # `park` and `unpark`
//
//  Every thread is equipped with some basic low-level blocking support, via the
//  [`thread::park`][`park`] function and [`thread::Thread::unpark`][`unpark`]
//  method. [`park`] blocks the current thread, which can then be resumed from
//  another thread by calling the [`unpark`] method on the blocked thread's
//  handle.
//
//  Conceptually, each [`Thread`] handle has an associated token, which is
//  initially not present:
//
//  * The [`thread::park`][`park`] function blocks the current thread unless or
//    until the token is available for its thread handle, at which point it
//    atomically consumes the token. It may also return *spuriously*, without
//    consuming the token. [`thread::park_timeout`] does the same, but allows
//    specifying a maximum time to block the thread for.
//
//  * The [`unpark`] method on a [`Thread`] atomically makes the token available
//    if it wasn't already. Because the token can be held by a thread even if it
//    is currently not parked, [`unpark`] followed by [`park`] will result in
//    the second call returning immediately. However, note that to rely on this
//    guarantee, you need to make sure that your `unpark` happens after all
//    `park` that may be done by other data structures!
//
//  The API is typically used by acquiring a handle to the current thread,
//  placing that handle in a shared data structure so that other threads can
//  find it, and then `park`ing in a loop. When some desired condition is met,
//  another thread calls [`unpark`] on the handle. The last bullet point above
//  guarantees that even if the `unpark` occurs before the thread is finished
//  `park`ing, it will be woken up properly.
//
//  Note that the coordination via the shared data structure is crucial: If you
//  `unpark` a thread without first establishing that it is about to be
//  `park`ing within your code, that `unpark` may get consumed by a *different*
//  `park` in the same thread, leading to a deadlock. This also means you must
//  not call unknown code between setting up for parking and calling `park`; for
//  instance, if you invoke `println!`, that may itself call `park` and thus
//  consume your `unpark` and cause a deadlock.
//
//  The motivation for this design is twofold:
//
//  * It avoids the need to allocate mutexes and condvars when building new
//    synchronization primitives; the threads already provide basic
//    blocking/signaling.
//
//  * It can be implemented very efficiently on many platforms.
//
//  # Memory Ordering
//
//  Calls to `unpark` _synchronize-with_ calls to `park`, meaning that memory
//  operations performed before a call to `unpark` are made visible to the
//  thread that consumes the token and returns from `park`. Note that all `park`
//  and `unpark` operations for a given thread form a total order and _all_
//  prior `unpark` operations synchronize-with `park`.
//
//  In atomic ordering terms, `unpark` performs a `Release` operation and `park`
//  performs the corresponding `Acquire` operation. Calls to `unpark` for the
//  same thread form a [release sequence].
//
//  Note that being unblocked does not imply a call was made to `unpark`,
//  because wakeups can also be spurious. For example, a valid, but inefficient,
//  implementation could have `park` and `unpark` return immediately without
//  doing anything, making *all* wakeups spurious.
//
//  # Examples
//
//  ```
//  use std::thread;
//  use std::sync::atomic::{Ordering, AtomicBool};
//  use std::time::Duration;
//
//  static QUEUED: AtomicBool = AtomicBool::new(false);
//  static FLAG: AtomicBool = AtomicBool::new(false);
//
//  let parked_thread = thread::spawn(move || {
//      println!("Thread spawned");
//      // Signal that we are going to `park`. Between this store and our
//      `park`, there may
//      // be no other `park`, or else that `park` could consume our `unpark`
//      token! QUEUED.store(true, Ordering::Release);
//      // We want to wait until the flag is set. We *could* just spin, but
//      using
//      // park/unpark is more efficient.
//      while !FLAG.load(Ordering::Acquire) {
//          // We can *not* use `println!` here since that could use thread
//          parking internally. thread::park();
//          // We *could* get here spuriously, i.e., way before the 10ms below
//          are over!
//          // But that is no problem, we are in a loop until the flag is set
//          anyway.
//      }
//      println!("Flag received");
//  });
//
//  // Let some time pass for the thread to be spawned.
//  thread::sleep(Duration::from_millis(10));
//
//  // Ensure the thread is about to park.
//  // This is crucial! It guarantees that the `unpark` below is not consumed
//  // by some other code in the parked thread (e.g. inside `println!`).
//  while !QUEUED.load(Ordering::Acquire) {
//      // Spinning is of course inefficient; in practice, this would more
//      likely be
//      // a dequeue where we have no work to do if there's nobody queued.
//      std::hint::spin_loop();
//  }
//
//  // Set the flag, and let the thread wake up.
//  // There is no race condition here: if `unpark`
//  // happens first, `park` will return immediately.
//  // There is also no other `park` that could consume this token,
//  // since we waited until the other thread got queued.
//  // Hence there is no risk of a deadlock.
//  FLAG.store(true, Ordering::Release);
//  println!("Unpark the thread");
//  parked_thread.thread().unpark();
//
//  parked_thread.join().unwrap();
//  ```
//
//  [`Thread`]: super::Thread
//  [`unpark`]: super::Thread::unpark
//  [`thread::park_timeout`]: park_timeout
//  [release sequence]:
//  https://en.cppreference.com/w/cpp/atomic/memory_order#Release_sequence
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/thread/functions.rs;l=529
void park();

//  Blocks unless or until the current thread's token is made available or
//  the specified duration has been reached (may wake spuriously).
//
//  The semantics of this function are equivalent to [`park`][park] except
//  that the thread will be blocked for roughly no longer than `dur`. This
//  method should not be used for precise timing due to anomalies such as
//  preemption or platform differences that might not cause the maximum
//  amount of time waited to be precisely `dur` long.
//
//  See the [park documentation][park] for more details.
//
//  # Platform-specific behavior
//
//  Platforms which do not support nanosecond precision for sleeping will have
//  `dur` rounded up to the nearest granularity of time they can sleep for.
//
//  # Examples
//
//  Waiting for the complete expiration of the timeout:
//
//  ```rust,no_run
//  use std::thread::park_timeout;
//  use std::time::{Instant, Duration};
//
//  let timeout = Duration::from_secs(2);
//  let beginning_park = Instant::now();
//
//  let mut timeout_remaining = timeout;
//  loop {
//      park_timeout(timeout_remaining);
//      let elapsed = beginning_park.elapsed();
//      if elapsed >= timeout {
//          break;
//      }
//      println!("restarting park_timeout after {elapsed:?}");
//      timeout_remaining = timeout - elapsed;
//  }
//  ```
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/thread/functions.rs;l=596
void park_timeout(::rs::core::time::Duration dur);

//  Uses [`park_timeout`].
//
//  Blocks unless or until the current thread's token is made available or
//  the specified duration has been reached (may wake spuriously).
//
//  The semantics of this function are equivalent to [`park`] except
//  that the thread will be blocked for roughly no longer than `dur`. This
//  method should not be used for precise timing due to anomalies such as
//  preemption or platform differences that might not cause the maximum
//  amount of time waited to be precisely `ms` long.
//
//  See the [park documentation][`park`] for more detail.
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/thread/functions.rs;l=553
[[deprecated("replaced by `std::thread::park_timeout`")]] void park_timeout_ms(
    ::std::uint32_t ms);

//  Puts the current thread to sleep for at least the specified amount of time.
//
//  The thread may sleep longer than the duration specified due to scheduling
//  specifics or platform-dependent functionality. It will never sleep less.
//
//  This function is blocking, and should not be used in `async` functions.
//
//  # Platform-specific behavior
//
//  On Unix platforms, the underlying syscall may be interrupted by a
//  spurious wakeup or signal handler. To ensure the sleep occurs for at least
//  the specified duration, this function may invoke that system call multiple
//  times.
//  Platforms which do not support nanosecond precision for sleeping will
//  have `dur` rounded up to the nearest granularity of time they can sleep for.
//
//  Currently, specifying a zero duration on Unix platforms returns immediately
//  without invoking the underlying [`nanosleep`] syscall, whereas on Windows
//  platforms the underlying [`Sleep`] syscall is always invoked.
//  If the intention is to yield the current time-slice you may want to use
//  [`yield_now`] instead.
//
//  [`nanosleep`]: https://linux.die.net/man/2/nanosleep
//  [`Sleep`]:
//  https://docs.microsoft.com/en-us/windows/win32/api/synchapi/nf-synchapi-sleep
//
//  # Examples
//
//  ```no_run
//  use std::{thread, time};
//
//  let ten_millis = time::Duration::from_millis(10);
//  let now = time::Instant::now();
//
//  thread::sleep(ten_millis);
//
//  assert!(now.elapsed() >= ten_millis);
//  ```
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/thread/functions.rs;l=292
void sleep(::rs::core::time::Duration dur);

//  Uses [`sleep`].
//
//  Puts the current thread to sleep for at least the specified amount of time.
//
//  The thread may sleep longer than the duration specified due to scheduling
//  specifics or platform-dependent functionality. It will never sleep less.
//
//  This function is blocking, and should not be used in `async` functions.
//
//  # Platform-specific behavior
//
//  On Unix platforms, the underlying syscall may be interrupted by a
//  spurious wakeup or signal handler. To ensure the sleep occurs for at least
//  the specified duration, this function may invoke that system call multiple
//  times.
//
//  # Examples
//
//  ```no_run
//  use std::thread;
//
//  // Let's sleep for 2 seconds:
//  thread::sleep_ms(2000);
//  ```
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/thread/functions.rs;l=250
[[deprecated("replaced by `std::thread::sleep`")]] void sleep_ms(
    ::std::uint32_t ms);

// Error generating bindings for function `thread::functions::spawn` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/thread/functions.rs;l=125:
// No valid non-generic replacement for generic type param `F`

//  Cooperatively gives up a timeslice to the OS scheduler.
//
//  This calls the underlying OS scheduler's yield primitive, signaling
//  that the calling thread is willing to give up its remaining timeslice
//  so that the OS may schedule other threads on the CPU.
//
//  A drawback of yielding in a loop is that if the OS does not have any
//  other ready threads to run on the current CPU, the thread will effectively
//  busy-wait, which wastes CPU time and energy.
//
//  Therefore, when waiting for events of interest, a programmer's first
//  choice should be to use synchronization devices such as [`channel`]s,
//  [`Condvar`]s, [`Mutex`]es or [`join`] since these primitives are
//  implemented in a blocking manner, giving up the CPU until the event
//  of interest has occurred which avoids repeated yielding.
//
//  `yield_now` should thus be used only rarely, mostly in situations where
//  repeated polling is required because there is no other suitable way to
//  learn when an event of interest has occurred.
//
//  # Examples
//
//  ```
//  use std::thread;
//
//  thread::yield_now();
//  ```
//
//  [`channel`]: crate::sync::mpsc
//  [`join`]: JoinHandle::join
//  [`Condvar`]: crate::sync::Condvar
//  [`Mutex`]: crate::sync::Mutex
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/thread/functions.rs;l=167
void yield_now();

}  // namespace rs::std::thread

namespace rs::std::thread {

//  A unique identifier for a running thread.
//
//  A `ThreadId` is an opaque object that uniquely identifies each thread
//  created during the lifetime of a process. `ThreadId`s are guaranteed not to
//  be reused, even when a thread terminates. `ThreadId`s are under the control
//  of Rust's standard library and there may not be any relationship between
//  `ThreadId` and the underlying platform's notion of a thread identifier --
//  the two concepts cannot, therefore, be used interchangeably. A `ThreadId`
//  can be retrieved from the [`id`] method on a [`Thread`].
//
//  # Examples
//
//  ```
//  use std::thread;
//
//  let other_thread = thread::spawn(|| {
//      thread::current().id()
//  });
//
//  let other_thread_id = other_thread.join().unwrap();
//  assert!(thread::current().id() != other_thread_id);
//  ```
//
//  [`Thread`]: super::Thread
//  [`id`]: super::Thread::id
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/thread/id.rs;l=31
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: thread :: ThreadId") alignas(8)
    [[clang::trivial_abi]] ThreadId final {
 public:
  // `std::thread::ThreadId` doesn't implement the `Default` trait
  ThreadId() = delete;

  // No custom `Drop` impl and no custom "drop glue" required
  ~ThreadId() = default;
  ThreadId(ThreadId&&) = default;
  ThreadId& operator=(ThreadId&&) = default;

  // Rust types that are `Copy` get trivial, `default` C++ copy constructor and
  // assignment operator.
  ThreadId(const ThreadId&) = default;
  ThreadId& operator=(const ThreadId&) = default;
  ThreadId(::crubit::UnsafeRelocateTag, ThreadId&& value);

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/thread/id.rs;l=30
  bool operator==(::rs::std::thread::ThreadId const& other) const;

 private:
  // Field type has been replaced with a blob of bytes: Generic types are not
  // supported yet (b/259749095)
  ::std::array<unsigned char, 8> __field0;

 private:
  static void __crubit_field_offset_assertions();
};

}  // namespace rs::std::thread

namespace rs::std::thread {

// Error generating bindings for struct `thread::join_handle::JoinHandle`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/thread/join_handle.rs;l=71:
// crubit.rs/errors/unsupported_type: Generic types are not supported yet
// (b/259749095)

}

namespace rs::std::thread {

// Error generating bindings for struct `thread::local::AccessError` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/thread/local.rs;l=362:
// Zero-sized types (ZSTs) are not supported (b/258259459)

// Error generating bindings for struct `thread::local::LocalKey` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/thread/local.rs;l=116:
// crubit.rs/errors/unsupported_type: Generic types are not supported yet
// (b/259749095)

}  // namespace rs::std::thread

namespace rs::std {

// Error generating bindings for macro `thread::local::thread_local` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/thread/local.rs;l=350:
// Unsupported rustc_hir::hir::DefKind: Macro(MacroKinds(1))

}

namespace rs::std::thread {

//  A scope to spawn scoped threads in.
//
//  See [`scope`] for details.
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/thread/scoped.rs;l=16
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: thread :: Scope") alignas(8)
    [[clang::trivial_abi]] Scope final {
 public:
  // `std::thread::Scope` doesn't implement the `Default` trait
  Scope() = delete;

  // Drop::drop
  ~Scope();

  // C++ move operations are unavailable for this type. See
  // http://crubit.rs/rust/movable_types for an explanation of Rust types that
  // are C++ movable.
  Scope(Scope&&) = delete;
  ::rs::std::thread::Scope& operator=(Scope&&) = delete;
  // `std::thread::Scope` doesn't implement the `Clone` trait
  Scope(const Scope&) = delete;
  Scope& operator=(const Scope&) = delete;
  Scope(::crubit::UnsafeRelocateTag, Scope&& value);

  // Error generating bindings for associated function
  // `thread::scoped::Scope::<'scope, 'env>::spawn` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/thread/scoped.rs;l=201:
  // No valid non-generic replacement for generic type param `F`

 private:
  // Field type has been replaced with a blob of bytes: Generic types are not
  // supported yet (b/259749095)
  ::std::array<unsigned char, 8> data;
  // Field `scope` omitted: C++ does not support zero-sized types.

  // Field `env` omitted: C++ does not support zero-sized types.
 private:
  static void __crubit_field_offset_assertions();
};

// Error generating bindings for struct `thread::scoped::ScopedJoinHandle`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/thread/scoped.rs;l=39:
// crubit.rs/errors/unsupported_type: Generic types are not supported yet
// (b/259749095)

// Error generating bindings for function `thread::scoped::scope` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/thread/scoped.rs;l=141:
// No valid non-generic replacement for generic type param `F`

}  // namespace rs::std::thread

namespace rs::std::thread {

//  A handle to a thread.
//
//  Threads are represented via the `Thread` type, which you can get in one of
//  two ways:
//
//  * By spawning a new thread, e.g., using the [`thread::spawn`]
//    function, and calling [`thread`] on the [`JoinHandle`].
//  * By requesting the current thread, using the [`thread::current`] function.
//
//  The [`thread::current`] function is available even for threads not spawned
//  by the APIs of this module.
//
//  There is usually no need to create a `Thread` struct yourself, one
//  should instead use a function like `spawn` to create new threads, see the
//  docs of [`Builder`] and [`spawn`] for more details.
//
//  [`thread::spawn`]: super::spawn
//  [`thread`]: super::JoinHandle::thread
//  [`JoinHandle`]: super::JoinHandle
//  [`thread::current`]: super::current::current
//  [`Builder`]: super::Builder
//  [`spawn`]: super::spawn
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/thread/thread.rs;l=85
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: thread :: Thread") alignas(8)
    [[clang::trivial_abi]] Thread final {
 public:
  // `std::thread::Thread` doesn't implement the `Default` trait
  Thread() = delete;

  // Drop::drop
  ~Thread();

  // Clone::clone
  Thread(const Thread&);

  // Clone::clone_from
  ::rs::std::thread::Thread& operator=(const Thread&);

  Thread(::crubit::UnsafeRelocateTag, Thread&& value);

  //  Atomically makes the handle's token available if it is not already.
  //
  //  Every thread is equipped with some basic low-level blocking support, via
  //  the [`park`] function and the `unpark()` method. These can be used as a
  //  more CPU-efficient implementation of a spinlock.
  //
  //  See the [park documentation] for more details.
  //
  //  # Examples
  //
  //  ```
  //  use std::thread;
  //  use std::time::Duration;
  //  use std::sync::atomic::{AtomicBool, Ordering};
  //
  //  static QUEUED: AtomicBool = AtomicBool::new(false);
  //
  //  let parked_thread = thread::Builder::new()
  //      .spawn(|| {
  //          println!("Parking thread");
  //          QUEUED.store(true, Ordering::Release);
  //          thread::park();
  //          println!("Thread unparked");
  //      })
  //      .unwrap();
  //
  //  // Let some time pass for the thread to be spawned.
  //  thread::sleep(Duration::from_millis(10));
  //
  //  // Wait until the other thread is queued.
  //  // This is crucial! It guarantees that the `unpark` below is not consumed
  //  // by some other code in the parked thread (e.g. inside `println!`).
  //  while !QUEUED.load(Ordering::Acquire) {
  //      // Spinning is of course inefficient; in practice, this would more
  //      likely be
  //      // a dequeue where we have no work to do if there's nobody queued.
  //      std::hint::spin_loop();
  //  }
  //
  //  println!("Unpark the thread");
  //  parked_thread.thread().unpark();
  //
  //  parked_thread.join().unwrap();
  //  ```
  //
  //  [`park`]: super::park
  //  [park documentation]: super::park
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/thread/thread.rs;l=183
  void unpark() const;

  //  Gets the thread's unique identifier.
  //
  //  # Examples
  //
  //  ```
  //  use std::thread;
  //
  //  let other_thread = thread::spawn(|| {
  //      thread::current().id()
  //  });
  //
  //  let other_thread_id = other_thread.join().unwrap();
  //  assert!(thread::current().id() != other_thread_id);
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/thread/thread.rs;l=203
  [[nodiscard]] ::rs::std::thread::ThreadId id() const;

  //  Gets the thread's name.
  //
  //  For more information about named threads, see
  //  [this module-level documentation][naming-threads].
  //
  //  # Examples
  //
  //  Threads by default have no name specified:
  //
  //  ```
  //  use std::thread;
  //
  //  let builder = thread::Builder::new();
  //
  //  let handler = builder.spawn(|| {
  //      assert!(thread::current().name().is_none());
  //  }).unwrap();
  //
  //  handler.join().unwrap();
  //  ```
  //
  //  Thread with a specified name:
  //
  //  ```
  //  use std::thread;
  //
  //  let builder = thread::Builder::new()
  //      .name("foo".into());
  //
  //  let handler = builder.spawn(|| {
  //      assert_eq!(thread::current().name(), Some("foo"))
  //  }).unwrap();
  //
  //  handler.join().unwrap();
  //  ```
  //
  //  [naming-threads]: ./index.html#naming-threads
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/thread/thread.rs;l=246
  [[nodiscard]] ::std::optional<rs_std::StrRef> name() const& $(__anon1)
      CRUBIT_LIFETIME_BOUND;

 private:
  // Field type has been replaced with a blob of bytes: Generic types are not
  // supported yet (b/259749095)
  ::std::array<unsigned char, 8> inner;

 private:
  static void __crubit_field_offset_assertions();
};

}  // namespace rs::std::thread

namespace rs::std::time {

//  A measurement of a monotonically nondecreasing clock.
//  Opaque and useful only with [`Duration`].
//
//  Instants are always guaranteed, barring [platform bugs], to be no less than
//  any previously measured instant when created, and are often useful for tasks
//  such as measuring benchmarks or timing how long an operation takes.
//
//  Note, however, that instants are **not** guaranteed to be **steady**. In
//  other words, each tick of the underlying clock might not be the same length
//  (e.g. some seconds may be longer than others). An instant may jump forwards
//  or experience time dilation (slow down or speed up), but it will never go
//  backwards.
//  As part of this non-guarantee it is also not specified whether system
//  suspends count as elapsed time or not. The behavior varies across platforms
//  and Rust versions.
//
//  Instants are opaque types that can only be compared to one another. There is
//  no method to get "the number of seconds" from an instant. Instead, it only
//  allows measuring the duration between two instants (or comparing two
//  instants).
//
//  The size of an `Instant` struct may vary depending on the target operating
//  system.
//
//  Example:
//
//  ```no_run
//  use std::time::{Duration, Instant};
//  use std::thread::sleep;
//
//  fn main() {
//     let now = Instant::now();
//
//     // we sleep for 2 seconds
//     sleep(Duration::new(2, 0));
//     // it prints '2'
//     println!("{}", now.elapsed().as_secs());
//  }
//  ```
//
//  [platform bugs]: Instant#monotonicity
//
//  # OS-specific behaviors
//
//  An `Instant` is a wrapper around system-specific types and it may behave
//  differently depending on the underlying operating system. For example,
//  the following snippet is fine on Linux but panics on macOS:
//
//  ```no_run
//  use std::time::{Instant, Duration};
//
//  let now = Instant::now();
//  let days_per_10_millennia = 365_2425;
//  let solar_seconds_per_day = 60 * 60 * 24;
//  let millennium_in_solar_seconds = 31_556_952_000;
//  assert_eq!(millennium_in_solar_seconds, days_per_10_millennia *
//  solar_seconds_per_day / 10);
//
//  let duration = Duration::new(millennium_in_solar_seconds, 0);
//  println!("{:?}", now + duration);
//  ```
//
//  For cross-platform code, you can comfortably use durations of up to around
//  one hundred years.
//
//  # Underlying System calls
//
//  The following system calls are [currently] being used by `now()` to find out
//  the current time:
//
//  |  Platform |               System call |
//  |-----------|----------------------------------------------------------------------|
//  | SGX       | [`insecure_time` usercall]. More information on [timekeeping
//  in SGX] | | UNIX      | [clock_gettime] with `CLOCK_MONOTONIC` | | WASI |
//  [clock_gettime] with `CLOCK_MONOTONIC`                               | |
//  Darwin    | [clock_gettime] with `CLOCK_UPTIME_RAW` | | VXWorks   |
//  [clock_gettime] with `CLOCK_MONOTONIC`                               | |
//  SOLID     | `get_tim` | | Windows   | [QueryPerformanceCounter] |
//
//  [currently]: crate::io#platform-specific-behavior
//  [QueryPerformanceCounter]:
//  https://docs.microsoft.com/en-us/windows/win32/api/profileapi/nf-profileapi-queryperformancecounter
//  [`insecure_time` usercall]:
//  https://edp.fortanix.com/docs/api/fortanix_sgx_abi/struct.Usercalls.html#method.insecure_time
//  [timekeeping in SGX]:
//  https://edp.fortanix.com/docs/concepts/rust-std/#codestdtimecode
//  [clock_gettime]:
//  https://pubs.opengroup.org/onlinepubs/9799919799/functions/clock_getres.html
//
//  **Disclaimer:** These system calls might change over time.
//
//  > Note: mathematical operations like [`add`] may panic if the underlying
//  > structure cannot represent the new point in time.
//
//  [`add`]: Instant::add
//
//  ## Monotonicity
//
//  On all platforms `Instant` will try to use an OS API that guarantees
//  monotonic behavior if available, which is the case for all [tier 1]
//  platforms. In practice such guarantees are – under rare circumstances –
//  broken by hardware, virtualization or operating system bugs. To work around
//  these bugs and platforms not offering monotonic clocks
//  [`duration_since`], [`elapsed`] and [`sub`](#impl-Sub-for-Instant) saturate
//  to zero. In older Rust versions this lead to a panic instead.
//  [`checked_duration_since`] can be used to detect and handle situations where
//  monotonicity is violated, or `Instant`s are subtracted in the wrong order.
//
//  This workaround obscures programming errors where earlier and later instants
//  are accidentally swapped. For this reason future Rust versions may
//  reintroduce panics.
//
//  [tier 1]: https://doc.rust-lang.org/rustc/platform-support.html
//  [`duration_since`]: Instant::duration_since
//  [`elapsed`]: Instant::elapsed
//  [`sub`]: Instant::sub
//  [`checked_duration_since`]: Instant::checked_duration_since
//
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/time.rs;l=156
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: time :: Instant") alignas(8)
    [[clang::trivial_abi]] Instant final {
 public:
  // `std::time::Instant` doesn't implement the `Default` trait
  Instant() = delete;

  // No custom `Drop` impl and no custom "drop glue" required
  ~Instant() = default;
  Instant(Instant&&) = default;
  Instant& operator=(Instant&&) = default;

  // Rust types that are `Copy` get trivial, `default` C++ copy constructor and
  // assignment operator.
  Instant(const Instant&) = default;
  Instant& operator=(const Instant&) = default;
  Instant(::crubit::UnsafeRelocateTag, Instant&& value);

  //  Returns an instant corresponding to "now".
  //
  //  # Examples
  //
  //  ```
  //  use std::time::Instant;
  //
  //  let now = Instant::now();
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/time.rs;l=285
  [[nodiscard]] static ::rs::std::time::Instant now();

  //  Returns the amount of time elapsed from another instant to this one,
  //  or zero duration if that instant is later than this one.
  //
  //  # Panics
  //
  //  Previous Rust versions panicked when `earlier` was later than `self`.
  //  Currently this method saturates. Future versions may reintroduce the panic
  //  in some circumstances. See [Monotonicity].
  //
  //  [Monotonicity]: Instant#monotonicity
  //
  //  # Examples
  //
  //  ```no_run
  //  use std::time::{Duration, Instant};
  //  use std::thread::sleep;
  //
  //  let now = Instant::now();
  //  sleep(Duration::new(1, 0));
  //  let new_now = Instant::now();
  //  println!("{:?}", new_now.duration_since(now));
  //  println!("{:?}", now.duration_since(new_now)); // 0ns
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/time.rs;l=314
  [[nodiscard]] ::rs::core::time::Duration duration_since(
      ::rs::std::time::Instant earlier) const;

  //  Returns the amount of time elapsed from another instant to this one,
  //  or None if that instant is later than this one.
  //
  //  Due to [monotonicity bugs], even under correct logical ordering of the
  //  passed `Instant`s, this method can return `None`.
  //
  //  [monotonicity bugs]: Instant#monotonicity
  //
  //  # Examples
  //
  //  ```no_run
  //  use std::time::{Duration, Instant};
  //  use std::thread::sleep;
  //
  //  let now = Instant::now();
  //  sleep(Duration::new(1, 0));
  //  let new_now = Instant::now();
  //  println!("{:?}", new_now.checked_duration_since(now));
  //  println!("{:?}", now.checked_duration_since(new_now)); // None
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/time.rs;l=340
  [[nodiscard]] ::std::optional<::rs::core::time::Duration>
  checked_duration_since(::rs::std::time::Instant earlier) const;

  //  Returns the amount of time elapsed from another instant to this one,
  //  or zero duration if that instant is later than this one.
  //
  //  # Examples
  //
  //  ```no_run
  //  use std::time::{Duration, Instant};
  //  use std::thread::sleep;
  //
  //  let now = Instant::now();
  //  sleep(Duration::new(1, 0));
  //  let new_now = Instant::now();
  //  println!("{:?}", new_now.saturating_duration_since(now));
  //  println!("{:?}", now.saturating_duration_since(new_now)); // 0ns
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/time.rs;l=361
  [[nodiscard]] ::rs::core::time::Duration saturating_duration_since(
      ::rs::std::time::Instant earlier) const;

  //  Returns the amount of time elapsed since this instant.
  //
  //  # Panics
  //
  //  Previous Rust versions panicked when the current time was earlier than
  //  self. Currently this method returns a Duration of zero in that case.
  //  Future versions may reintroduce the panic. See [Monotonicity].
  //
  //  [Monotonicity]: Instant#monotonicity
  //
  //  # Examples
  //
  //  ```no_run
  //  use std::thread::sleep;
  //  use std::time::{Duration, Instant};
  //
  //  let instant = Instant::now();
  //  let three_secs = Duration::from_secs(3);
  //  sleep(three_secs);
  //  assert!(instant.elapsed() >= three_secs);
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/time.rs;l=388
  [[nodiscard]] ::rs::core::time::Duration elapsed() const;

  //  Returns `Some(t)` where `t` is the time `self + duration` if `t` can be
  //  represented as `Instant` (which means it's inside the bounds of the
  //  underlying data structure), `None` otherwise.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/time.rs;l=396
  ::std::optional<::rs::std::time::Instant> checked_add(
      ::rs::core::time::Duration duration) const;

  //  Returns `Some(t)` where `t` is the time `self - duration` if `t` can be
  //  represented as `Instant` (which means it's inside the bounds of the
  //  underlying data structure), `None` otherwise.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/time.rs;l=404
  ::std::optional<::rs::std::time::Instant> checked_sub(
      ::rs::core::time::Duration duration) const;

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/time.rs;l=153
  bool operator==(::rs::std::time::Instant const& other) const;

  //  # Panics
  //
  //  This function may panic if the resulting point in time cannot be
  //  represented by the underlying data structure. See [`Instant::checked_add`]
  //  for a version without panic.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/time.rs;l=427
  ::rs::std::time::Instant operator+(::rs::core::time::Duration other) const;

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/time.rs;l=434
  void operator+=(::rs::core::time::Duration other);

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/time.rs;l=444
  ::rs::std::time::Instant operator-(::rs::core::time::Duration other) const;

  //  Returns the amount of time elapsed from another instant to this one,
  //  or zero duration if that instant is later than this one.
  //
  //  # Panics
  //
  //  Previous Rust versions panicked when `other` was later than `self`.
  //  Currently this method saturates. Future versions may reintroduce the panic
  //  in some circumstances. See [Monotonicity].
  //
  //  [Monotonicity]: Instant#monotonicity
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/time.rs;l=470
  ::rs::core::time::Duration operator-(::rs::std::time::Instant other) const;

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/time.rs;l=451
  void operator-=(::rs::core::time::Duration other);

  ::std::strong_ordering operator<=>(const Instant& other) const;

 private:
  // Field type has been replaced with a blob of bytes: Not a public or a
  // supported reexported type (b/262052635).
  ::std::array<unsigned char, 16> __field0;

 private:
  static void __crubit_field_offset_assertions();
};

//  A measurement of the system clock, useful for talking to
//  external entities like the file system or other processes.
//
//  Distinct from the [`Instant`] type, this time measurement **is not
//  monotonic**. This means that you can save a file to the file system, then
//  save another file to the file system, **and the second file has a
//  `SystemTime` measurement earlier than the first**. In other words, an
//  operation that happens after another operation in real time may have an
//  earlier `SystemTime`!
//
//  Consequently, comparing two `SystemTime` instances to learn about the
//  duration between them returns a [`Result`] instead of an infallible
//  [`Duration`] to indicate that this sort of time drift may happen and needs
//  to be handled.
//
//  Although a `SystemTime` cannot be directly inspected, the [`UNIX_EPOCH`]
//  constant is provided in this module as an anchor in time to learn
//  information about a `SystemTime`. By calculating the duration from this
//  fixed point in time, a `SystemTime` can be converted to a human-readable
//  time, or perhaps some other string representation.
//
//  The size of a `SystemTime` struct may vary depending on the target operating
//  system.
//
//  A `SystemTime` does not count leap seconds.
//  `SystemTime::now()`'s behavior around a leap second
//  is the same as the operating system's wall clock.
//  The precise behavior near a leap second
//  (e.g. whether the clock appears to run slow or fast, or stop, or jump)
//  depends on platform and configuration,
//  so should not be relied on.
//
//  Example:
//
//  ```no_run
//  use std::time::{Duration, SystemTime};
//  use std::thread::sleep;
//
//  fn main() {
//     let now = SystemTime::now();
//
//     // we sleep for 2 seconds
//     sleep(Duration::new(2, 0));
//     match now.elapsed() {
//         Ok(elapsed) => {
//             // it prints '2'
//             println!("{}", elapsed.as_secs());
//         }
//         Err(e) => {
//             // the system clock went backwards!
//             println!("Great Scott! {e:?}");
//         }
//     }
//  }
//  ```
//
//  # Platform-specific behavior
//
//  The precision of `SystemTime` can depend on the underlying OS-specific time
//  format. For example, on Windows the time is represented in 100 nanosecond
//  intervals whereas Linux can represent nanosecond intervals.
//
//  The following system calls are [currently] being used by `now()` to find out
//  the current time:
//
//  |  Platform |               System call |
//  |-----------|----------------------------------------------------------------------|
//  | SGX       | [`insecure_time` usercall]. More information on [timekeeping
//  in SGX] | | UNIX      | [clock_gettime (Realtime Clock)] | | WASI      |
//  [clock_gettime (Realtime Clock)]                                     | |
//  Darwin    | [clock_gettime (Realtime Clock)] | | VXWorks   | [clock_gettime
//  (Realtime Clock)]                                     | | SOLID     |
//  `SOLID_RTC_ReadTime`                                                 | |
//  Windows   | [GetSystemTimePreciseAsFileTime] / [GetSystemTimeAsFileTime] |
//
//  [currently]: crate::io#platform-specific-behavior
//  [`insecure_time` usercall]:
//  https://edp.fortanix.com/docs/api/fortanix_sgx_abi/struct.Usercalls.html#method.insecure_time
//  [timekeeping in SGX]:
//  https://edp.fortanix.com/docs/concepts/rust-std/#codestdtimecode
//  [clock_gettime (Realtime Clock)]:
//  https://pubs.opengroup.org/onlinepubs/9799919799/functions/clock_getres.html
//  [GetSystemTimePreciseAsFileTime]:
//  https://docs.microsoft.com/en-us/windows/win32/api/sysinfoapi/nf-sysinfoapi-getsystemtimepreciseasfiletime
//  [GetSystemTimeAsFileTime]:
//  https://docs.microsoft.com/en-us/windows/win32/api/sysinfoapi/nf-sysinfoapi-getsystemtimeasfiletime
//
//  **Disclaimer:** These system calls might change over time.
//
//  > Note: mathematical operations like [`add`] may panic if the underlying
//  > structure cannot represent the new point in time.
//
//  [`add`]: SystemTime::add
//  [`UNIX_EPOCH`]: SystemTime::UNIX_EPOCH
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/time.rs;l=248
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: time :: SystemTime") alignas(8)
    [[clang::trivial_abi]] SystemTime final {
 public:
  // `std::time::SystemTime` doesn't implement the `Default` trait
  SystemTime() = delete;

  // No custom `Drop` impl and no custom "drop glue" required
  ~SystemTime() = default;
  SystemTime(SystemTime&&) = default;
  SystemTime& operator=(SystemTime&&) = default;

  // Rust types that are `Copy` get trivial, `default` C++ copy constructor and
  // assignment operator.
  SystemTime(const SystemTime&) = default;
  SystemTime& operator=(const SystemTime&) = default;
  SystemTime(::crubit::UnsafeRelocateTag, SystemTime&& value);

  // Error generating bindings for associated constant
  // `time::SystemTime::UNIX_EPOCH` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/time.rs;l=511:
  // const of type `time::SystemTime` cannot be generated as only scalar consts
  // are supported.

  //  Returns the system time corresponding to "now".
  //
  //  # Examples
  //
  //  ```
  //  use std::time::SystemTime;
  //
  //  let sys_time = SystemTime::now();
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/time.rs;l=601
  [[nodiscard]] static ::rs::std::time::SystemTime now();

  //  Returns the amount of time elapsed from an earlier point in time.
  //
  //  This function may fail because measurements taken earlier are not
  //  guaranteed to always be before later measurements (due to anomalies such
  //  as the system clock being adjusted either forwards or backwards).
  //  [`Instant`] can be used to measure elapsed time without this risk of
  //  failure.
  //
  //  If successful, <code>[Ok]\\([Duration])</code> is returned where the
  //  duration represents the amount of time elapsed from the specified
  //  measurement to this one.
  //
  //  Returns an [`Err`] if `earlier` is later than `self`, and the error
  //  contains how far from `self` the time is.
  //
  //  # Examples
  //
  //  ```no_run
  //  use std::time::SystemTime;
  //
  //  let sys_time = SystemTime::now();
  //  let new_sys_time = SystemTime::now();
  //  let difference = new_sys_time.duration_since(sys_time)
  //      .expect("Clock may have gone backwards");
  //  println!("{difference:?}");
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/time.rs;l=630
  rs_std::Result<::rs::core::time::Duration, ::rs::std::time::SystemTimeError>
  duration_since(::rs::std::time::SystemTime earlier) const;

  //  Returns the difference from this system time to the
  //  current clock time.
  //
  //  This function may fail as the underlying system clock is susceptible to
  //  drift and updates (e.g., the system clock could go backwards), so this
  //  function might not always succeed. If successful,
  //  <code>[Ok]\\([Duration])</code> is returned where the duration represents
  //  the amount of time elapsed from this time measurement to the current time.
  //
  //  To measure elapsed time reliably, use [`Instant`] instead.
  //
  //  Returns an [`Err`] if `self` is later than the current system time, and
  //  the error contains how far from the current system time `self` is.
  //
  //  # Examples
  //
  //  ```no_run
  //  use std::thread::sleep;
  //  use std::time::{Duration, SystemTime};
  //
  //  let sys_time = SystemTime::now();
  //  let one_sec = Duration::from_secs(1);
  //  sleep(one_sec);
  //  assert!(sys_time.elapsed().unwrap() >= one_sec);
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/time.rs;l=660
  rs_std::Result<::rs::core::time::Duration, ::rs::std::time::SystemTimeError>
  elapsed() const;

  //  Returns `Some(t)` where `t` is the time `self + duration` if `t` can be
  //  represented as `SystemTime` (which means it's inside the bounds of the
  //  underlying data structure), `None` otherwise.
  //
  //  In the case that the `duration` is smaller than the time precision of the
  //  operating system, `Some(self)` will be returned.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/time.rs;l=671
  ::std::optional<::rs::std::time::SystemTime> checked_add(
      ::rs::core::time::Duration duration) const;

  //  Returns `Some(t)` where `t` is the time `self - duration` if `t` can be
  //  represented as `SystemTime` (which means it's inside the bounds of the
  //  underlying data structure), `None` otherwise.
  //
  //  In the case that the `duration` is smaller than the time precision of the
  //  operating system, `Some(self)` will be returned.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/time.rs;l=682
  ::std::optional<::rs::std::time::SystemTime> checked_sub(
      ::rs::core::time::Duration duration) const;

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/time.rs;l=246
  bool operator==(::rs::std::time::SystemTime const& other) const;

  //  # Panics
  //
  //  This function may panic if the resulting point in time cannot be
  //  represented by the underlying data structure. See
  //  [`SystemTime::checked_add`] for a version without panic.
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/time.rs;l=746
  ::rs::std::time::SystemTime operator+(::rs::core::time::Duration dur) const;

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/time.rs;l=753
  void operator+=(::rs::core::time::Duration other);

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/time.rs;l=763
  ::rs::std::time::SystemTime operator-(::rs::core::time::Duration dur) const;

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/time.rs;l=770
  void operator-=(::rs::core::time::Duration other);

  ::std::strong_ordering operator<=>(const SystemTime& other) const;

 private:
  // Field type has been replaced with a blob of bytes: Not a public or a
  // supported reexported type (b/262052635).
  ::std::array<unsigned char, 16> __field0;

 private:
  static void __crubit_field_offset_assertions();
};

//  An error returned from the `duration_since` and `elapsed` methods on
//  `SystemTime`, used to learn how far in the opposite direction a system time
//  lies.
//
//  # Examples
//
//  ```no_run
//  use std::thread::sleep;
//  use std::time::{Duration, SystemTime};
//
//  let sys_time = SystemTime::now();
//  sleep(Duration::from_secs(1));
//  let new_sys_time = SystemTime::now();
//  match sys_time.duration_since(new_sys_time) {
//      Ok(_) => {}
//      Err(e) => println!("SystemTimeError difference: {:?}", e.duration()),
//  }
//  ```
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/time.rs;l=270
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: time :: SystemTimeError") alignas(8)
    [[clang::trivial_abi]] SystemTimeError final {
 public:
  // `std::time::SystemTimeError` doesn't implement the `Default` trait
  SystemTimeError() = delete;

  // No custom `Drop` impl and no custom "drop glue" required
  ~SystemTimeError() = default;
  SystemTimeError(SystemTimeError&&) = default;
  SystemTimeError& operator=(SystemTimeError&&) = default;

  // Clone::clone
  SystemTimeError(const SystemTimeError&);

  // Clone::clone_from
  ::rs::std::time::SystemTimeError& operator=(const SystemTimeError&);

  SystemTimeError(::crubit::UnsafeRelocateTag, SystemTimeError&& value);

  //  Returns the positive duration which represents how far forward the
  //  second system time was from the first.
  //
  //  A `SystemTimeError` is returned from the [`SystemTime::duration_since`]
  //  and [`SystemTime::elapsed`] methods whenever the second system time
  //  represents a point later in time than the `self` of the method call.
  //
  //  # Examples
  //
  //  ```no_run
  //  use std::thread::sleep;
  //  use std::time::{Duration, SystemTime};
  //
  //  let sys_time = SystemTime::now();
  //  sleep(Duration::from_secs(1));
  //  let new_sys_time = SystemTime::now();
  //  match sys_time.duration_since(new_sys_time) {
  //      Ok(_) => {}
  //      Err(e) => println!("SystemTimeError difference: {:?}", e.duration()),
  //  }
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/time.rs;l=836
  [[nodiscard]] ::rs::core::time::Duration duration() const;

  // AbslStringify and std::ostream support via std::fmt::Display
  template <typename Sink, typename Str = rs::alloc::string::String>
  friend void AbslStringify(Sink& sink, const SystemTimeError& self) {
    crubit::Slot<Str> s;
    __crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std4time15SystemTimeErrorNtNtCsaddbpR6HRqH_u5alloc6string8ToString9to_ustringB6_u(
        self, s.Get());
    AbslStringify(sink, ::std::move(s).AssumeInitAndTakeValue().as_str());
  }
  template <typename Str = rs::alloc::string::String>
  friend ::std::ostream& operator<<(::std::ostream& os,
                                    const SystemTimeError& self) {
    crubit::Slot<Str> s;
    __crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std4time15SystemTimeErrorNtNtCsaddbpR6HRqH_u5alloc6string8ToString9to_ustringB6_u(
        self, s.Get());
    return os << ::std::string_view(
               ::std::move(s).AssumeInitAndTakeValue().as_str());
  }

 private:
  union {
    // Generated from:
    // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/time.rs;l=270
    ::rs::core::time::Duration __field0;
  };

 private:
  static void __crubit_field_offset_assertions();
};

// Error generating bindings for constant `time::UNIX_EPOCH` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/time.rs;l=810:
// const of type `time::SystemTime` cannot be generated as only scalar consts
// are supported.

}  // namespace rs::std::time

// clang-format off
#ifndef _CRUBIT_BINDINGS_FOR__x0000003a_x0000003a_x00000020rs_ustd_x00000020_x0000003a_x0000003a_x00000020Tuple_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020alloc_x00000020_x0000003a_x0000003a_x00000020string_x00000020_x0000003a_x0000003a_x00000020String_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020alloc_x00000020_x0000003a_x0000003a_x00000020string_x00000020_x0000003a_x0000003a_x00000020String_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR__x0000003a_x0000003a_x00000020rs_ustd_x00000020_x0000003a_x0000003a_x00000020Tuple_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020alloc_x00000020_x0000003a_x0000003a_x00000020string_x00000020_x0000003a_x0000003a_x00000020String_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020alloc_x00000020_x0000003a_x0000003a_x00000020string_x00000020_x0000003a_x0000003a_x00000020String_x00000020_x0000003e
template <>
struct alignas(8) CRUBIT_INTERNAL_RUST_TYPE(
    "(:: alloc :: string :: String , :: alloc :: string :: String ,)")
    rs_std::Tuple<::rs::alloc::string::String, ::rs::alloc::string::String> {
 public:
  // Default::default
  Tuple();

  // Clone::clone
  Tuple(const Tuple&);

  // Clone::clone_from
  ::rs_std::Tuple<::rs::alloc::string::String, ::rs::alloc::string::String>&
  operator=(const Tuple&);

  Tuple(Tuple&&);
  ::rs_std::Tuple<::rs::alloc::string::String, ::rs::alloc::string::String>&
  operator=(Tuple&&);
  Tuple(::crubit::UnsafeRelocateTag, Tuple&& value);
  Tuple(std::tuple<::rs::alloc::string::String, ::rs::alloc::string::String>&&
            tuple) noexcept;
  ~Tuple();
  operator std::tuple<::rs::alloc::string::String,
                      ::rs::alloc::string::String>() && noexcept;

 private:
  unsigned char storage_[48];
};
#endif
#ifndef _CRUBIT_BINDINGS_FOR__x0000003a_x0000003a_x00000020rs_ustd_x00000020_x0000003a_x0000003a_x00000020Tuple_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020ffi_x00000020_x0000003a_x0000003a_x00000020OsString_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020ffi_x00000020_x0000003a_x0000003a_x00000020OsString_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR__x0000003a_x0000003a_x00000020rs_ustd_x00000020_x0000003a_x0000003a_x00000020Tuple_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020ffi_x00000020_x0000003a_x0000003a_x00000020OsString_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020ffi_x00000020_x0000003a_x0000003a_x00000020OsString_x00000020_x0000003e
template <>
struct alignas(8) CRUBIT_INTERNAL_RUST_TYPE(
    "(:: std :: ffi :: OsString , :: std :: ffi :: OsString ,)")
    rs_std::Tuple<::rs::std::ffi::OsString, ::rs::std::ffi::OsString> {
 public:
  // Default::default
  Tuple();

  // Clone::clone
  Tuple(const Tuple&);

  // Clone::clone_from
  ::rs_std::Tuple<::rs::std::ffi::OsString, ::rs::std::ffi::OsString>&
  operator=(const Tuple&);

  Tuple(Tuple&&);
  ::rs_std::Tuple<::rs::std::ffi::OsString, ::rs::std::ffi::OsString>&
  operator=(Tuple&&);
  Tuple(::crubit::UnsafeRelocateTag, Tuple&& value);
  Tuple(std::tuple<::rs::std::ffi::OsString, ::rs::std::ffi::OsString>&&
            tuple) noexcept;
  ~Tuple();
  operator std::tuple<::rs::std::ffi::OsString,
                      ::rs::std::ffi::OsString>() && noexcept;

 private:
  unsigned char storage_[48];
};
#endif
#ifndef _CRUBIT_BINDINGS_FOR__x0000003a_x0000003a_x00000020rs_ustd_x00000020_x0000003a_x0000003a_x00000020Tuple_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020PipeReader_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020PipeWriter_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR__x0000003a_x0000003a_x00000020rs_ustd_x00000020_x0000003a_x0000003a_x00000020Tuple_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020PipeReader_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020PipeWriter_x00000020_x0000003e
template <>
struct alignas(4) CRUBIT_INTERNAL_RUST_TYPE(
    "(:: std :: io :: PipeReader , :: std :: io :: PipeWriter ,)")
    rs_std::Tuple<::rs::std::io::PipeReader, ::rs::std::io::PipeWriter> {
 public:
  // `(io::pipe::PipeReader, io::pipe::PipeWriter)` doesn't implement the
  // `Default` trait
  Tuple() = delete;

  // `(io::pipe::PipeReader, io::pipe::PipeWriter)` doesn't implement the
  // `Clone` trait
  Tuple(const Tuple&) = delete;
  Tuple& operator=(const Tuple&) = delete;
  // C++ move operations are unavailable for this type. See
  // http://crubit.rs/rust/movable_types for an explanation of Rust types that
  // are C++ movable.
  Tuple(Tuple&&) = delete;
  ::rs_std::Tuple<::rs::std::io::PipeReader, ::rs::std::io::PipeWriter>&
  operator=(Tuple&&) = delete;
  Tuple(::crubit::UnsafeRelocateTag, Tuple&& value);
  Tuple(std::tuple<::rs::std::io::PipeReader, ::rs::std::io::PipeWriter>&&
            tuple) = delete;
  ~Tuple();
  operator std::tuple<::rs::std::io::PipeReader,
                      ::rs::std::io::PipeWriter>() && = delete;

 private:
  unsigned char storage_[8];
};
#endif
#ifndef _CRUBIT_BINDINGS_FOR__x0000003a_x0000003a_x00000020rs_ustd_x00000020_x0000003a_x0000003a_x00000020Tuple_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020net_x00000020_x0000003a_x0000003a_x00000020TcpStream_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020core_x00000020_x0000003a_x0000003a_x00000020net_x00000020_x0000003a_x0000003a_x00000020SocketAddr_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR__x0000003a_x0000003a_x00000020rs_ustd_x00000020_x0000003a_x0000003a_x00000020Tuple_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020net_x00000020_x0000003a_x0000003a_x00000020TcpStream_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020core_x00000020_x0000003a_x0000003a_x00000020net_x00000020_x0000003a_x0000003a_x00000020SocketAddr_x00000020_x0000003e
template <>
struct alignas(4) CRUBIT_INTERNAL_RUST_TYPE(
    "(:: std :: net :: TcpStream , :: core :: net :: SocketAddr ,)")
    rs_std::Tuple<::rs::std::net::TcpStream, ::rs::core::net::SocketAddr> {
 public:
  // `(net::tcp::TcpStream, core::net::SocketAddr)` doesn't implement the
  // `Default` trait
  Tuple() = delete;

  // `(net::tcp::TcpStream, core::net::SocketAddr)` doesn't implement the
  // `Clone` trait
  Tuple(const Tuple&) = delete;
  Tuple& operator=(const Tuple&) = delete;
  // C++ move operations are unavailable for this type. See
  // http://crubit.rs/rust/movable_types for an explanation of Rust types that
  // are C++ movable.
  Tuple(Tuple&&) = delete;
  ::rs_std::Tuple<::rs::std::net::TcpStream, ::rs::core::net::SocketAddr>&
  operator=(Tuple&&) = delete;
  Tuple(::crubit::UnsafeRelocateTag, Tuple&& value);
  Tuple(std::tuple<::rs::std::net::TcpStream, ::rs::core::net::SocketAddr>&&
            tuple) = delete;
  ~Tuple();
  operator std::tuple<::rs::std::net::TcpStream,
                      ::rs::core::net::SocketAddr>() && = delete;

 private:
  unsigned char storage_[36];
};
#endif

template <>
struct rs_std::impl<::rs::alloc::string::String,
                    ::rs::std::net::ToSocketAddrs> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated type `<alloc_crate::string::String
  // as net::socket_addr::ToSocketAddrs>::Iter` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/socket_addr.rs;l=258:
  // Generic types are not supported yet (b/259749095)

  // Error generating bindings for associated function
  // `<alloc_crate::string::String as
  // net::socket_addr::ToSocketAddrs>::to_socket_addrs` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/socket_addr.rs;l=259:
  // Error formatting function return type
  // `core::result::Result<alloc_crate::vec::IntoIter<core::net::SocketAddr>,
  // core::io::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::backtrace::Backtrace, ::rs::core::fmt::Debug> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<backtrace::Backtrace as
  // core::fmt::Debug>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/backtrace.rs;l=176:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::backtrace::Backtrace, ::rs::core::fmt::Display> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<backtrace::Backtrace as
  // core::fmt::Display>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/backtrace.rs;l=383:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::backtrace::BacktraceStatus,
                    ::rs::core::cmp::Eq> {
  static constexpr bool kIsImplemented = true;
};

template <>
struct rs_std::impl<::rs::std::backtrace::BacktraceStatus,
                    ::rs::core::fmt::Debug> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function
  // `<backtrace::BacktraceStatus as core::fmt::Debug>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/backtrace.rs;l=116:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::core::net::SocketAddr,
                    ::rs::std::net::ToSocketAddrs> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated type `<core::net::SocketAddr as
  // net::socket_addr::ToSocketAddrs>::Iter` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/socket_addr.rs;l=147:
  // Generic types are not supported yet (b/259749095)

  // Error generating bindings for associated function `<core::net::SocketAddr
  // as net::socket_addr::ToSocketAddrs>::to_socket_addrs` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/socket_addr.rs;l=148:
  // Error formatting function return type
  // `core::result::Result<core::option::IntoIter<core::net::SocketAddr>,
  // core::io::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::core::net::SocketAddrV4,
                    ::rs::std::net::ToSocketAddrs> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated type `<core::net::SocketAddrV4 as
  // net::socket_addr::ToSocketAddrs>::Iter` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/socket_addr.rs;l=155:
  // Generic types are not supported yet (b/259749095)

  // Error generating bindings for associated function `<core::net::SocketAddrV4
  // as net::socket_addr::ToSocketAddrs>::to_socket_addrs` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/socket_addr.rs;l=156:
  // Error formatting function return type
  // `core::result::Result<core::option::IntoIter<core::net::SocketAddr>,
  // core::io::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::core::net::SocketAddrV6,
                    ::rs::std::net::ToSocketAddrs> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated type `<core::net::SocketAddrV6 as
  // net::socket_addr::ToSocketAddrs>::Iter` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/socket_addr.rs;l=163:
  // Generic types are not supported yet (b/259749095)

  // Error generating bindings for associated function `<core::net::SocketAddrV6
  // as net::socket_addr::ToSocketAddrs>::to_socket_addrs` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/socket_addr.rs;l=164:
  // Error formatting function return type
  // `core::result::Result<core::option::IntoIter<core::net::SocketAddr>,
  // core::io::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::env::Args, ::rs::core::fmt::Debug> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<env::Args as
  // core::fmt::Debug>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/env.rs;l=920:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::env::Args,
                    ::rs::core::iter::DoubleEndedIterator> {
  static constexpr bool kIsImplemented = true;

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/env.rs;l=913
  static ::std::optional<::rs::alloc::string::String> next_back(
      ::rs::std::env::Args& self);
};

template <>
struct rs_std::impl<::rs::std::env::Args, ::rs::core::iter::ExactSizeIterator> {
  static constexpr bool kIsImplemented = true;

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/env.rs;l=901
  static ::std::uintptr_t len(::rs::std::env::Args const& self);
};

template <>
struct rs_std::impl<::rs::std::env::Args, ::rs::core::iter::Iterator> {
  static constexpr bool kIsImplemented = true;
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/env.rs;l=875
  using Item CRUBIT_INTERNAL_RUST_TYPE(
      "<env::Args as :: core :: iter :: Iterator>::Item") =
      ::rs::alloc::string::String;

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/env.rs;l=877
  static ::std::optional<::rs::alloc::string::String> next(
      ::rs::std::env::Args& self);

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/env.rs;l=882
  static ::std::tuple<::std::uintptr_t, ::std::optional<::std::uintptr_t>>
  size_hint(::rs::std::env::Args const& self);
};

template <>
struct rs_std::impl<::rs::std::env::ArgsOs, ::rs::core::fmt::Debug> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<env::ArgsOs as
  // core::fmt::Debug>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/env.rs;l=1014:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::env::ArgsOs,
                    ::rs::core::iter::DoubleEndedIterator> {
  static constexpr bool kIsImplemented = true;

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/env.rs;l=1002
  static ::std::optional<::rs::std::ffi::OsString> next_back(
      ::rs::std::env::ArgsOs& self);
};

template <>
struct rs_std::impl<::rs::std::env::ArgsOs,
                    ::rs::core::iter::ExactSizeIterator> {
  static constexpr bool kIsImplemented = true;

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/env.rs;l=989
  static ::std::uintptr_t len(::rs::std::env::ArgsOs const& self);
};

template <>
struct rs_std::impl<::rs::std::env::ArgsOs, ::rs::core::iter::Iterator> {
  static constexpr bool kIsImplemented = true;
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/env.rs;l=934
  using Item CRUBIT_INTERNAL_RUST_TYPE(
      "<env::ArgsOs as :: core :: iter :: Iterator>::Item") =
      ::rs::std::ffi::OsString;

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/env.rs;l=937
  static ::std::optional<::rs::std::ffi::OsString> next(
      ::rs::std::env::ArgsOs& self);

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/env.rs;l=949
  static ::std::tuple<::std::uintptr_t, ::std::optional<::std::uintptr_t>>
  size_hint(::rs::std::env::ArgsOs const& self);

  // Error generating bindings for associated function `<env::ArgsOs as
  // core::iter::Iterator>::count` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/env.rs;l=954:
  // Can't pass type `env::ArgsOs` by value without a move constructor. See
  // crubit.rs/rust/movable_types for what types are C++ movable.

  // Error generating bindings for associated function `<env::ArgsOs as
  // core::iter::Iterator>::last` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/env.rs;l=959:
  // Can't pass type `env::ArgsOs` by value without a move constructor. See
  // crubit.rs/rust/movable_types for what types are C++ movable.

  // Error generating bindings for associated function `<env::ArgsOs as
  // core::iter::Iterator>::try_fold` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/env.rs;l=969:
  // No valid non-generic replacement for generic type param `B`

  // Error generating bindings for associated function `<env::ArgsOs as
  // core::iter::Iterator>::fold` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/env.rs;l=978:
  // No valid non-generic replacement for generic type param `B`
};

template <>
struct rs_std::impl<::rs::std::env::SplitPaths, ::rs::core::fmt::Debug> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<env::SplitPaths<'_> as
  // core::fmt::Debug>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/env.rs;l=500:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::env::SplitPaths, ::rs::core::iter::Iterator> {
  static constexpr bool kIsImplemented = true;
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/env.rs;l=489
  using Item CRUBIT_INTERNAL_RUST_TYPE(
      "<env::SplitPaths<'a> as :: core :: iter :: Iterator>::Item") =
      ::rs::std::path::PathBuf;

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/env.rs;l=490
  static ::std::optional<::rs::std::path::PathBuf> next(
      ::rs::std::env::SplitPaths& self);

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/env.rs;l=493
  static ::std::tuple<::std::uintptr_t, ::std::optional<::std::uintptr_t>>
  size_hint(::rs::std::env::SplitPaths const& self);
};

template <>
struct rs_std::impl<::rs::std::env::VarError, ::rs::core::cmp::Eq> {
  static constexpr bool kIsImplemented = true;
};

template <>
struct rs_std::impl<::rs::std::env::VarError, ::rs::core::error::Error> {
  static constexpr bool kIsImplemented = true;
};

template <>
struct rs_std::impl<::rs::std::env::VarError, ::rs::core::fmt::Debug> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<env::VarError as
  // core::fmt::Debug>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/env.rs;l=272:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::env::VarError, ::rs::core::fmt::Display> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<env::VarError as
  // core::fmt::Display>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/env.rs;l=289:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::env::Vars, ::rs::core::fmt::Debug> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<env::Vars as
  // core::fmt::Debug>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/env.rs;l=177:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::env::Vars, ::rs::core::iter::Iterator> {
  static constexpr bool kIsImplemented = true;
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/env.rs;l=166
  using Item CRUBIT_INTERNAL_RUST_TYPE(
      "<env::Vars as :: core :: iter :: Iterator>::Item") =
      rs_std::Tuple<::rs::alloc::string::String, ::rs::alloc::string::String>;

  // Error generating bindings for associated function `<env::Vars as
  // core::iter::Iterator>::next` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/env.rs;l=167:
  // Error formatting function return type
  // `core::option::Option<(alloc_crate::string::String,
  // alloc_crate::string::String)>`: composably bridging tuples is not yet
  // supported.

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/env.rs;l=170
  static ::std::tuple<::std::uintptr_t, ::std::optional<::std::uintptr_t>>
  size_hint(::rs::std::env::Vars const& self);
};

template <>
struct rs_std::impl<::rs::std::env::VarsOs, ::rs::core::fmt::Debug> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<env::VarsOs as
  // core::fmt::Debug>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/env.rs;l=196:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::env::VarsOs, ::rs::core::iter::Iterator> {
  static constexpr bool kIsImplemented = true;
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/env.rs;l=185
  using Item CRUBIT_INTERNAL_RUST_TYPE(
      "<env::VarsOs as :: core :: iter :: Iterator>::Item") =
      rs_std::Tuple<::rs::std::ffi::OsString, ::rs::std::ffi::OsString>;

  // Error generating bindings for associated function `<env::VarsOs as
  // core::iter::Iterator>::next` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/env.rs;l=186:
  // Error formatting function return type
  // `core::option::Option<(ffi::os_str::OsString, ffi::os_str::OsString)>`:
  // composably bridging tuples is not yet supported.

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/env.rs;l=189
  static ::std::tuple<::std::uintptr_t, ::std::optional<::std::uintptr_t>>
  size_hint(::rs::std::env::VarsOs const& self);
};

template <>
struct rs_std::impl<::rs::std::ffi::os_str::Display, ::rs::core::fmt::Debug> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function
  // `<ffi::os_str::Display<'_> as core::fmt::Debug>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/ffi/os_str.rs;l=1701:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::ffi::os_str::Display, ::rs::core::fmt::Display> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function
  // `<ffi::os_str::Display<'_> as core::fmt::Display>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/ffi/os_str.rs;l=1708:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

// Error generating bindings for implementation `<ffi::os_str::OsString as
// core::borrow::Borrow<ffi::os_str::OsStr>>` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/ffi/os_str.rs;l=1731:
// Failed to format type for the definition of `ffi::os_str::OsStr`: Bindings
// for dynamically sized types are not supported.

template <>
struct rs_std::impl<::rs::std::ffi::OsString, ::rs::core::cmp::Eq> {
  static constexpr bool kIsImplemented = true;
};

template <>
struct rs_std::impl<::rs::std::ffi::OsString, ::rs::core::cmp::Ord> {
  static constexpr bool kIsImplemented = true;

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/ffi/os_str.rs;l=796
  static ::rs::core::cmp::Ordering cmp(::rs::std::ffi::OsString const& self,
                                       ::rs::std::ffi::OsString const& other);
};

// Error generating bindings for implementation `<ffi::os_str::OsString as
// core::convert::AsRef<ffi::os_str::OsStr>>` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/ffi/os_str.rs;l=1761:
// Failed to format type for the definition of `ffi::os_str::OsStr`: Bindings
// for dynamically sized types are not supported.

template <>
struct rs_std::impl<::rs::std::ffi::OsString, ::rs::core::fmt::Debug> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<ffi::os_str::OsString
  // as core::fmt::Debug>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/ffi/os_str.rs;l=713:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::ffi::OsString, ::rs::core::fmt::Write> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<ffi::os_str::OsString
  // as core::fmt::Write>::write_str` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/ffi/os_str.rs;l=811:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::ffi::OsString, ::rs::core::hash::Hash> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<ffi::os_str::OsString
  // as core::hash::Hash>::hash` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/ffi/os_str.rs;l=804:
  // No valid non-generic replacement for generic type param `H`
};

// Error generating bindings for implementation `<ffi::os_str::OsString as
// core::iter::Extend<&'a ffi::os_str::OsStr>>` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/ffi/os_str.rs;l=1826:
// Failed to format the referent of the reference type `&'a ffi::os_str::OsStr`:
// Failed to format type for the definition of `ffi::os_str::OsStr`: Bindings
// for dynamically sized types are not supported.

// Error generating bindings for implementation `<ffi::os_str::OsString as
// core::iter::Extend<alloc_crate::borrow::Cow<'a, ffi::os_str::OsStr>>>`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/ffi/os_str.rs;l=1836:
// Generic types are not supported yet (b/259749095)

template <>
struct rs_std::impl<::rs::std::ffi::OsString,
                    ::rs::core::iter::Extend<::rs::std::ffi::OsString>> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<ffi::os_str::OsString
  // as core::iter::Extend<ffi::os_str::OsString>>::extend` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/ffi/os_str.rs;l=1818:
  // No valid non-generic replacement for generic type param `T`
};

// Error generating bindings for implementation `<ffi::os_str::OsString as
// core::iter::FromIterator<&'a ffi::os_str::OsStr>>` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/ffi/os_str.rs;l=1865:
// Failed to format the referent of the reference type `&'a ffi::os_str::OsStr`:
// Failed to format type for the definition of `ffi::os_str::OsStr`: Bindings
// for dynamically sized types are not supported.

// Error generating bindings for implementation `<ffi::os_str::OsString as
// core::iter::FromIterator<alloc_crate::borrow::Cow<'a, ffi::os_str::OsStr>>>`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/ffi/os_str.rs;l=1877:
// Generic types are not supported yet (b/259749095)

template <>
struct rs_std::impl<::rs::std::ffi::OsString,
                    ::rs::core::iter::FromIterator<::rs::std::ffi::OsString>> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<ffi::os_str::OsString
  // as core::iter::FromIterator<ffi::os_str::OsString>>::from_iter` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/ffi/os_str.rs;l=1848:
  // No valid non-generic replacement for generic type param `I`
};

template <>
struct rs_std::impl<::rs::std::ffi::OsString, ::rs::core::str::FromStr> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated type `<ffi::os_str::OsString as
  // core::str::FromStr>::Err` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/ffi/os_str.rs;l=1807:
  // Failed to format type for the definition of `core::convert::Infallible`:
  // Zero-sized types (ZSTs) are not supported (b/258259459)

  // Error generating bindings for associated function `<ffi::os_str::OsString
  // as core::str::FromStr>::from_str` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/ffi/os_str.rs;l=1810:
  // Error formatting function return type
  // `core::result::Result<ffi::os_str::OsString, core::convert::Infallible>`:
  // Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::fs::DirBuilder, ::rs::core::fmt::Debug> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<fs::DirBuilder as
  // core::fmt::Debug>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=308:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::fs::DirEntry, ::rs::core::fmt::Debug> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<fs::DirEntry as
  // core::fmt::Debug>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=2711:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::fs::File, ::rs::std::io::Read> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<fs::File as
  // alloc_crate::io::Read>::read` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=1489:
  // Error formatting function return type `core::result::Result<usize,
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  // Error generating bindings for associated function `<fs::File as
  // alloc_crate::io::Read>::read_vectored` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=1492:
  // Error formatting function return type `core::result::Result<usize,
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  // Error generating bindings for associated function `<fs::File as
  // alloc_crate::io::Read>::read_to_end` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=1502:
  // Error formatting function return type `core::result::Result<usize,
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  // Error generating bindings for associated function `<fs::File as
  // alloc_crate::io::Read>::read_to_string` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=1505:
  // Error formatting function return type `core::result::Result<usize,
  // core::io::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::fs::File, ::rs::core::fmt::Debug> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<fs::File as
  // core::fmt::Debug>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=1301:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::fs::File, ::rs::std::io::Seek> {
  static constexpr bool kIsImplemented = true;

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=1528
  static rs_std::Result<::std::uint64_t, ::rs::std::io::Error> seek(
      ::rs::std::fs::File& self, ::rs::std::io::SeekFrom pos);

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=1534
  static rs_std::Result<::std::uint64_t, ::rs::std::io::Error> stream_position(
      ::rs::std::fs::File& self);
};

template <>
struct rs_std::impl<::rs::std::fs::File, ::rs::std::io::Write> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<fs::File as
  // core::io::Write>::write` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=1511:
  // Error formatting function return type `core::result::Result<usize,
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  // Error generating bindings for associated function `<fs::File as
  // core::io::Write>::write_vectored` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=1514:
  // Error formatting function return type `core::result::Result<usize,
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  // Error generating bindings for associated function `<fs::File as
  // core::io::Write>::flush` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=1522:
  // Error formatting function return type `core::result::Result<(),
  // core::io::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::fs::File, ::rs::std::io::IsTerminal> {
  static constexpr bool kIsImplemented = true;

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/stdio.rs;l=1258
  static bool is_terminal(::rs::std::fs::File const& self);
};

template <>
struct rs_std::impl<::rs::std::fs::FileTimes, ::rs::core::fmt::Debug> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<fs::FileTimes as
  // core::fmt::Debug>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=278:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::fs::FileType, ::rs::core::cmp::Eq> {
  static constexpr bool kIsImplemented = true;
};

template <>
struct rs_std::impl<::rs::std::fs::FileType, ::rs::core::fmt::Debug> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<fs::FileType as
  // core::fmt::Debug>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=2533:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::fs::FileType, ::rs::core::hash::Hash> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<fs::FileType as
  // core::hash::Hash>::hash` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=299:
  // No valid non-generic replacement for generic type param `__H`
};

template <>
struct rs_std::impl<::rs::std::fs::Metadata, ::rs::core::fmt::Debug> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<fs::Metadata as
  // core::fmt::Debug>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=2244:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::fs::OpenOptions, ::rs::core::fmt::Debug> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<fs::OpenOptions as
  // core::fmt::Debug>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=272:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::fs::Permissions, ::rs::core::cmp::Eq> {
  static constexpr bool kIsImplemented = true;
};

template <>
struct rs_std::impl<::rs::std::fs::Permissions, ::rs::core::fmt::Debug> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<fs::Permissions as
  // core::fmt::Debug>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=291:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::fs::ReadDir, ::rs::core::fmt::Debug> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<fs::ReadDir as
  // core::fmt::Debug>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=216:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::fs::ReadDir, ::rs::core::iter::Iterator> {
  static constexpr bool kIsImplemented = true;
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=2564
  using Item CRUBIT_INTERNAL_RUST_TYPE(
      "<fs::ReadDir as :: core :: iter :: Iterator>::Item") =
      rs_std::Result<::rs::std::fs::DirEntry, ::rs::std::io::Error>;

  // Error generating bindings for associated function `<fs::ReadDir as
  // core::iter::Iterator>::next` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=2566:
  // Error formatting function return type
  // `core::option::Option<core::result::Result<fs::DirEntry,
  // core::io::Error>>`: Failed to construct CrubitAbiType for
  // core::result::Result<fs::DirEntry, core::io::Error> because it is not
  // movable.
};

template <>
struct rs_std::impl<::rs::std::fs::TryLockError, ::rs::core::error::Error> {
  static constexpr bool kIsImplemented = true;
};

template <>
struct rs_std::impl<::rs::std::fs::TryLockError, ::rs::core::fmt::Debug> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<fs::TryLockError as
  // core::fmt::Debug>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=511:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::fs::TryLockError, ::rs::core::fmt::Display> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<fs::TryLockError as
  // core::fmt::Display>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs;l=521:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::hash::DefaultHasher, ::rs::core::fmt::Debug> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function
  // `<hash::random::DefaultHasher as core::fmt::Debug>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/hash/random.rs;l=92:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::hash::DefaultHasher, ::rs::core::hash::Hasher> {
  static constexpr bool kIsImplemented = true;

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/hash/random.rs;l=130
  static void write(::rs::std::hash::DefaultHasher& self,
                    rs_std::SliceRef<const ::std::uint8_t> msg);

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/hash/random.rs;l=140
  static ::std::uint64_t finish(::rs::std::hash::DefaultHasher const& self);
};

template <>
struct rs_std::impl<::rs::std::hash::RandomState, ::rs::core::fmt::Debug> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function
  // `<hash::random::RandomState as core::fmt::Debug>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/hash/random.rs;l=156:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::hash::RandomState,
                    ::rs::core::hash::BuildHasher> {
  static constexpr bool kIsImplemented = true;
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/hash/random.rs;l=81
  using Hasher CRUBIT_INTERNAL_RUST_TYPE(
      "<hash::random::RandomState as :: core :: hash :: BuildHasher>::Hasher") =
      ::rs::std::hash::DefaultHasher;

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/hash/random.rs;l=83
  static ::rs::std::hash::DefaultHasher build_hasher(
      ::rs::std::hash::RandomState const& self);
};

template <>
struct rs_std::impl<::rs::std::io::PipeReader, ::rs::std::io::Read> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<io::pipe::PipeReader as
  // alloc_crate::io::Read>::read` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/pipe.rs;l=237:
  // Error formatting function return type `core::result::Result<usize,
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  // Error generating bindings for associated function `<io::pipe::PipeReader as
  // alloc_crate::io::Read>::read_vectored` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/pipe.rs;l=240:
  // Error formatting function return type `core::result::Result<usize,
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  // Error generating bindings for associated function `<io::pipe::PipeReader as
  // alloc_crate::io::Read>::read_to_end` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/pipe.rs;l=247:
  // Error formatting function return type `core::result::Result<usize,
  // core::io::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::io::PipeReader, ::rs::core::fmt::Debug> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<io::pipe::PipeReader as
  // core::fmt::Debug>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/pipe.rs;l=89:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::io::PipeWriter, ::rs::core::fmt::Debug> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<io::pipe::PipeWriter as
  // core::fmt::Debug>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/pipe.rs;l=94:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::io::PipeWriter, ::rs::std::io::Write> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<io::pipe::PipeWriter as
  // core::io::Write>::write` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/pipe.rs;l=275:
  // Error formatting function return type `core::result::Result<usize,
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  // Error generating bindings for associated function `<io::pipe::PipeWriter as
  // core::io::Write>::flush` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/pipe.rs;l=279:
  // Error formatting function return type `core::result::Result<(),
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  // Error generating bindings for associated function `<io::pipe::PipeWriter as
  // core::io::Write>::write_vectored` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/pipe.rs;l=282:
  // Error formatting function return type `core::result::Result<usize,
  // core::io::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::io::Stderr, ::rs::core::fmt::Debug> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<io::stdio::Stderr as
  // core::fmt::Debug>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/stdio.rs;l=1016:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::io::Stderr, ::rs::std::io::Write> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<io::stdio::Stderr as
  // core::io::Write>::write` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/stdio.rs;l=1023:
  // Error formatting function return type `core::result::Result<usize,
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  // Error generating bindings for associated function `<io::stdio::Stderr as
  // core::io::Write>::write_vectored` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/stdio.rs;l=1026:
  // Error formatting function return type `core::result::Result<usize,
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  // Error generating bindings for associated function `<io::stdio::Stderr as
  // core::io::Write>::flush` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/stdio.rs;l=1033:
  // Error formatting function return type `core::result::Result<(),
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  // Error generating bindings for associated function `<io::stdio::Stderr as
  // core::io::Write>::write_all` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/stdio.rs;l=1036:
  // Error formatting function return type `core::result::Result<(),
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  // Error generating bindings for associated function `<io::stdio::Stderr as
  // core::io::Write>::write_fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/stdio.rs;l=1042:
  // Error formatting function return type `core::result::Result<(),
  // core::io::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::io::Stderr, ::rs::std::io::IsTerminal> {
  static constexpr bool kIsImplemented = true;

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/stdio.rs;l=1258
  static bool is_terminal(::rs::std::io::Stderr const& self);
};

template <>
struct rs_std::impl<::rs::std::io::StderrLock, ::rs::core::fmt::Debug> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function
  // `<io::stdio::StderrLock<'_> as core::fmt::Debug>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/stdio.rs;l=1104:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::io::StderrLock, ::rs::std::io::Write> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function
  // `<io::stdio::StderrLock<'_> as core::io::Write>::write` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/stdio.rs;l=1081:
  // Error formatting function return type `core::result::Result<usize,
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  // Error generating bindings for associated function
  // `<io::stdio::StderrLock<'_> as core::io::Write>::write_vectored` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/stdio.rs;l=1084:
  // Error formatting function return type `core::result::Result<usize,
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  // Error generating bindings for associated function
  // `<io::stdio::StderrLock<'_> as core::io::Write>::flush` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/stdio.rs;l=1091:
  // Error formatting function return type `core::result::Result<(),
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  // Error generating bindings for associated function
  // `<io::stdio::StderrLock<'_> as core::io::Write>::write_all` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/stdio.rs;l=1094:
  // Error formatting function return type `core::result::Result<(),
  // core::io::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::io::StderrLock, ::rs::std::io::IsTerminal> {
  static constexpr bool kIsImplemented = true;

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/stdio.rs;l=1258
  static bool is_terminal(::rs::std::io::StderrLock const& self);
};

template <>
struct rs_std::impl<::rs::std::io::Stdin, ::rs::std::io::Read> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<io::stdio::Stdin as
  // alloc_crate::io::Read>::read` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/stdio.rs;l=447:
  // Error formatting function return type `core::result::Result<usize,
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  // Error generating bindings for associated function `<io::stdio::Stdin as
  // alloc_crate::io::Read>::read_vectored` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/stdio.rs;l=453:
  // Error formatting function return type `core::result::Result<usize,
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  // Error generating bindings for associated function `<io::stdio::Stdin as
  // alloc_crate::io::Read>::read_to_end` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/stdio.rs;l=460:
  // Error formatting function return type `core::result::Result<usize,
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  // Error generating bindings for associated function `<io::stdio::Stdin as
  // alloc_crate::io::Read>::read_to_string` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/stdio.rs;l=463:
  // Error formatting function return type `core::result::Result<usize,
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  // Error generating bindings for associated function `<io::stdio::Stdin as
  // alloc_crate::io::Read>::read_exact` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/stdio.rs;l=466:
  // Error formatting function return type `core::result::Result<(),
  // core::io::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::io::Stdin, ::rs::core::fmt::Debug> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<io::stdio::Stdin as
  // core::fmt::Debug>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/stdio.rs;l=440:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::io::Stdin, ::rs::std::io::IsTerminal> {
  static constexpr bool kIsImplemented = true;

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/stdio.rs;l=1258
  static bool is_terminal(::rs::std::io::Stdin const& self);
};

template <>
struct rs_std::impl<::rs::std::io::StdinLock, ::rs::std::io::BufRead> {
  static constexpr bool kIsImplemented = true;

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/stdio.rs;l=558
  static rs_std::Result<rs_std::SliceRef<const ::std::uint8_t>,
                        ::rs::std::io::Error>
  fill_buf(::rs::std::io::StdinLock& self);

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/stdio.rs;l=562
  static void consume(::rs::std::io::StdinLock& self, ::std::uintptr_t n);

  // Error generating bindings for associated function
  // `<io::stdio::StdinLock<'_> as alloc_crate::io::BufRead>::read_until`
  // defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/stdio.rs;l=566:
  // Error formatting function return type `core::result::Result<usize,
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  // Error generating bindings for associated function
  // `<io::stdio::StdinLock<'_> as alloc_crate::io::BufRead>::read_line` defined
  // at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/stdio.rs;l=570:
  // Error formatting function return type `core::result::Result<usize,
  // core::io::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::io::StdinLock, ::rs::std::io::Read> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function
  // `<io::stdio::StdinLock<'_> as alloc_crate::io::Read>::read` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/stdio.rs;l=513:
  // Error formatting function return type `core::result::Result<usize,
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  // Error generating bindings for associated function
  // `<io::stdio::StdinLock<'_> as alloc_crate::io::Read>::read_vectored`
  // defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/stdio.rs;l=521:
  // Error formatting function return type `core::result::Result<usize,
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  // Error generating bindings for associated function
  // `<io::stdio::StdinLock<'_> as alloc_crate::io::Read>::read_to_end` defined
  // at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/stdio.rs;l=530:
  // Error formatting function return type `core::result::Result<usize,
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  // Error generating bindings for associated function
  // `<io::stdio::StdinLock<'_> as alloc_crate::io::Read>::read_to_string`
  // defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/stdio.rs;l=534:
  // Error formatting function return type `core::result::Result<usize,
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  // Error generating bindings for associated function
  // `<io::stdio::StdinLock<'_> as alloc_crate::io::Read>::read_exact` defined
  // at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/stdio.rs;l=538:
  // Error formatting function return type `core::result::Result<(),
  // core::io::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::io::StdinLock, ::rs::core::fmt::Debug> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function
  // `<io::stdio::StdinLock<'_> as core::fmt::Debug>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/stdio.rs;l=577:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::io::StdinLock, ::rs::std::io::IsTerminal> {
  static constexpr bool kIsImplemented = true;

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/stdio.rs;l=1258
  static bool is_terminal(::rs::std::io::StdinLock const& self);
};

template <>
struct rs_std::impl<::rs::std::io::Stdout, ::rs::core::fmt::Debug> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<io::stdio::Stdout as
  // core::fmt::Debug>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/stdio.rs;l=784:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::io::Stdout, ::rs::std::io::Write> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<io::stdio::Stdout as
  // core::io::Write>::write` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/stdio.rs;l=791:
  // Error formatting function return type `core::result::Result<usize,
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  // Error generating bindings for associated function `<io::stdio::Stdout as
  // core::io::Write>::write_vectored` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/stdio.rs;l=794:
  // Error formatting function return type `core::result::Result<usize,
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  // Error generating bindings for associated function `<io::stdio::Stdout as
  // core::io::Write>::flush` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/stdio.rs;l=801:
  // Error formatting function return type `core::result::Result<(),
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  // Error generating bindings for associated function `<io::stdio::Stdout as
  // core::io::Write>::write_all` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/stdio.rs;l=804:
  // Error formatting function return type `core::result::Result<(),
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  // Error generating bindings for associated function `<io::stdio::Stdout as
  // core::io::Write>::write_fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/stdio.rs;l=810:
  // Error formatting function return type `core::result::Result<(),
  // core::io::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::io::Stdout, ::rs::std::io::IsTerminal> {
  static constexpr bool kIsImplemented = true;

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/stdio.rs;l=1258
  static bool is_terminal(::rs::std::io::Stdout const& self);
};

template <>
struct rs_std::impl<::rs::std::io::StdoutLock, ::rs::core::fmt::Debug> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function
  // `<io::stdio::StdoutLock<'_> as core::fmt::Debug>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/stdio.rs;l=872:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::io::StdoutLock, ::rs::std::io::Write> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function
  // `<io::stdio::StdoutLock<'_> as core::io::Write>::write` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/stdio.rs;l=849:
  // Error formatting function return type `core::result::Result<usize,
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  // Error generating bindings for associated function
  // `<io::stdio::StdoutLock<'_> as core::io::Write>::write_vectored` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/stdio.rs;l=852:
  // Error formatting function return type `core::result::Result<usize,
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  // Error generating bindings for associated function
  // `<io::stdio::StdoutLock<'_> as core::io::Write>::flush` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/stdio.rs;l=859:
  // Error formatting function return type `core::result::Result<(),
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  // Error generating bindings for associated function
  // `<io::stdio::StdoutLock<'_> as core::io::Write>::write_all` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/stdio.rs;l=862:
  // Error formatting function return type `core::result::Result<(),
  // core::io::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::io::StdoutLock, ::rs::std::io::IsTerminal> {
  static constexpr bool kIsImplemented = true;

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/stdio.rs;l=1258
  static bool is_terminal(::rs::std::io::StdoutLock const& self);
};

template <>
struct rs_std::impl<::rs::std::net::Shutdown, ::rs::core::cmp::Eq> {
  static constexpr bool kIsImplemented = true;
};

template <>
struct rs_std::impl<::rs::std::net::Shutdown, ::rs::core::fmt::Debug> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<net::Shutdown as
  // core::fmt::Debug>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/mod.rs;l=50:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::net::Incoming, ::rs::core::iter::FusedIterator> {
  static constexpr bool kIsImplemented = true;
};

template <>
struct rs_std::impl<::rs::std::net::Incoming, ::rs::core::fmt::Debug> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<net::tcp::Incoming<'a>
  // as core::fmt::Debug>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/tcp.rs;l=109:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::net::Incoming, ::rs::core::iter::Iterator> {
  static constexpr bool kIsImplemented = true;
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/tcp.rs;l=1124
  using Item CRUBIT_INTERNAL_RUST_TYPE(
      "<net::tcp::Incoming<'a> as :: core :: iter :: Iterator>::Item") =
      rs_std::Result<::rs::std::net::TcpStream, ::rs::std::io::Error>;

  // Error generating bindings for associated function `<net::tcp::Incoming<'a>
  // as core::iter::Iterator>::next` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/tcp.rs;l=1125:
  // Error formatting function return type
  // `core::option::Option<core::result::Result<net::tcp::TcpStream,
  // core::io::Error>>`: Failed to construct CrubitAbiType for
  // core::result::Result<net::tcp::TcpStream, core::io::Error> because it is
  // not movable.
};

template <>
struct rs_std::impl<::rs::std::net::TcpListener, ::rs::core::fmt::Debug> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<net::tcp::TcpListener
  // as core::fmt::Debug>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/tcp.rs;l=1165:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::net::TcpStream, ::rs::std::io::Read> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<net::tcp::TcpStream as
  // alloc_crate::io::Read>::read` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/tcp.rs;l=682:
  // Error formatting function return type `core::result::Result<usize,
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  // Error generating bindings for associated function `<net::tcp::TcpStream as
  // alloc_crate::io::Read>::read_vectored` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/tcp.rs;l=690:
  // Error formatting function return type `core::result::Result<usize,
  // core::io::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::net::TcpStream, ::rs::core::fmt::Debug> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<net::tcp::TcpStream as
  // core::fmt::Debug>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/tcp.rs;l=780:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::net::TcpStream, ::rs::std::io::Write> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<net::tcp::TcpStream as
  // core::io::Write>::write` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/tcp.rs;l=701:
  // Error formatting function return type `core::result::Result<usize,
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  // Error generating bindings for associated function `<net::tcp::TcpStream as
  // core::io::Write>::write_vectored` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/tcp.rs;l=705:
  // Error formatting function return type `core::result::Result<usize,
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  // Error generating bindings for associated function `<net::tcp::TcpStream as
  // core::io::Write>::flush` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/tcp.rs;l=715:
  // Error formatting function return type `core::result::Result<(),
  // core::io::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::net::UdpSocket, ::rs::core::fmt::Debug> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<net::udp::UdpSocket as
  // core::fmt::Debug>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/udp.rs;l=854:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::panic::PanicHookInfo, ::rs::core::fmt::Display> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function
  // `<panic::PanicHookInfo<'_> as core::fmt::Display>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/panic.rs;l=200:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::panic::PanicHookInfo, ::rs::core::fmt::Debug> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function
  // `<panic::PanicHookInfo<'a> as core::fmt::Debug>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/panic.rs;l=41:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::path::Ancestors,
                    ::rs::core::iter::FusedIterator> {
  static constexpr bool kIsImplemented = true;
};

template <>
struct rs_std::impl<::rs::std::path::Ancestors, ::rs::core::fmt::Debug> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<path::Ancestors<'a> as
  // core::fmt::Debug>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=1121:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::path::Ancestors, ::rs::core::iter::Iterator> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated type `<path::Ancestors<'a> as
  // core::iter::Iterator>::Item` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=1130:
  // Failed to format the referent of the reference type `&'a path::Path`:
  // Failed to format type for the definition of `path::Path`: Bindings for
  // dynamically sized types are not supported.

  // Error generating bindings for associated function `<path::Ancestors<'a> as
  // core::iter::Iterator>::next` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=1133:
  // Error formatting function return type `core::option::Option<&'a
  // path::Path>`: Failed to format the referent of the reference type `&'static
  // path::Path`: Failed to format type for the definition of `path::Path`:
  // Bindings for dynamically sized types are not supported.
};

// Error generating bindings for implementation `<path::Component<'_> as
// core::convert::AsRef<ffi::os_str::OsStr>>` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=585:
// Failed to format type for the definition of `ffi::os_str::OsStr`: Bindings
// for dynamically sized types are not supported.

// Error generating bindings for implementation `<path::Component<'_> as
// core::convert::AsRef<path::Path>>` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=593:
// Failed to format type for the definition of `path::Path`: Bindings for
// dynamically sized types are not supported.

template <>
struct rs_std::impl<::rs::std::path::Component, ::rs::core::cmp::Eq> {
  static constexpr bool kIsImplemented = true;
};

template <>
struct rs_std::impl<::rs::std::path::Component, ::rs::core::cmp::Ord> {
  static constexpr bool kIsImplemented = true;

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=525
  static ::rs::core::cmp::Ordering cmp(::rs::std::path::Component const& self,
                                       ::rs::std::path::Component const& other);
};

template <>
struct rs_std::impl<::rs::std::path::Component, ::rs::core::fmt::Debug> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<path::Component<'a> as
  // core::fmt::Debug>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=525:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::path::Component, ::rs::core::hash::Hash> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<path::Component<'a> as
  // core::hash::Hash>::hash` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=525:
  // No valid non-generic replacement for generic type param `__H`
};

template <>
struct rs_std::impl<::rs::std::path::Components, ::rs::core::cmp::Eq> {
  static constexpr bool kIsImplemented = true;
};

template <>
struct rs_std::impl<::rs::std::path::Components, ::rs::core::cmp::Ord> {
  static constexpr bool kIsImplemented = true;

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=1066
  static ::rs::core::cmp::Ordering cmp(
      ::rs::std::path::Components const& self,
      ::rs::std::path::Components const& other);
};

// Error generating bindings for implementation `<path::Components<'_> as
// core::convert::AsRef<ffi::os_str::OsStr>>` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=838:
// Failed to format type for the definition of `ffi::os_str::OsStr`: Bindings
// for dynamically sized types are not supported.

// Error generating bindings for implementation `<path::Components<'_> as
// core::convert::AsRef<path::Path>>` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=830:
// Failed to format type for the definition of `path::Path`: Bindings for
// dynamically sized types are not supported.

template <>
struct rs_std::impl<::rs::std::path::Components, ::rs::core::fmt::Debug> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<path::Components<'_> as
  // core::fmt::Debug>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=654:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::path::Components,
                    ::rs::core::iter::FusedIterator> {
  static constexpr bool kIsImplemented = true;
};

template <>
struct rs_std::impl<::rs::std::path::Components,
                    ::rs::core::iter::DoubleEndedIterator> {
  static constexpr bool kIsImplemented = true;

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=976
  static ::std::optional<::rs::std::path::Component> next_back(
      ::rs::std::path::Components& self);
};

template <>
struct rs_std::impl<::rs::std::path::Components, ::rs::core::iter::Iterator> {
  static constexpr bool kIsImplemented = true;
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=921
  using Item CRUBIT_INTERNAL_RUST_TYPE(
      "<path::Components<'a> as :: core :: iter :: Iterator>::Item") =
      ::rs::std::path::Component;

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=923
  static ::std::optional<::rs::std::path::Component> next(
      ::rs::std::path::Components& self);
};

template <>
struct rs_std::impl<::rs::std::path::Display, ::rs::core::fmt::Debug> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<path::Display<'_> as
  // core::fmt::Debug>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=3741:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::path::Display, ::rs::core::fmt::Display> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<path::Display<'_> as
  // core::fmt::Display>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=3748:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

// Error generating bindings for implementation `<path::Iter<'_> as
// core::convert::AsRef<ffi::os_str::OsStr>>` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=891:
// Failed to format type for the definition of `ffi::os_str::OsStr`: Bindings
// for dynamically sized types are not supported.

// Error generating bindings for implementation `<path::Iter<'_> as
// core::convert::AsRef<path::Path>>` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=883:
// Failed to format type for the definition of `path::Path`: Bindings for
// dynamically sized types are not supported.

template <>
struct rs_std::impl<::rs::std::path::Iter, ::rs::core::fmt::Debug> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<path::Iter<'_> as
  // core::fmt::Debug>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=847:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::path::Iter, ::rs::core::iter::FusedIterator> {
  static constexpr bool kIsImplemented = true;
};

template <>
struct rs_std::impl<::rs::std::path::Iter,
                    ::rs::core::iter::DoubleEndedIterator> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<path::Iter<'a> as
  // core::iter::DoubleEndedIterator>::next_back` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=911:
  // Error formatting function return type `core::option::Option<&'a
  // ffi::os_str::OsStr>`: Failed to format the referent of the reference type
  // `&'static ffi::os_str::OsStr`: Failed to format type for the definition of
  // `ffi::os_str::OsStr`: Bindings for dynamically sized types are not
  // supported.
};

template <>
struct rs_std::impl<::rs::std::path::Iter, ::rs::core::iter::Iterator> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated type `<path::Iter<'a> as
  // core::iter::Iterator>::Item` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=900:
  // Failed to format the referent of the reference type `&'a
  // ffi::os_str::OsStr`: Failed to format type for the definition of
  // `ffi::os_str::OsStr`: Bindings for dynamically sized types are not
  // supported.

  // Error generating bindings for associated function `<path::Iter<'a> as
  // core::iter::Iterator>::next` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=903:
  // Error formatting function return type `core::option::Option<&'a
  // ffi::os_str::OsStr>`: Failed to format the referent of the reference type
  // `&'static ffi::os_str::OsStr`: Failed to format type for the definition of
  // `ffi::os_str::OsStr`: Bindings for dynamically sized types are not
  // supported.
};

// Error generating bindings for implementation `<path::PathBuf as
// core::borrow::Borrow<path::Path>>` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=2109:
// Failed to format type for the definition of `path::Path`: Bindings for
// dynamically sized types are not supported.

template <>
struct rs_std::impl<::rs::std::path::PathBuf, ::rs::core::cmp::Eq> {
  static constexpr bool kIsImplemented = true;
};

template <>
struct rs_std::impl<::rs::std::path::PathBuf, ::rs::core::cmp::Ord> {
  static constexpr bool kIsImplemented = true;

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=2305
  static ::rs::core::cmp::Ordering cmp(::rs::std::path::PathBuf const& self,
                                       ::rs::std::path::PathBuf const& other);
};

// Error generating bindings for implementation `<path::PathBuf as
// core::convert::AsRef<ffi::os_str::OsStr>>` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=2311:
// Failed to format type for the definition of `ffi::os_str::OsStr`: Bindings
// for dynamically sized types are not supported.

// Error generating bindings for implementation `<path::PathBuf as
// core::convert::AsRef<path::Path>>` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=3920:
// Failed to format type for the definition of `path::Path`: Bindings for
// dynamically sized types are not supported.

template <>
struct rs_std::impl<::rs::std::path::PathBuf, ::rs::core::fmt::Debug> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<path::PathBuf as
  // core::fmt::Debug>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=2086:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::path::PathBuf, ::rs::core::hash::Hash> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<path::PathBuf as
  // core::hash::Hash>::hash` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=2286:
  // No valid non-generic replacement for generic type param `H`
};

// Error generating bindings for implementation `<path::PathBuf as
// core::iter::Extend<P>>` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=2059:
// Implementation of traits must specify all types to receive bindings.

// Error generating bindings for implementation `<path::PathBuf as
// core::iter::FromIterator<P>>` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=2037:
// Implementation of traits must specify all types to receive bindings.

template <>
struct rs_std::impl<::rs::std::path::PathBuf, ::rs::core::str::FromStr> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated type `<path::PathBuf as
  // core::str::FromStr>::Err` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=2028:
  // Failed to format type for the definition of `core::convert::Infallible`:
  // Zero-sized types (ZSTs) are not supported (b/258259459)

  // Error generating bindings for associated function `<path::PathBuf as
  // core::str::FromStr>::from_str` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=2031:
  // Error formatting function return type `core::result::Result<path::PathBuf,
  // core::convert::Infallible>`: Generic types are not supported yet
  // (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::path::Prefix, ::rs::core::cmp::Eq> {
  static constexpr bool kIsImplemented = true;
};

template <>
struct rs_std::impl<::rs::std::path::Prefix, ::rs::core::cmp::Ord> {
  static constexpr bool kIsImplemented = true;

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=149
  static ::rs::core::cmp::Ordering cmp(::rs::std::path::Prefix const& self,
                                       ::rs::std::path::Prefix const& other);
};

template <>
struct rs_std::impl<::rs::std::path::Prefix, ::rs::core::fmt::Debug> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<path::Prefix<'a> as
  // core::fmt::Debug>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=149:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::path::Prefix, ::rs::core::hash::Hash> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<path::Prefix<'a> as
  // core::hash::Hash>::hash` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=149:
  // No valid non-generic replacement for generic type param `__H`
};

template <>
struct rs_std::impl<::rs::std::path::PrefixComponent, ::rs::core::cmp::Ord> {
  static constexpr bool kIsImplemented = true;

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=491
  static ::rs::core::cmp::Ordering cmp(
      ::rs::std::path::PrefixComponent const& self,
      ::rs::std::path::PrefixComponent const& other);
};

template <>
struct rs_std::impl<::rs::std::path::PrefixComponent, ::rs::core::hash::Hash> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function
  // `<path::PrefixComponent<'_> as core::hash::Hash>::hash` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=498:
  // No valid non-generic replacement for generic type param `H`
};

template <>
struct rs_std::impl<::rs::std::path::PrefixComponent, ::rs::core::cmp::Eq> {
  static constexpr bool kIsImplemented = true;
};

template <>
struct rs_std::impl<::rs::std::path::PrefixComponent, ::rs::core::fmt::Debug> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function
  // `<path::PrefixComponent<'a> as core::fmt::Debug>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=442:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::process::Child, ::rs::core::fmt::Debug> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<process::Child as
  // core::fmt::Debug>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=286:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::process::ChildStderr, ::rs::std::io::Read> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<process::ChildStderr as
  // alloc_crate::io::Read>::read` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=483:
  // Error formatting function return type `core::result::Result<usize,
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  // Error generating bindings for associated function `<process::ChildStderr as
  // alloc_crate::io::Read>::read_vectored` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=491:
  // Error formatting function return type `core::result::Result<usize,
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  // Error generating bindings for associated function `<process::ChildStderr as
  // alloc_crate::io::Read>::read_to_end` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=500:
  // Error formatting function return type `core::result::Result<usize,
  // core::io::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::process::ChildStderr, ::rs::core::fmt::Debug> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<process::ChildStderr as
  // core::fmt::Debug>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=526:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::process::ChildStdin, ::rs::core::fmt::Debug> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<process::ChildStdin as
  // core::fmt::Debug>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=386:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::process::ChildStdin, ::rs::std::io::Write> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<process::ChildStdin as
  // core::io::Write>::write` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=327:
  // Error formatting function return type `core::result::Result<usize,
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  // Error generating bindings for associated function `<process::ChildStdin as
  // core::io::Write>::write_vectored` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=331:
  // Error formatting function return type `core::result::Result<usize,
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  // Error generating bindings for associated function `<process::ChildStdin as
  // core::io::Write>::flush` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=340:
  // Error formatting function return type `core::result::Result<(),
  // core::io::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::process::ChildStdout, ::rs::std::io::Read> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<process::ChildStdout as
  // alloc_crate::io::Read>::read` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=413:
  // Error formatting function return type `core::result::Result<usize,
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  // Error generating bindings for associated function `<process::ChildStdout as
  // alloc_crate::io::Read>::read_vectored` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=421:
  // Error formatting function return type `core::result::Result<usize,
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  // Error generating bindings for associated function `<process::ChildStdout as
  // alloc_crate::io::Read>::read_to_end` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=430:
  // Error formatting function return type `core::result::Result<usize,
  // core::io::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::process::ChildStdout, ::rs::core::fmt::Debug> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<process::ChildStdout as
  // core::fmt::Debug>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=456:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::process::Command, ::rs::core::fmt::Debug> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<process::Command as
  // core::fmt::Debug>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=1354:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::process::CommandArgs, ::rs::core::fmt::Debug> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function
  // `<process::CommandArgs<'a> as core::fmt::Debug>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=1379:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::process::CommandArgs,
                    ::rs::core::iter::ExactSizeIterator> {
  static constexpr bool kIsImplemented = true;

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=1397
  static ::std::uintptr_t len(::rs::std::process::CommandArgs const& self);
};

template <>
struct rs_std::impl<::rs::std::process::CommandArgs,
                    ::rs::core::iter::Iterator> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated type `<process::CommandArgs<'a> as
  // core::iter::Iterator>::Item` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=1386:
  // Failed to format the referent of the reference type `&'a
  // ffi::os_str::OsStr`: Failed to format type for the definition of
  // `ffi::os_str::OsStr`: Bindings for dynamically sized types are not
  // supported.

  // Error generating bindings for associated function
  // `<process::CommandArgs<'a> as core::iter::Iterator>::next` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=1387:
  // Error formatting function return type `core::option::Option<&'a
  // ffi::os_str::OsStr>`: Failed to format the referent of the reference type
  // `&'static ffi::os_str::OsStr`: Failed to format type for the definition of
  // `ffi::os_str::OsStr`: Bindings for dynamically sized types are not
  // supported.

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=1390
  static ::std::tuple<::std::uintptr_t, ::std::optional<::std::uintptr_t>>
  size_hint(::rs::std::process::CommandArgs const& self);
};

template <>
struct rs_std::impl<::rs::std::process::CommandEnvs, ::rs::core::fmt::Debug> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function
  // `<process::CommandEnvs<'a> as core::fmt::Debug>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=1448:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::process::CommandEnvs,
                    ::rs::core::iter::ExactSizeIterator> {
  static constexpr bool kIsImplemented = true;

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=1437
  static ::std::uintptr_t len(::rs::std::process::CommandEnvs const& self);
};

template <>
struct rs_std::impl<::rs::std::process::CommandEnvs,
                    ::rs::core::iter::Iterator> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated type `<process::CommandEnvs<'a> as
  // core::iter::Iterator>::Item` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=1424:
  // Tuple type `(&'a ffi::os_str::OsStr, core::option::Option<&'a
  // ffi::os_str::OsStr>)` is not supported in this context

  // Error generating bindings for associated function
  // `<process::CommandEnvs<'a> as core::iter::Iterator>::next` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=1426:
  // Error formatting function return type `core::option::Option<(&'a
  // ffi::os_str::OsStr, core::option::Option<&'a ffi::os_str::OsStr>)>`:
  // composably bridging tuples is not yet supported.

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=1430
  static ::std::tuple<::std::uintptr_t, ::std::optional<::std::uintptr_t>>
  size_hint(::rs::std::process::CommandEnvs const& self);
};

template <>
struct rs_std::impl<::rs::std::process::ExitCode, ::rs::core::fmt::Debug> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<process::ExitCode as
  // core::fmt::Debug>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=2208:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::process::ExitCode,
                    ::rs::std::process::Termination> {
  static constexpr bool kIsImplemented = true;

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=2713
  static ::rs::std::process::ExitCode report(::rs::std::process::ExitCode self);
};

template <>
struct rs_std::impl<::rs::std::process::ExitStatus, ::rs::core::cmp::Eq> {
  static constexpr bool kIsImplemented = true;
};

template <>
struct rs_std::impl<::rs::std::process::ExitStatus, ::rs::core::fmt::Debug> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<process::ExitStatus as
  // core::fmt::Debug>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=1929:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::process::ExitStatus, ::rs::core::fmt::Display> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<process::ExitStatus as
  // core::fmt::Display>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=2039:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::process::Output, ::rs::core::cmp::Eq> {
  static constexpr bool kIsImplemented = true;
};

template <>
struct rs_std::impl<::rs::std::process::Output, ::rs::core::fmt::Debug> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<process::Output as
  // core::fmt::Debug>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=1517:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::process::Stdio, ::rs::core::fmt::Debug> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<process::Stdio as
  // core::fmt::Debug>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=1705:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::sync::WaitTimeoutResult, ::rs::core::cmp::Eq> {
  static constexpr bool kIsImplemented = true;
};

template <>
struct rs_std::impl<::rs::std::sync::WaitTimeoutResult,
                    ::rs::core::fmt::Debug> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<sync::WaitTimeoutResult
  // as core::fmt::Debug>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/mod.rs;l=260:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::sync::Barrier, ::rs::core::fmt::Debug> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<sync::barrier::Barrier
  // as core::fmt::Debug>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/barrier.rs;l=60:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::sync::BarrierWaitResult,
                    ::rs::core::fmt::Debug> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function
  // `<sync::barrier::BarrierWaitResult as core::fmt::Debug>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/barrier.rs;l=141:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::sync::mpsc::RecvTimeoutError,
                    ::rs::core::cmp::Eq> {
  static constexpr bool kIsImplemented = true;
};

template <>
struct rs_std::impl<::rs::std::sync::mpsc::RecvTimeoutError,
                    ::rs::core::error::Error> {
  static constexpr bool kIsImplemented = true;
};

template <>
struct rs_std::impl<::rs::std::sync::mpsc::RecvTimeoutError,
                    ::rs::core::fmt::Debug> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function
  // `<sync::mpsc::RecvTimeoutError as core::fmt::Debug>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/mpsc.rs;l=451:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::sync::mpsc::RecvTimeoutError,
                    ::rs::core::fmt::Display> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function
  // `<sync::mpsc::RecvTimeoutError as core::fmt::Display>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/mpsc.rs;l=1255:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::sync::mpsc::TryRecvError, ::rs::core::cmp::Eq> {
  static constexpr bool kIsImplemented = true;
};

template <>
struct rs_std::impl<::rs::std::sync::mpsc::TryRecvError,
                    ::rs::core::error::Error> {
  static constexpr bool kIsImplemented = true;
};

template <>
struct rs_std::impl<::rs::std::sync::mpsc::TryRecvError,
                    ::rs::core::fmt::Debug> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function
  // `<sync::mpsc::TryRecvError as core::fmt::Debug>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/mpsc.rs;l=432:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::sync::mpsc::TryRecvError,
                    ::rs::core::fmt::Display> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function
  // `<sync::mpsc::TryRecvError as core::fmt::Display>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/mpsc.rs;l=1228:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::sync::Once, ::rs::core::fmt::Debug> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<sync::once::Once as
  // core::fmt::Debug>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/once.rs;l=345:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::sync::OnceState, ::rs::core::fmt::Debug> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<sync::once::OnceState
  // as core::fmt::Debug>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/once.rs;l=401:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::sync::Condvar, ::rs::core::fmt::Debug> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function
  // `<sync::poison::condvar::Condvar as core::fmt::Debug>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/poison/condvar.rs;l=499:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::thread::Builder, ::rs::core::fmt::Debug> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function
  // `<thread::builder::Builder as core::fmt::Debug>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/thread/builder.rs;l=48:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::thread::ThreadId, ::rs::core::cmp::Eq> {
  static constexpr bool kIsImplemented = true;
};

template <>
struct rs_std::impl<::rs::std::thread::ThreadId, ::rs::core::fmt::Debug> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<thread::id::ThreadId as
  // core::fmt::Debug>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/thread/id.rs;l=30:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::thread::ThreadId, ::rs::core::hash::Hash> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<thread::id::ThreadId as
  // core::hash::Hash>::hash` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/thread/id.rs;l=30:
  // No valid non-generic replacement for generic type param `__H`
};

template <>
struct rs_std::impl<::rs::std::thread::Scope, ::rs::core::fmt::Debug> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function
  // `<thread::scoped::Scope<'_, '_> as core::fmt::Debug>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/thread/scoped.rs;l=344:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::thread::Thread, ::rs::core::fmt::Debug> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<thread::thread::Thread
  // as core::fmt::Debug>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/thread/thread.rs;l=320:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::time::Instant, ::rs::core::cmp::Eq> {
  static constexpr bool kIsImplemented = true;
};

template <>
struct rs_std::impl<::rs::std::time::Instant, ::rs::core::cmp::Ord> {
  static constexpr bool kIsImplemented = true;

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/time.rs;l=153
  static ::rs::core::cmp::Ordering cmp(::rs::std::time::Instant const& self,
                                       ::rs::std::time::Instant const& other);
};

template <>
struct rs_std::impl<::rs::std::time::Instant, ::rs::core::fmt::Debug> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<time::Instant as
  // core::fmt::Debug>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/time.rs;l=477:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::time::Instant, ::rs::core::hash::Hash> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<time::Instant as
  // core::hash::Hash>::hash` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/time.rs;l=153:
  // No valid non-generic replacement for generic type param `__H`
};

template <>
struct rs_std::impl<::rs::std::time::SystemTime, ::rs::core::cmp::Eq> {
  static constexpr bool kIsImplemented = true;
};

template <>
struct rs_std::impl<::rs::std::time::SystemTime, ::rs::core::cmp::Ord> {
  static constexpr bool kIsImplemented = true;

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/time.rs;l=246
  static ::rs::core::cmp::Ordering cmp(
      ::rs::std::time::SystemTime const& self,
      ::rs::std::time::SystemTime const& other);
};

template <>
struct rs_std::impl<::rs::std::time::SystemTime, ::rs::core::fmt::Debug> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<time::SystemTime as
  // core::fmt::Debug>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/time.rs;l=777:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::time::SystemTime, ::rs::core::hash::Hash> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<time::SystemTime as
  // core::hash::Hash>::hash` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/time.rs;l=246:
  // No valid non-generic replacement for generic type param `__H`
};

template <>
struct rs_std::impl<::rs::std::time::SystemTimeError,
                    ::rs::core::error::Error> {
  static constexpr bool kIsImplemented = true;
};

template <>
struct rs_std::impl<::rs::std::time::SystemTimeError, ::rs::core::fmt::Debug> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<time::SystemTimeError
  // as core::fmt::Debug>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/time.rs;l=268:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};

template <>
struct rs_std::impl<::rs::std::time::SystemTimeError,
                    ::rs::core::fmt::Display> {
  static constexpr bool kIsImplemented = true;

  // Error generating bindings for associated function `<time::SystemTimeError
  // as core::fmt::Display>::fmt` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/time.rs;l=846:
  // Error formatting function return type `core::result::Result<(),
  // core::fmt::Error>`: Generic types are not supported yet (b/259749095)
};
#ifndef _CRUBIT_BINDINGS_FOR_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Vec_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020uint8_ut_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Vec_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020uint8_ut_x00000020_x0000003e
template <>
struct alignas(8) CRUBIT_INTERNAL_RUST_TYPE(
    ":: alloc :: vec :: Vec < u8 >") rs_std::Vec<::std::uint8_t> {
 public:
  // Default::default
  Vec();

  // Clone::clone
  Vec(const Vec&);

  // Clone::clone_from
  rs_std::Vec<::std::uint8_t>& operator=(const Vec&);

  Vec(Vec&&);
  rs_std::Vec<::std::uint8_t>& operator=(Vec&&);
  Vec(::crubit::UnsafeRelocateTag, Vec&& value);

  ~Vec() noexcept;
  ::std::uint8_t* data() noexcept;
  ::std::uint8_t const* data() const noexcept;
  std::size_t size() const noexcept;
  ::std::uint8_t& operator[](std::size_t index) noexcept;
  ::std::uint8_t const& operator[](std::size_t index) const noexcept;
  ::std::uint8_t* begin() noexcept;
  ::std::uint8_t const* begin() const noexcept;
  ::std::uint8_t* end() noexcept;
  ::std::uint8_t const* end() const noexcept;

 private:
  unsigned char storage_[24];
};
#endif

namespace rs::std::io {

//  Error returned for the buffered data from `BufWriter::into_parts`, when the
//  underlying writer has previously panicked.  Contains the (possibly partly
//  written) buffered data.
//
//  # Example
//
//  ```
//  # // This test requires unwinding to work.
//  # // Disable it when unwinding isn't available.
//  # #[cfg(panic = "unwind")]
//  # fn main() {
//  use std::io::{self, BufWriter, Write};
//  use std::panic::{catch_unwind, AssertUnwindSafe};
//
//  struct PanickingWriter;
//  impl Write for PanickingWriter {
//    fn write(&mut self, buf: &[u8]) -> io::Result<usize> { panic!() }
//    fn flush(&mut self) -> io::Result<()> { panic!() }
//  }
//
//  let mut stream = BufWriter::new(PanickingWriter);
//  write!(stream, "some data").unwrap();
//  let result = catch_unwind(AssertUnwindSafe(|| {
//      stream.flush().unwrap()
//  }));
//  assert!(result.is_err());
//  let (recovered_writer, buffered_data) = stream.into_parts();
//  assert!(matches!(recovered_writer, PanickingWriter));
//  assert_eq!(buffered_data.unwrap_err().into_inner(), b"some data");
//  # }
//  # #[cfg(not(panic = "unwind"))]
//  # fn main() {}
//  ```
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/io/buffered/bufwriter.rs;l=519
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: io :: WriterPanicked") alignas(8)
    [[clang::trivial_abi]] WriterPanicked final {
 public:
  // `std::io::WriterPanicked` doesn't implement the `Default` trait
  WriterPanicked() = delete;

  // Drop::drop
  ~WriterPanicked();

  // C++ move operations are unavailable for this type. See
  // http://crubit.rs/rust/movable_types for an explanation of Rust types that
  // are C++ movable.
  WriterPanicked(WriterPanicked&&) = delete;
  ::rs::std::io::WriterPanicked& operator=(WriterPanicked&&) = delete;
  // `std::io::WriterPanicked` doesn't implement the `Clone` trait
  WriterPanicked(const WriterPanicked&) = delete;
  WriterPanicked& operator=(const WriterPanicked&) = delete;
  WriterPanicked(::crubit::UnsafeRelocateTag, WriterPanicked&& value);

  // Error generating bindings for associated function
  // `alloc_crate::io::WriterPanicked::into_inner` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/io/buffered/bufwriter.rs;l=528:
  // Can't pass type `alloc_crate::io::WriterPanicked` by value without a move
  // constructor. See crubit.rs/rust/movable_types for what types are C++
  // movable.

  // AbslStringify and std::ostream support via std::fmt::Display
  template <typename Sink, typename Str = rs::alloc::string::String>
  friend void AbslStringify(Sink& sink, const WriterPanicked& self) {
    crubit::Slot<Str> s;
    __crubit_thunk_818b180788380d74__uRNvYNtNtNtNtCsaddbpR6HRqH_u5alloc2io8buffered9bufwriter14WriterPanickedNtNtBa_u6string8ToString9to_ustringCsb7ytMsthdgm_u3std(
        self, s.Get());
    AbslStringify(sink, ::std::move(s).AssumeInitAndTakeValue().as_str());
  }
  template <typename Str = rs::alloc::string::String>
  friend ::std::ostream& operator<<(::std::ostream& os,
                                    const WriterPanicked& self) {
    crubit::Slot<Str> s;
    __crubit_thunk_818b180788380d74__uRNvYNtNtNtNtCsaddbpR6HRqH_u5alloc2io8buffered9bufwriter14WriterPanickedNtNtBa_u6string8ToString9to_ustringCsb7ytMsthdgm_u3std(
        self, s.Get());
    return os << ::std::string_view(
               ::std::move(s).AssumeInitAndTakeValue().as_str());
  }

 private:
  union {
    // Generated from:
    // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/io/buffered/bufwriter.rs;l=520
    rs_std::Vec<::std::uint8_t> buf;
  };

 private:
  static void __crubit_field_offset_assertions();
};

}  // namespace rs::std::io

namespace rs::std::process {

//  The output of a finished process.
//
//  This is returned in a Result by either the [`output`] method of a
//  [`Command`], or the [`wait_with_output`] method of a [`Child`]
//  process.
//
//  [`output`]: Command::output
//  [`wait_with_output`]: Child::wait_with_output
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=1466
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: process :: Output") alignas(8)
    [[clang::trivial_abi]] Output final {
 public:
  // `std::process::Output` doesn't implement the `Default` trait
  Output() = delete;

  // Drop::drop
  ~Output();

  // Clone::clone
  Output(const Output&);

  // Clone::clone_from
  ::rs::std::process::Output& operator=(const Output&);

  Output(::crubit::UnsafeRelocateTag, Output&& value);

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=1464
  bool operator==(::rs::std::process::Output const& other) const;

  union {
    //  The data that the process wrote to stdout.
    //
    // Generated from:
    // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=1472
    rs_std::Vec<::std::uint8_t> stdout;
  };
  union {
    //  The data that the process wrote to stderr.
    //
    // Generated from:
    // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=1475
    rs_std::Vec<::std::uint8_t> stderr;
  };
  union {
    //  The status (exit code) of the process.
    //
    // Generated from:
    // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=1469
    ::rs::std::process::ExitStatus status;
  };

 private:
  unsigned char __padding0[4];

 private:
  static void __crubit_field_offset_assertions();
};

}  // namespace rs::std::process

#ifndef _CRUBIT_BINDINGS_FOR_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Option_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020alloc_x00000020_x0000003a_x0000003a_x00000020string_x00000020_x0000003a_x0000003a_x00000020String_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Option_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020alloc_x00000020_x0000003a_x0000003a_x00000020string_x00000020_x0000003a_x0000003a_x00000020String_x00000020_x0000003e
template <>
struct alignas(8) CRUBIT_INTERNAL_RUST_TYPE(
    "std :: option :: Option < :: alloc :: string :: String >")
    rs_std::Option<::rs::alloc::string::String>
    : public rs_std::OptionBase<rs_std::Option<::rs::alloc::string::String>,
                                ::rs::alloc::string::String> {
 public:
  // Clone::clone
  Option(const Option&);

  // Clone::clone_from
  rs_std::Option<::rs::alloc::string::String>& operator=(const Option&);

  Option(Option&&);
  rs_std::Option<::rs::alloc::string::String>& operator=(Option&&);
  Option(::crubit::UnsafeRelocateTag, Option&& value);
  using base_type =
      rs_std::OptionBase<rs_std::Option<::rs::alloc::string::String>,
                         ::rs::alloc::string::String>;
  constexpr Option() = default;
  constexpr Option(::std::nullopt_t) noexcept;
  constexpr Option& operator=(::std::nullopt_t) noexcept;
  template <typename U>
    requires(rs_std::OptionForwardConstructible<Option,
                                                ::rs::alloc::string::String, U>)
  Option(U&& value) noexcept;
  template <typename U>
    requires(rs_std::OptionForwardConstructible<Option,
                                                ::rs::alloc::string::String, U>)
  Option& operator=(U&& value) noexcept;
  template <typename Opt>
    requires(rs_std::OptionFromStdOptional<::rs::alloc::string::String, Opt>)
  Option(Opt&& value) noexcept;
  template <typename Opt>
    requires(rs_std::OptionFromStdOptional<::rs::alloc::string::String, Opt>)
  Option& operator=(Opt&& value) noexcept;
  template <typename... Args>
  explicit Option(::std::in_place_t ip, Args&&... args) noexcept;
  constexpr ~Option() noexcept;

 private:
  friend base_type;
  using tag_type = ::std::uint64_t;
  static constexpr tag_type kNoneVal = UINT64_C(18446744073709551615);
  ::rs::alloc::string::String* some_ptr() noexcept {
    return reinterpret_cast<::rs::alloc::string::String*>(storage_);
  }
  ::rs::alloc::string::String const* some_const_ptr() const noexcept {
    return reinterpret_cast<::rs::alloc::string::String const*>(storage_);
  }
  void set_some_tag() noexcept {}
  constexpr void set_none_tag() noexcept { set_tag(kNoneVal); }
  constexpr bool is_none() const noexcept { return tag() == kNoneVal; }
  constexpr ::std::uint64_t tag() const& noexcept;
  constexpr void set_tag(::std::uint64_t tag) noexcept;

 private:
  unsigned char storage_[24];
};
#endif

namespace rs::std::thread {

//  Thread factory, which can be used in order to configure the properties of
//  a new thread.
//
//  Methods can be chained on it in order to configure it.
//
//  The two configurations available are:
//
//  - [`name`]: specifies an [associated name for the thread][naming-threads]
//  - [`stack_size`]: specifies the [desired stack size for the
//  thread][stack-size]
//
//  The [`spawn`] method will take ownership of the builder and create an
//  [`io::Result`] to the thread handle with the given configuration.
//
//  The [`thread::spawn`] free function uses a `Builder` with default
//  configuration and [`unwrap`]s its return value.
//
//  You may want to use [`spawn`] instead of [`thread::spawn`], when you want
//  to recover from a failure to launch a thread, indeed the free function will
//  panic where the `Builder` method will return a [`io::Result`].
//
//  # Examples
//
//  ```
//  use std::thread;
//
//  let builder = thread::Builder::new();
//
//  let handler = builder.spawn(|| {
//      // thread code
//  }).unwrap();
//
//  handler.join().unwrap();
//  ```
//
//  [`stack_size`]: Builder::stack_size
//  [`name`]: Builder::name
//  [`spawn`]: Builder::spawn
//  [`thread::spawn`]: super::spawn
//  [`unwrap`]: crate::result::Result::unwrap
//  [naming-threads]: ./index.html#naming-threads
//  [stack-size]: ./index.html#stack-size
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/thread/builder.rs;l=49
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: thread :: Builder") alignas(8)
    [[clang::trivial_abi]] [[nodiscard("must eventually spawn the thread")]]
    Builder final {
 public:
  // `std::thread::Builder` doesn't implement the `Default` trait
  Builder() = delete;

  // Drop::drop
  ~Builder();

  // C++ move operations are unavailable for this type. See
  // http://crubit.rs/rust/movable_types for an explanation of Rust types that
  // are C++ movable.
  Builder(Builder&&) = delete;
  ::rs::std::thread::Builder& operator=(Builder&&) = delete;
  // `std::thread::Builder` doesn't implement the `Clone` trait
  Builder(const Builder&) = delete;
  Builder& operator=(const Builder&) = delete;
  Builder(::crubit::UnsafeRelocateTag, Builder&& value);

  //  Generates the base configuration for spawning a thread, from which
  //  configuration methods can be chained.
  //
  //  # Examples
  //
  //  ```
  //  use std::thread;
  //
  //  let builder = thread::Builder::new()
  //                                .name("foo".into())
  //                                .stack_size(32 * 1024);
  //
  //  let handler = builder.spawn(|| {
  //      // thread code
  //  }).unwrap();
  //
  //  handler.join().unwrap();
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/thread/builder.rs;l=78
  static ::rs::std::thread::Builder new_();

  // Error generating bindings for associated function
  // `thread::builder::Builder::name` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/thread/builder.rs;l=107:
  // Can't pass type `thread::builder::Builder` by value without a move
  // constructor. See crubit.rs/rust/movable_types for what types are C++
  // movable.

  // Error generating bindings for associated function
  // `thread::builder::Builder::stack_size` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/thread/builder.rs;l=130:
  // Can't pass type `thread::builder::Builder` by value without a move
  // constructor. See crubit.rs/rust/movable_types for what types are C++
  // movable.

  // Error generating bindings for associated function
  // `thread::builder::Builder::spawn` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/thread/builder.rs;l=185:
  // No valid non-generic replacement for generic type param `F`

  // Error generating bindings for associated function
  // `thread::builder::Builder::spawn_unchecked` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/thread/builder.rs;l=254:
  // No valid non-generic replacement for generic type param `F`

  // Error generating bindings for associated function `thread::scoped::<impl
  // thread::builder::Builder>::spawn_scoped` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/thread/scoped.rs;l=256:
  // No valid non-generic replacement for generic type param `F`

 private:
  // Field type has been replaced with a blob of bytes: b/491106325 - isize and
  // usize types are not yet supported as generic type arguments.
  ::std::array<unsigned char, 16> stack_size;
  union {
    //  A name for the thread-to-be, for identification in panic messages
    //
    // Generated from:
    // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/thread/builder.rs;l=51
    rs_std::Option<::rs::alloc::string::String> name;
  };
  union {
    //  Skip running and inheriting the thread spawn hooks
    //
    // Generated from:
    // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/thread/builder.rs;l=55
    bool no_hooks;
  };
  unsigned char __padding2[7];

 private:
  static void __crubit_field_offset_assertions();
};

}  // namespace rs::std::thread

#ifndef _CRUBIT_BINDINGS_FOR_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Option_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020core_x00000020_x0000003a_x0000003a_x00000020time_x00000020_x0000003a_x0000003a_x00000020Duration_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Option_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020core_x00000020_x0000003a_x0000003a_x00000020time_x00000020_x0000003a_x0000003a_x00000020Duration_x00000020_x0000003e
template <>
struct alignas(8) CRUBIT_INTERNAL_RUST_TYPE(
    "std :: option :: Option < :: core :: time :: Duration >")
    rs_std::Option<::rs::core::time::Duration>
    : public rs_std::OptionBase<rs_std::Option<::rs::core::time::Duration>,
                                ::rs::core::time::Duration> {
 public:
  // Rust types that are `Copy` get trivial, `default` C++ copy constructor and
  // assignment operator.
  Option(const Option&) = default;
  Option& operator=(const Option&) = default;
  Option(Option&&) = default;
  Option& operator=(Option&&) = default;

  Option(::crubit::UnsafeRelocateTag, Option&& value);
  using base_type =
      rs_std::OptionBase<rs_std::Option<::rs::core::time::Duration>,
                         ::rs::core::time::Duration>;
  constexpr Option() = default;
  constexpr Option(::std::nullopt_t) noexcept;
  constexpr Option& operator=(::std::nullopt_t) noexcept;
  template <typename U>
    requires(rs_std::OptionForwardConstructible<Option,
                                                ::rs::core::time::Duration, U>)
  Option(U&& value) noexcept;
  template <typename U>
    requires(rs_std::OptionForwardConstructible<Option,
                                                ::rs::core::time::Duration, U>)
  Option& operator=(U&& value) noexcept;
  template <typename Opt>
    requires(rs_std::OptionFromStdOptional<::rs::core::time::Duration, Opt>)
  Option(Opt&& value) noexcept;
  template <typename Opt>
    requires(rs_std::OptionFromStdOptional<::rs::core::time::Duration, Opt>)
  Option& operator=(Opt&& value) noexcept;
  template <typename... Args>
  explicit Option(::std::in_place_t ip, Args&&... args) noexcept;
  ~Option() noexcept = default;

 private:
  friend base_type;
  using tag_type = ::std::uint32_t;
  static constexpr tag_type kNoneVal = UINT32_C(4294967295);
  ::rs::core::time::Duration* some_ptr() noexcept {
    return reinterpret_cast<::rs::core::time::Duration*>(storage_);
  }
  ::rs::core::time::Duration const* some_const_ptr() const noexcept {
    return reinterpret_cast<::rs::core::time::Duration const*>(storage_);
  }
  void set_some_tag() noexcept {}
  constexpr void set_none_tag() noexcept { set_tag(kNoneVal); }
  constexpr bool is_none() const noexcept { return tag() == kNoneVal; }
  constexpr ::std::uint32_t tag() const& noexcept;
  constexpr void set_tag(::std::uint32_t tag) noexcept;

 private:
  unsigned char storage_[16];
};
#endif

#ifndef _CRUBIT_BINDINGS_FOR_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Option_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020path_x00000020_x0000003a_x0000003a_x00000020Prefix_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Option_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020path_x00000020_x0000003a_x0000003a_x00000020Prefix_x00000020_x0000003e
template <>
struct alignas(8) CRUBIT_INTERNAL_RUST_TYPE(
    "std :: option :: Option < :: std :: path :: Prefix < 'static > >")
    rs_std::Option<::rs::std::path::Prefix>
    : public rs_std::OptionBase<rs_std::Option<::rs::std::path::Prefix>,
                                ::rs::std::path::Prefix> {
 public:
  // Rust types that are `Copy` get trivial, `default` C++ copy constructor and
  // assignment operator.
  Option(const Option&) = default;
  Option& operator=(const Option&) = default;
  Option(Option&&) = default;
  Option& operator=(Option&&) = default;

  Option(::crubit::UnsafeRelocateTag, Option&& value);
  using base_type = rs_std::OptionBase<rs_std::Option<::rs::std::path::Prefix>,
                                       ::rs::std::path::Prefix>;
  constexpr Option() = default;
  constexpr Option(::std::nullopt_t) noexcept;
  constexpr Option& operator=(::std::nullopt_t) noexcept;
  template <typename U>
    requires(
        rs_std::OptionForwardConstructible<Option, ::rs::std::path::Prefix, U>)
  Option(U&& value) noexcept;
  template <typename U>
    requires(
        rs_std::OptionForwardConstructible<Option, ::rs::std::path::Prefix, U>)
  Option& operator=(U&& value) noexcept;
  template <typename Opt>
    requires(rs_std::OptionFromStdOptional<::rs::std::path::Prefix, Opt>)
  Option(Opt&& value) noexcept;
  template <typename Opt>
    requires(rs_std::OptionFromStdOptional<::rs::std::path::Prefix, Opt>)
  Option& operator=(Opt&& value) noexcept;
  template <typename... Args>
  explicit Option(::std::in_place_t ip, Args&&... args) noexcept;
  ~Option() noexcept = default;

 private:
  friend base_type;
  using tag_type = ::std::uint8_t;
  static constexpr tag_type kNoneVal = 255;
  ::rs::std::path::Prefix* some_ptr() noexcept {
    return reinterpret_cast<::rs::std::path::Prefix*>(storage_);
  }
  ::rs::std::path::Prefix const* some_const_ptr() const noexcept {
    return reinterpret_cast<::rs::std::path::Prefix const*>(storage_);
  }
  void set_some_tag() noexcept {}
  constexpr void set_none_tag() noexcept { set_tag(kNoneVal); }
  constexpr bool is_none() const noexcept { return tag() == kNoneVal; }
  constexpr ::std::uint8_t tag() const& noexcept;
  constexpr void set_tag(::std::uint8_t tag) noexcept;

 private:
  unsigned char storage_[40];
};
#endif

namespace rs::std::path {

//  An iterator over the [`Component`]s of a [`Path`].
//
//  This `struct` is created by the [`components`] method on [`Path`].
//  See its documentation for more.
//
//  # Examples
//
//  ```
//  use std::path::Path;
//
//  let path = Path::new("/tmp/foo/bar.txt");
//
//  for component in path.components() {
//      println!("{component:?}");
//  }
//  ```
//
//  [`components`]: Path::components
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=621
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: path :: Components") alignas(8)
    [[clang::trivial_abi]] [[nodiscard(
        "iterators are lazy and do nothing unless consumed")]]
    Components final {
 public:
  // `std::path::Components` doesn't implement the `Default` trait
  Components() = delete;

  // No custom `Drop` impl and no custom "drop glue" required
  ~Components() = default;
  Components(Components&&) = default;
  Components& operator=(Components&&) = default;

  // Clone::clone
  Components(const Components&);

  // Clone::clone_from
  ::rs::std::path::Components& operator=(const Components&);

  Components(::crubit::UnsafeRelocateTag, Components&& value);

  // Error generating bindings for associated function
  // `path::Components::<'a>::as_path` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=728:
  // Error formatting function return type `&'a path::Path`: Failed to format
  // the referent of the reference type `&'a path::Path`: Failed to format type
  // for the definition of `path::Path`: Bindings for dynamically sized types
  // are not supported.

  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=1028
  bool operator==(::rs::std::path::Components const& other) const;
  template <typename TAdaptedSelf_ = Components>
  inline rs::IteratorAdapter<TAdaptedSelf_*> begin() & {
    return rs::IteratorAdapter<TAdaptedSelf_*>(this);
  }
  inline rs::IteratorEnd end() & { return rs::IteratorEnd(); }
  ::std::strong_ordering operator<=>(const Components& other) const;

 private:
  union {
    // Generated from:
    // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=623
    rs_std::SliceRef<const ::std::uint8_t> path;
  };
  union {
    // Generated from:
    // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=626
    rs_std::Option<::rs::std::path::Prefix> prefix;
  };
  // Field type has been replaced with a blob of bytes: Not a public or a
  // supported reexported type (b/262052635).
  ::std::array<unsigned char, 1> front;
  // Field type has been replaced with a blob of bytes: Not a public or a
  // supported reexported type (b/262052635).
  ::std::array<unsigned char, 1> back;
  union {
    // Generated from:
    // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=631
    bool has_physical_root;
  };
  unsigned char __padding2[5];

 private:
  static void __crubit_field_offset_assertions();
};

//  An iterator over the [`Component`]s of a [`Path`], as [`OsStr`] slices.
//
//  This `struct` is created by the [`iter`] method on [`Path`].
//  See its documentation for more.
//
//  [`iter`]: Path::iter
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=648
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: path :: Iter") alignas(8)
    [[clang::trivial_abi]] [[nodiscard(
        "iterators are lazy and do nothing unless consumed")]] Iter final {
 public:
  // `std::path::Iter` doesn't implement the `Default` trait
  Iter() = delete;

  // No custom `Drop` impl and no custom "drop glue" required
  ~Iter() = default;
  Iter(Iter&&) = default;
  Iter& operator=(Iter&&) = default;

  // Clone::clone
  Iter(const Iter&);

  // Clone::clone_from
  ::rs::std::path::Iter& operator=(const Iter&);

  Iter(::crubit::UnsafeRelocateTag, Iter&& value);

  // Error generating bindings for associated function
  // `path::Iter::<'a>::as_path` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=877:
  // Error formatting function return type `&'a path::Path`: Failed to format
  // the referent of the reference type `&'a path::Path`: Failed to format type
  // for the definition of `path::Path`: Bindings for dynamically sized types
  // are not supported.

  template <typename TAdaptedSelf_ = Iter>
  inline rs::IteratorAdapter<TAdaptedSelf_*> begin() & {
    return rs::IteratorAdapter<TAdaptedSelf_*>(this);
  }
  inline rs::IteratorEnd end() & { return rs::IteratorEnd(); }

 private:
  union {
    // Generated from:
    // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=649
    ::rs::std::path::Components inner;
  };

 private:
  static void __crubit_field_offset_assertions();
};

}  // namespace rs::std::path

#ifndef _CRUBIT_BINDINGS_FOR_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Option_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020process_x00000020_x0000003a_x0000003a_x00000020ChildStderr_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Option_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020process_x00000020_x0000003a_x0000003a_x00000020ChildStderr_x00000020_x0000003e
template <>
struct alignas(4) CRUBIT_INTERNAL_RUST_TYPE(
    "std :: option :: Option < :: std :: process :: ChildStderr >")
    rs_std::Option<::rs::std::process::ChildStderr>
    : public rs_std::OptionBase<rs_std::Option<::rs::std::process::ChildStderr>,
                                ::rs::std::process::ChildStderr> {
 public:
  // `core::option::Option` doesn't implement the `Clone` trait
  Option(const Option&) = delete;
  Option& operator=(const Option&) = delete;
  Option(Option&&);
  rs_std::Option<::rs::std::process::ChildStderr>& operator=(Option&&);
  Option(::crubit::UnsafeRelocateTag, Option&& value);
  using base_type =
      rs_std::OptionBase<rs_std::Option<::rs::std::process::ChildStderr>,
                         ::rs::std::process::ChildStderr>;
  constexpr Option() = default;
  constexpr Option(::std::nullopt_t) noexcept;
  constexpr Option& operator=(::std::nullopt_t) noexcept;
  template <typename U>
    requires(rs_std::OptionForwardConstructible<
             Option, ::rs::std::process::ChildStderr, U>)
  Option(U&& value) noexcept;
  template <typename U>
    requires(rs_std::OptionForwardConstructible<
             Option, ::rs::std::process::ChildStderr, U>)
  Option& operator=(U&& value) noexcept;
  template <typename Opt>
    requires(
        rs_std::OptionFromStdOptional<::rs::std::process::ChildStderr, Opt>)
  Option(Opt&& value) noexcept;
  template <typename Opt>
    requires(
        rs_std::OptionFromStdOptional<::rs::std::process::ChildStderr, Opt>)
  Option& operator=(Opt&& value) noexcept;
  template <typename... Args>
  explicit Option(::std::in_place_t ip, Args&&... args) noexcept;
  constexpr ~Option() noexcept;

 private:
  friend base_type;
  using tag_type = ::std::int32_t;
  static constexpr tag_type kNoneVal = INT32_C(-1);
  ::rs::std::process::ChildStderr* some_ptr() noexcept {
    return reinterpret_cast<::rs::std::process::ChildStderr*>(storage_);
  }
  ::rs::std::process::ChildStderr const* some_const_ptr() const noexcept {
    return reinterpret_cast<::rs::std::process::ChildStderr const*>(storage_);
  }
  void set_some_tag() noexcept {}
  constexpr void set_none_tag() noexcept { set_tag(kNoneVal); }
  constexpr bool is_none() const noexcept { return tag() == kNoneVal; }
  constexpr ::std::int32_t tag() const& noexcept;
  constexpr void set_tag(::std::int32_t tag) noexcept;

 private:
  unsigned char storage_[4];
};
#endif

#ifndef _CRUBIT_BINDINGS_FOR_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Option_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020process_x00000020_x0000003a_x0000003a_x00000020ChildStdin_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Option_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020process_x00000020_x0000003a_x0000003a_x00000020ChildStdin_x00000020_x0000003e
template <>
struct alignas(4) CRUBIT_INTERNAL_RUST_TYPE(
    "std :: option :: Option < :: std :: process :: ChildStdin >")
    rs_std::Option<::rs::std::process::ChildStdin>
    : public rs_std::OptionBase<rs_std::Option<::rs::std::process::ChildStdin>,
                                ::rs::std::process::ChildStdin> {
 public:
  // `core::option::Option` doesn't implement the `Clone` trait
  Option(const Option&) = delete;
  Option& operator=(const Option&) = delete;
  Option(Option&&);
  rs_std::Option<::rs::std::process::ChildStdin>& operator=(Option&&);
  Option(::crubit::UnsafeRelocateTag, Option&& value);
  using base_type =
      rs_std::OptionBase<rs_std::Option<::rs::std::process::ChildStdin>,
                         ::rs::std::process::ChildStdin>;
  constexpr Option() = default;
  constexpr Option(::std::nullopt_t) noexcept;
  constexpr Option& operator=(::std::nullopt_t) noexcept;
  template <typename U>
    requires(rs_std::OptionForwardConstructible<
             Option, ::rs::std::process::ChildStdin, U>)
  Option(U&& value) noexcept;
  template <typename U>
    requires(rs_std::OptionForwardConstructible<
             Option, ::rs::std::process::ChildStdin, U>)
  Option& operator=(U&& value) noexcept;
  template <typename Opt>
    requires(rs_std::OptionFromStdOptional<::rs::std::process::ChildStdin, Opt>)
  Option(Opt&& value) noexcept;
  template <typename Opt>
    requires(rs_std::OptionFromStdOptional<::rs::std::process::ChildStdin, Opt>)
  Option& operator=(Opt&& value) noexcept;
  template <typename... Args>
  explicit Option(::std::in_place_t ip, Args&&... args) noexcept;
  constexpr ~Option() noexcept;

 private:
  friend base_type;
  using tag_type = ::std::int32_t;
  static constexpr tag_type kNoneVal = INT32_C(-1);
  ::rs::std::process::ChildStdin* some_ptr() noexcept {
    return reinterpret_cast<::rs::std::process::ChildStdin*>(storage_);
  }
  ::rs::std::process::ChildStdin const* some_const_ptr() const noexcept {
    return reinterpret_cast<::rs::std::process::ChildStdin const*>(storage_);
  }
  void set_some_tag() noexcept {}
  constexpr void set_none_tag() noexcept { set_tag(kNoneVal); }
  constexpr bool is_none() const noexcept { return tag() == kNoneVal; }
  constexpr ::std::int32_t tag() const& noexcept;
  constexpr void set_tag(::std::int32_t tag) noexcept;

 private:
  unsigned char storage_[4];
};
#endif

#ifndef _CRUBIT_BINDINGS_FOR_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Option_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020process_x00000020_x0000003a_x0000003a_x00000020ChildStdout_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Option_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020process_x00000020_x0000003a_x0000003a_x00000020ChildStdout_x00000020_x0000003e
template <>
struct alignas(4) CRUBIT_INTERNAL_RUST_TYPE(
    "std :: option :: Option < :: std :: process :: ChildStdout >")
    rs_std::Option<::rs::std::process::ChildStdout>
    : public rs_std::OptionBase<rs_std::Option<::rs::std::process::ChildStdout>,
                                ::rs::std::process::ChildStdout> {
 public:
  // `core::option::Option` doesn't implement the `Clone` trait
  Option(const Option&) = delete;
  Option& operator=(const Option&) = delete;
  Option(Option&&);
  rs_std::Option<::rs::std::process::ChildStdout>& operator=(Option&&);
  Option(::crubit::UnsafeRelocateTag, Option&& value);
  using base_type =
      rs_std::OptionBase<rs_std::Option<::rs::std::process::ChildStdout>,
                         ::rs::std::process::ChildStdout>;
  constexpr Option() = default;
  constexpr Option(::std::nullopt_t) noexcept;
  constexpr Option& operator=(::std::nullopt_t) noexcept;
  template <typename U>
    requires(rs_std::OptionForwardConstructible<
             Option, ::rs::std::process::ChildStdout, U>)
  Option(U&& value) noexcept;
  template <typename U>
    requires(rs_std::OptionForwardConstructible<
             Option, ::rs::std::process::ChildStdout, U>)
  Option& operator=(U&& value) noexcept;
  template <typename Opt>
    requires(
        rs_std::OptionFromStdOptional<::rs::std::process::ChildStdout, Opt>)
  Option(Opt&& value) noexcept;
  template <typename Opt>
    requires(
        rs_std::OptionFromStdOptional<::rs::std::process::ChildStdout, Opt>)
  Option& operator=(Opt&& value) noexcept;
  template <typename... Args>
  explicit Option(::std::in_place_t ip, Args&&... args) noexcept;
  constexpr ~Option() noexcept;

 private:
  friend base_type;
  using tag_type = ::std::int32_t;
  static constexpr tag_type kNoneVal = INT32_C(-1);
  ::rs::std::process::ChildStdout* some_ptr() noexcept {
    return reinterpret_cast<::rs::std::process::ChildStdout*>(storage_);
  }
  ::rs::std::process::ChildStdout const* some_const_ptr() const noexcept {
    return reinterpret_cast<::rs::std::process::ChildStdout const*>(storage_);
  }
  void set_some_tag() noexcept {}
  constexpr void set_none_tag() noexcept { set_tag(kNoneVal); }
  constexpr bool is_none() const noexcept { return tag() == kNoneVal; }
  constexpr ::std::int32_t tag() const& noexcept;
  constexpr void set_tag(::std::int32_t tag) noexcept;

 private:
  unsigned char storage_[4];
};
#endif

namespace rs::std::process {

//  Representation of a running or exited child process.
//
//  This structure is used to represent and manage child processes. A child
//  process is created via the [`Command`] struct, which configures the
//  spawning process and can itself be constructed using a builder-style
//  interface.
//
//  There is no implementation of [`Drop`] for child processes,
//  so if you do not ensure the `Child` has exited then it will continue to
//  run, even after the `Child` handle to the child process has gone out of
//  scope.
//
//  Calling [`wait`] (or other functions that wrap around it) will make
//  the parent process wait until the child has actually exited before
//  continuing.
//
//  # Warning
//
//  On some systems, calling [`wait`] or similar is necessary for the OS to
//  release resources. A process that terminated but has not been waited on is
//  still around as a "zombie". Leaving too many zombies around may exhaust
//  global resources (for example process IDs).
//
//  The standard library does *not* automatically wait on child processes (not
//  even if the `Child` is dropped), it is up to the application developer to do
//  so. As a consequence, dropping `Child` handles without waiting on them first
//  is not recommended in long-running applications.
//
//  # Examples
//
//  ```should_panic
//  use std::process::Command;
//
//  let mut child = Command::new("/bin/cat")
//      .arg("file.txt")
//      .spawn()
//      .expect("failed to execute child");
//
//  let ecode = child.wait().expect("failed to wait on child");
//
//  assert!(ecode.success());
//  ```
//
//  [`wait`]: Child::wait
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=220
struct CRUBIT_INTERNAL_RUST_TYPE(":: std :: process :: Child") alignas(4)
    [[clang::trivial_abi]] Child final {
 public:
  // `std::process::Child` doesn't implement the `Default` trait
  Child() = delete;

  // Drop::drop
  ~Child();

  // C++ move operations are unavailable for this type. See
  // http://crubit.rs/rust/movable_types for an explanation of Rust types that
  // are C++ movable.
  Child(Child&&) = delete;
  ::rs::std::process::Child& operator=(Child&&) = delete;
  // `std::process::Child` doesn't implement the `Clone` trait
  Child(const Child&) = delete;
  Child& operator=(const Child&) = delete;
  Child(::crubit::UnsafeRelocateTag, Child&& value);

  // Error generating bindings for associated function `process::Child::kill`
  // defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=2348:
  // Error formatting function return type `core::result::Result<(),
  // core::io::Error>`: Generic types are not supported yet (b/259749095)

  //  Returns the OS-assigned process identifier associated with this child.
  //
  //  # Examples
  //
  //  ```no_run
  //  use std::process::Command;
  //
  //  let mut command = Command::new("ls");
  //  if let Ok(child) = command.spawn() {
  //      println!("Child's ID is {}", child.id());
  //  } else {
  //      println!("ls command didn't start");
  //  }
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=2369
  [[nodiscard]] ::std::uint32_t id() const;

  //  Waits for the child to exit completely, returning the status that it
  //  exited with. This function will continue to have the same return value
  //  after it has been called at least once.
  //
  //  The stdin handle to the child process, if any, will be closed
  //  before waiting. This helps avoid deadlock: it ensures that the
  //  child does not block waiting for input from the parent, while
  //  the parent waits for the child to exit.
  //
  //  # Examples
  //
  //  ```no_run
  //  use std::process::Command;
  //
  //  let mut command = Command::new("ls");
  //  if let Ok(mut child) = command.spawn() {
  //      child.wait().expect("command wasn't running");
  //      println!("Child has finished its execution!");
  //  } else {
  //      println!("ls command didn't start");
  //  }
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=2396
  rs_std::Result<::rs::std::process::ExitStatus, ::rs::std::io::Error> wait();

  //  Attempts to collect the exit status of the child if it has already
  //  exited.
  //
  //  This function will not block the calling thread and will only
  //  check to see if the child process has exited or not. If the child has
  //  exited then on Unix the process ID is reaped. This function is
  //  guaranteed to repeatedly return a successful exit status so long as the
  //  child has already exited.
  //
  //  If the child has exited, then `Ok(Some(status))` is returned. If the
  //  exit status is not available at this time then `Ok(None)` is returned.
  //  If an error occurs, then that error is returned.
  //
  //  Note that unlike `wait`, this function will not attempt to drop stdin.
  //
  //  # Examples
  //
  //  ```no_run
  //  use std::process::Command;
  //
  //  let mut child = Command::new("ls").spawn()?;
  //
  //  match child.try_wait() {
  //      Ok(Some(status)) => println!("exited with: {status}"),
  //      Ok(None) => {
  //          println!("status not ready yet, let's really wait");
  //          let res = child.wait();
  //          println!("result: {res:?}");
  //      }
  //      Err(e) => println!("error attempting to wait: {e}"),
  //  }
  //  # std::io::Result::Ok(())
  //  ```
  //
  // Generated from:
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=2435
  rs_std::Result<rs_std::Option<::rs::std::process::ExitStatus>,
                 ::rs::std::io::Error>
  try_wait();

  // Error generating bindings for associated function
  // `process::Child::wait_with_output` defined at
  // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=2472:
  // Can't pass type `process::Child` by value without a move constructor. See
  // crubit.rs/rust/movable_types for what types are C++ movable.

 private:
  // Field type has been replaced with a blob of bytes: Not a public or a
  // supported reexported type (b/262052635).
  ::std::array<unsigned char, 12> handle;

 public:
  union {
    //  The handle for writing to the child's standard input (stdin), if it
    //  has been captured. You might find it helpful to do
    //
    //  ```ignore (incomplete)
    //  let stdin = child.stdin.take().expect("handle present");
    //  ```
    //
    //  to avoid partially moving the `child` and thus blocking yourself from
    //  calling functions on `child` while using `stdin`.
    //
    // Generated from:
    // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=233
    rs_std::Option<::rs::std::process::ChildStdin> stdin;
  };
  union {
    //  The handle for reading from the child's standard output (stdout), if it
    //  has been captured. You might find it helpful to do
    //
    //  ```ignore (incomplete)
    //  let stdout = child.stdout.take().expect("handle present");
    //  ```
    //
    //  to avoid partially moving the `child` and thus blocking yourself from
    //  calling functions on `child` while using `stdout`.
    //
    // Generated from:
    // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=245
    rs_std::Option<::rs::std::process::ChildStdout> stdout;
  };
  union {
    //  The handle for reading from the child's standard error (stderr), if it
    //  has been captured. You might find it helpful to do
    //
    //  ```ignore (incomplete)
    //  let stderr = child.stderr.take().expect("handle present");
    //  ```
    //
    //  to avoid partially moving the `child` and thus blocking yourself from
    //  calling functions on `child` while using `stderr`.
    //
    // Generated from:
    // ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs;l=257
    rs_std::Option<::rs::std::process::ChildStderr> stderr;
  };

 private:
  static void __crubit_field_offset_assertions();
};

}  // namespace rs::std::process

#ifndef _CRUBIT_BINDINGS_FOR_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Option_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020process_x00000020_x0000003a_x0000003a_x00000020ExitStatus_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Option_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020process_x00000020_x0000003a_x0000003a_x00000020ExitStatus_x00000020_x0000003e
template <>
struct alignas(4) CRUBIT_INTERNAL_RUST_TYPE(
    "std :: option :: Option < :: std :: process :: ExitStatus >")
    rs_std::Option<::rs::std::process::ExitStatus>
    : public rs_std::OptionBase<rs_std::Option<::rs::std::process::ExitStatus>,
                                ::rs::std::process::ExitStatus> {
 public:
  // Rust types that are `Copy` get trivial, `default` C++ copy constructor and
  // assignment operator.
  Option(const Option&) = default;
  Option& operator=(const Option&) = default;
  Option(Option&&) = default;
  Option& operator=(Option&&) = default;

  Option(::crubit::UnsafeRelocateTag, Option&& value);
  using base_type =
      rs_std::OptionBase<rs_std::Option<::rs::std::process::ExitStatus>,
                         ::rs::std::process::ExitStatus>;
  constexpr Option() = default;
  constexpr Option(::std::nullopt_t) noexcept;
  constexpr Option& operator=(::std::nullopt_t) noexcept;
  template <typename U>
    requires(rs_std::OptionForwardConstructible<
             Option, ::rs::std::process::ExitStatus, U>)
  Option(U&& value) noexcept;
  template <typename U>
    requires(rs_std::OptionForwardConstructible<
             Option, ::rs::std::process::ExitStatus, U>)
  Option& operator=(U&& value) noexcept;
  template <typename Opt>
    requires(rs_std::OptionFromStdOptional<::rs::std::process::ExitStatus, Opt>)
  Option(Opt&& value) noexcept;
  template <typename Opt>
    requires(rs_std::OptionFromStdOptional<::rs::std::process::ExitStatus, Opt>)
  Option& operator=(Opt&& value) noexcept;
  template <typename... Args>
  explicit Option(::std::in_place_t ip, Args&&... args) noexcept;
  ~Option() noexcept = default;

 private:
  friend base_type;
  using tag_type = ::std::uint32_t;
  static constexpr tag_type kNoneVal = 0;
  ::rs::std::process::ExitStatus* some_ptr() noexcept {
    return reinterpret_cast<::rs::std::process::ExitStatus*>(storage_ + 4);
  }
  ::rs::std::process::ExitStatus const* some_const_ptr() const noexcept {
    return reinterpret_cast<::rs::std::process::ExitStatus const*>(storage_ +
                                                                   4);
  }
  void set_some_tag() noexcept { set_tag(1); }
  constexpr void set_none_tag() noexcept { set_tag(kNoneVal); }
  constexpr bool is_none() const noexcept { return tag() == kNoneVal; }
  constexpr ::std::uint32_t tag() const& noexcept;
  constexpr void set_tag(::std::uint32_t tag) noexcept;

 private:
  unsigned char storage_[8];
};
#endif

#ifndef _CRUBIT_BINDINGS_FOR_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020rs_ustd_x00000020_x0000003a_x0000003a_x00000020SliceRef_x00000020_x0000003c_x00000020const_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020uint8_ut_x00000020_x0000003e_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020rs_ustd_x00000020_x0000003a_x0000003a_x00000020SliceRef_x00000020_x0000003c_x00000020const_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020uint8_ut_x00000020_x0000003e_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
template <>
struct alignas(8) CRUBIT_INTERNAL_RUST_TYPE(
    "std :: result :: Result < & 'static [u8] , :: std :: io :: Error >")
    rs_std::Result<rs_std::SliceRef<const ::std::uint8_t>, ::rs::std::io::Error>
    : public rs_std::ResultBase<
          rs_std::Result<rs_std::SliceRef<const ::std::uint8_t>,
                         ::rs::std::io::Error>,
          rs_std::SliceRef<const ::std::uint8_t>, ::rs::std::io::Error> {
 public:
  // `core::result::Result` doesn't implement the `Clone` trait
  Result(const Result&) = delete;
  Result& operator=(const Result&) = delete;
  // C++ move operations are unavailable for this type. See
  // http://crubit.rs/rust/movable_types for an explanation of Rust types that
  // are C++ movable.
  Result(Result&&) = delete;
  rs_std::Result<rs_std::SliceRef<const ::std::uint8_t>, ::rs::std::io::Error>&
  operator=(Result&&) = delete;
  Result(::crubit::UnsafeRelocateTag, Result&& value);

 public:
  using base_type =
      rs_std::ResultBase<rs_std::Result<rs_std::SliceRef<const ::std::uint8_t>,
                                        ::rs::std::io::Error>,
                         rs_std::SliceRef<const ::std::uint8_t>,
                         ::rs::std::io::Error>;
  template <typename U>
    requires(rs_std::ResultForwardConstructible<
             Result, rs_std::SliceRef<const ::std::uint8_t>, U>)
  explicit constexpr Result(U&& ok) noexcept;
  template <typename U>
    requires(rs_std::ResultForwardConstructible<
             Result, rs_std::SliceRef<const ::std::uint8_t>, U>)
  constexpr Result& operator=(U&& ok) noexcept;
  template <typename F>
    requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
  explicit constexpr Result(rs_std::unexpected<F>&& err) noexcept;
  template <typename F>
    requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
  constexpr Result& operator=(rs_std::unexpected<F>&& err) noexcept;
  template <typename... Args>
  explicit constexpr Result(::std::in_place_t ip, Args&&... args) noexcept;
  template <typename... Args>
  explicit constexpr Result(rs_std::unexpect_t u, Args&&... args) noexcept;
  ~Result() noexcept;

 private:
  friend base_type;
  bool has_value_impl() const noexcept { return tag() != 0; }
  rs_std::SliceRef<const ::std::uint8_t>* ok_ptr() noexcept {
    return reinterpret_cast<rs_std::SliceRef<const ::std::uint8_t>*>(__storage);
  }
  rs_std::SliceRef<const ::std::uint8_t> const* ok_const_ptr() const noexcept {
    return reinterpret_cast<rs_std::SliceRef<const ::std::uint8_t> const*>(
        __storage);
  }
  ::rs::std::io::Error* err_ptr() noexcept {
    return reinterpret_cast<::rs::std::io::Error*>(__storage + 8);
  }
  ::rs::std::io::Error const* err_const_ptr() const noexcept {
    return reinterpret_cast<::rs::std::io::Error const*>(__storage + 8);
  }
  void set_ok_tag() noexcept {}
  void set_err_tag() noexcept { set_tag(0); }
  constexpr ::std::uint64_t tag() const& noexcept;
  constexpr void set_tag(::std::uint64_t tag) noexcept;

 private:
  unsigned char __storage[16];
};
#endif

#ifndef _CRUBIT_BINDINGS_FOR_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020rs_ustd_x00000020_x0000003a_x0000003a_x00000020StrRef_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020core_x00000020_x0000003a_x0000003a_x00000020str_x00000020_x0000003a_x0000003a_x00000020Utf8Error_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020rs_ustd_x00000020_x0000003a_x0000003a_x00000020StrRef_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020core_x00000020_x0000003a_x0000003a_x00000020str_x00000020_x0000003a_x0000003a_x00000020Utf8Error_x00000020_x0000003e
template <>
struct alignas(8) CRUBIT_INTERNAL_RUST_TYPE(
    "std :: result :: Result < & 'static str , :: core :: str :: Utf8Error >")
    rs_std::Result<rs_std::StrRef, ::rs::core::str::Utf8Error>
    : public rs_std::ResultBase<
          rs_std::Result<rs_std::StrRef, ::rs::core::str::Utf8Error>,
          rs_std::StrRef, ::rs::core::str::Utf8Error> {
 public:
  // Rust types that are `Copy` get trivial, `default` C++ copy constructor and
  // assignment operator.
  Result(const Result&) = default;
  Result& operator=(const Result&) = default;
  Result(Result&&) = default;
  Result& operator=(Result&&) = default;

  Result(::crubit::UnsafeRelocateTag, Result&& value);

 public:
  using base_type = rs_std::ResultBase<
      rs_std::Result<rs_std::StrRef, ::rs::core::str::Utf8Error>,
      rs_std::StrRef, ::rs::core::str::Utf8Error>;
  template <typename U>
    requires(rs_std::ResultForwardConstructible<Result, rs_std::StrRef, U>)
  explicit constexpr Result(U&& ok) noexcept;
  template <typename U>
    requires(rs_std::ResultForwardConstructible<Result, rs_std::StrRef, U>)
  constexpr Result& operator=(U&& ok) noexcept;
  template <typename F>
    requires(
        rs_std::ResultUnexpectedConstructible<::rs::core::str::Utf8Error, F>)
  explicit constexpr Result(rs_std::unexpected<F>&& err) noexcept;
  template <typename F>
    requires(
        rs_std::ResultUnexpectedConstructible<::rs::core::str::Utf8Error, F>)
  constexpr Result& operator=(rs_std::unexpected<F>&& err) noexcept;
  template <typename... Args>
  explicit constexpr Result(::std::in_place_t ip, Args&&... args) noexcept;
  template <typename... Args>
  explicit constexpr Result(rs_std::unexpect_t u, Args&&... args) noexcept;
  ~Result() noexcept = default;

 private:
  friend base_type;
  bool has_value_impl() const noexcept { return tag() == 0; }
  rs_std::StrRef* ok_ptr() noexcept {
    return reinterpret_cast<rs_std::StrRef*>(__storage + 8);
  }
  rs_std::StrRef const* ok_const_ptr() const noexcept {
    return reinterpret_cast<rs_std::StrRef const*>(__storage + 8);
  }
  ::rs::core::str::Utf8Error* err_ptr() noexcept {
    return reinterpret_cast<::rs::core::str::Utf8Error*>(__storage + 8);
  }
  ::rs::core::str::Utf8Error const* err_const_ptr() const noexcept {
    return reinterpret_cast<::rs::core::str::Utf8Error const*>(__storage + 8);
  }
  void set_ok_tag() noexcept { set_tag(0); }
  void set_err_tag() noexcept { set_tag(1); }
  constexpr ::std::uint64_t tag() const& noexcept;
  constexpr void set_tag(::std::uint64_t tag) noexcept;

 private:
  unsigned char __storage[24];
};
#endif

#ifndef _CRUBIT_BINDINGS_FOR_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020rs_ustd_x00000020_x0000003a_x0000003a_x00000020Tuple_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020PipeReader_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020PipeWriter_x00000020_x0000003e_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020rs_ustd_x00000020_x0000003a_x0000003a_x00000020Tuple_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020PipeReader_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020PipeWriter_x00000020_x0000003e_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
template <>
struct alignas(8) CRUBIT_INTERNAL_RUST_TYPE(
    "std :: result :: Result < (:: std :: io :: PipeReader , :: std :: io :: "
    "PipeWriter ,) , :: std :: io :: Error >") rs_std::
    Result<rs_std::Tuple<::rs::std::io::PipeReader, ::rs::std::io::PipeWriter>,
           ::rs::std::io::Error>
    : public rs_std::ResultBase<
          rs_std::Result<rs_std::Tuple<::rs::std::io::PipeReader,
                                       ::rs::std::io::PipeWriter>,
                         ::rs::std::io::Error>,
          rs_std::Tuple<::rs::std::io::PipeReader, ::rs::std::io::PipeWriter>,
          ::rs::std::io::Error> {
 public:
  // `core::result::Result` doesn't implement the `Clone` trait
  Result(const Result&) = delete;
  Result& operator=(const Result&) = delete;
  // C++ move operations are unavailable for this type. See
  // http://crubit.rs/rust/movable_types for an explanation of Rust types that
  // are C++ movable.
  Result(Result&&) = delete;
  rs_std::Result<
      rs_std::Tuple<::rs::std::io::PipeReader, ::rs::std::io::PipeWriter>,
      ::rs::std::io::Error>&
  operator=(Result&&) = delete;
  Result(::crubit::UnsafeRelocateTag, Result&& value);

 public:
  using base_type = rs_std::ResultBase<
      rs_std::Result<
          rs_std::Tuple<::rs::std::io::PipeReader, ::rs::std::io::PipeWriter>,
          ::rs::std::io::Error>,
      rs_std::Tuple<::rs::std::io::PipeReader, ::rs::std::io::PipeWriter>,
      ::rs::std::io::Error>;
  template <typename U>
    requires(
        rs_std::ResultForwardConstructible<
            Result,
            rs_std::Tuple<::rs::std::io::PipeReader, ::rs::std::io::PipeWriter>,
            U>)
  explicit constexpr Result(U&& ok) noexcept;
  template <typename U>
    requires(
        rs_std::ResultForwardConstructible<
            Result,
            rs_std::Tuple<::rs::std::io::PipeReader, ::rs::std::io::PipeWriter>,
            U>)
  constexpr Result& operator=(U&& ok) noexcept;
  template <typename F>
    requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
  explicit constexpr Result(rs_std::unexpected<F>&& err) noexcept;
  template <typename F>
    requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
  constexpr Result& operator=(rs_std::unexpected<F>&& err) noexcept;
  template <typename... Args>
  explicit constexpr Result(::std::in_place_t ip, Args&&... args) noexcept;
  template <typename... Args>
  explicit constexpr Result(rs_std::unexpect_t u, Args&&... args) noexcept;
  ~Result() noexcept;

 private:
  friend base_type;
  bool has_value_impl() const noexcept { return tag() == 0; }
  rs_std::Tuple<::rs::std::io::PipeReader, ::rs::std::io::PipeWriter>*
  ok_ptr() noexcept {
    return reinterpret_cast<
        rs_std::Tuple<::rs::std::io::PipeReader, ::rs::std::io::PipeWriter>*>(
        __storage + 4);
  }
  rs_std::Tuple<::rs::std::io::PipeReader, ::rs::std::io::PipeWriter> const*
  ok_const_ptr() const noexcept {
    return reinterpret_cast<rs_std::Tuple<::rs::std::io::PipeReader,
                                          ::rs::std::io::PipeWriter> const*>(
        __storage + 4);
  }
  ::rs::std::io::Error* err_ptr() noexcept {
    return reinterpret_cast<::rs::std::io::Error*>(__storage + 8);
  }
  ::rs::std::io::Error const* err_const_ptr() const noexcept {
    return reinterpret_cast<::rs::std::io::Error const*>(__storage + 8);
  }
  void set_ok_tag() noexcept { set_tag(0); }
  void set_err_tag() noexcept { set_tag(1); }
  constexpr ::std::uint32_t tag() const& noexcept;
  constexpr void set_tag(::std::uint32_t tag) noexcept;

 private:
  unsigned char __storage[16];
};
#endif

#ifndef _CRUBIT_BINDINGS_FOR_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020rs_ustd_x00000020_x0000003a_x0000003a_x00000020Tuple_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020net_x00000020_x0000003a_x0000003a_x00000020TcpStream_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020core_x00000020_x0000003a_x0000003a_x00000020net_x00000020_x0000003a_x0000003a_x00000020SocketAddr_x00000020_x0000003e_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020rs_ustd_x00000020_x0000003a_x0000003a_x00000020Tuple_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020net_x00000020_x0000003a_x0000003a_x00000020TcpStream_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020core_x00000020_x0000003a_x0000003a_x00000020net_x00000020_x0000003a_x0000003a_x00000020SocketAddr_x00000020_x0000003e_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
template <>
struct alignas(8) CRUBIT_INTERNAL_RUST_TYPE(
    "std :: result :: Result < (:: std :: net :: TcpStream , :: core :: net :: "
    "SocketAddr ,) , :: std :: io :: Error >")
    rs_std::Result<
        rs_std::Tuple<::rs::std::net::TcpStream, ::rs::core::net::SocketAddr>,
        ::rs::std::io::Error>
    : public rs_std::ResultBase<
          rs_std::Result<rs_std::Tuple<::rs::std::net::TcpStream,
                                       ::rs::core::net::SocketAddr>,
                         ::rs::std::io::Error>,
          rs_std::Tuple<::rs::std::net::TcpStream, ::rs::core::net::SocketAddr>,
          ::rs::std::io::Error> {
 public:
  // `core::result::Result` doesn't implement the `Clone` trait
  Result(const Result&) = delete;
  Result& operator=(const Result&) = delete;
  // C++ move operations are unavailable for this type. See
  // http://crubit.rs/rust/movable_types for an explanation of Rust types that
  // are C++ movable.
  Result(Result&&) = delete;
  rs_std::Result<
      rs_std::Tuple<::rs::std::net::TcpStream, ::rs::core::net::SocketAddr>,
      ::rs::std::io::Error>&
  operator=(Result&&) = delete;
  Result(::crubit::UnsafeRelocateTag, Result&& value);

 public:
  using base_type = rs_std::ResultBase<
      rs_std::Result<
          rs_std::Tuple<::rs::std::net::TcpStream, ::rs::core::net::SocketAddr>,
          ::rs::std::io::Error>,
      rs_std::Tuple<::rs::std::net::TcpStream, ::rs::core::net::SocketAddr>,
      ::rs::std::io::Error>;
  template <typename U>
    requires(rs_std::ResultForwardConstructible<
             Result,
             rs_std::Tuple<::rs::std::net::TcpStream,
                           ::rs::core::net::SocketAddr>,
             U>)
  explicit constexpr Result(U&& ok) noexcept;
  template <typename U>
    requires(rs_std::ResultForwardConstructible<
             Result,
             rs_std::Tuple<::rs::std::net::TcpStream,
                           ::rs::core::net::SocketAddr>,
             U>)
  constexpr Result& operator=(U&& ok) noexcept;
  template <typename F>
    requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
  explicit constexpr Result(rs_std::unexpected<F>&& err) noexcept;
  template <typename F>
    requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
  constexpr Result& operator=(rs_std::unexpected<F>&& err) noexcept;
  template <typename... Args>
  explicit constexpr Result(::std::in_place_t ip, Args&&... args) noexcept;
  template <typename... Args>
  explicit constexpr Result(rs_std::unexpect_t u, Args&&... args) noexcept;
  ~Result() noexcept;

 private:
  friend base_type;
  bool has_value_impl() const noexcept { return tag() == 0; }
  rs_std::Tuple<::rs::std::net::TcpStream, ::rs::core::net::SocketAddr>*
  ok_ptr() noexcept {
    return reinterpret_cast<
        rs_std::Tuple<::rs::std::net::TcpStream, ::rs::core::net::SocketAddr>*>(
        __storage + 4);
  }
  rs_std::Tuple<::rs::std::net::TcpStream, ::rs::core::net::SocketAddr> const*
  ok_const_ptr() const noexcept {
    return reinterpret_cast<rs_std::Tuple<::rs::std::net::TcpStream,
                                          ::rs::core::net::SocketAddr> const*>(
        __storage + 4);
  }
  ::rs::std::io::Error* err_ptr() noexcept {
    return reinterpret_cast<::rs::std::io::Error*>(__storage + 8);
  }
  ::rs::std::io::Error const* err_const_ptr() const noexcept {
    return reinterpret_cast<::rs::std::io::Error const*>(__storage + 8);
  }
  void set_ok_tag() noexcept { set_tag(0); }
  void set_err_tag() noexcept { set_tag(1); }
  constexpr ::std::uint32_t tag() const& noexcept;
  constexpr void set_tag(::std::uint32_t tag) noexcept;

 private:
  unsigned char __storage[40];
};
#endif

#ifndef _CRUBIT_BINDINGS_FOR_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020alloc_x00000020_x0000003a_x0000003a_x00000020string_x00000020_x0000003a_x0000003a_x00000020String_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020ffi_x00000020_x0000003a_x0000003a_x00000020OsString_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020alloc_x00000020_x0000003a_x0000003a_x00000020string_x00000020_x0000003a_x0000003a_x00000020String_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020ffi_x00000020_x0000003a_x0000003a_x00000020OsString_x00000020_x0000003e
template <>
struct alignas(8) CRUBIT_INTERNAL_RUST_TYPE(
    "std :: result :: Result < :: alloc :: string :: String , :: std :: ffi :: "
    "OsString >")
    rs_std::Result<::rs::alloc::string::String, ::rs::std::ffi::OsString>
    : public rs_std::ResultBase<
          rs_std::Result<::rs::alloc::string::String, ::rs::std::ffi::OsString>,
          ::rs::alloc::string::String, ::rs::std::ffi::OsString> {
 public:
  // Clone::clone
  Result(const Result&);

  // Clone::clone_from
  rs_std::Result<::rs::alloc::string::String, ::rs::std::ffi::OsString>&
  operator=(const Result&);

  Result(::crubit::UnsafeRelocateTag, Result&& value);

 public:
  using base_type = rs_std::ResultBase<
      rs_std::Result<::rs::alloc::string::String, ::rs::std::ffi::OsString>,
      ::rs::alloc::string::String, ::rs::std::ffi::OsString>;
  template <typename U>
    requires(rs_std::ResultForwardConstructible<Result,
                                                ::rs::alloc::string::String, U>)
  explicit constexpr Result(U&& ok) noexcept;
  template <typename U>
    requires(rs_std::ResultForwardConstructible<Result,
                                                ::rs::alloc::string::String, U>)
  constexpr Result& operator=(U&& ok) noexcept;
  template <typename F>
    requires(rs_std::ResultUnexpectedConstructible<::rs::std::ffi::OsString, F>)
  explicit constexpr Result(rs_std::unexpected<F>&& err) noexcept;
  template <typename F>
    requires(rs_std::ResultUnexpectedConstructible<::rs::std::ffi::OsString, F>)
  constexpr Result& operator=(rs_std::unexpected<F>&& err) noexcept;
  template <typename... Args>
  explicit constexpr Result(::std::in_place_t ip, Args&&... args) noexcept;
  template <typename... Args>
  explicit constexpr Result(rs_std::unexpect_t u, Args&&... args) noexcept;
  ~Result() noexcept;

 private:
  friend base_type;
  bool has_value_impl() const noexcept { return tag() == 0; }
  ::rs::alloc::string::String* ok_ptr() noexcept {
    return reinterpret_cast<::rs::alloc::string::String*>(__storage + 8);
  }
  ::rs::alloc::string::String const* ok_const_ptr() const noexcept {
    return reinterpret_cast<::rs::alloc::string::String const*>(__storage + 8);
  }
  ::rs::std::ffi::OsString* err_ptr() noexcept {
    return reinterpret_cast<::rs::std::ffi::OsString*>(__storage + 8);
  }
  ::rs::std::ffi::OsString const* err_const_ptr() const noexcept {
    return reinterpret_cast<::rs::std::ffi::OsString const*>(__storage + 8);
  }
  void set_ok_tag() noexcept { set_tag(0); }
  void set_err_tag() noexcept { set_tag(1); }
  constexpr ::std::uint64_t tag() const& noexcept;
  constexpr void set_tag(::std::uint64_t tag) noexcept;

 private:
  unsigned char __storage[32];
};
#endif

#ifndef _CRUBIT_BINDINGS_FOR_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020alloc_x00000020_x0000003a_x0000003a_x00000020string_x00000020_x0000003a_x0000003a_x00000020String_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020path_x00000020_x0000003a_x0000003a_x00000020PathBuf_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020alloc_x00000020_x0000003a_x0000003a_x00000020string_x00000020_x0000003a_x0000003a_x00000020String_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020path_x00000020_x0000003a_x0000003a_x00000020PathBuf_x00000020_x0000003e
template <>
struct alignas(8) CRUBIT_INTERNAL_RUST_TYPE(
    "std :: result :: Result < :: alloc :: string :: String , :: std :: path "
    ":: PathBuf >")
    rs_std::Result<::rs::alloc::string::String, ::rs::std::path::PathBuf>
    : public rs_std::ResultBase<
          rs_std::Result<::rs::alloc::string::String, ::rs::std::path::PathBuf>,
          ::rs::alloc::string::String, ::rs::std::path::PathBuf> {
 public:
  // Clone::clone
  Result(const Result&);

  // Clone::clone_from
  rs_std::Result<::rs::alloc::string::String, ::rs::std::path::PathBuf>&
  operator=(const Result&);

  Result(::crubit::UnsafeRelocateTag, Result&& value);

 public:
  using base_type = rs_std::ResultBase<
      rs_std::Result<::rs::alloc::string::String, ::rs::std::path::PathBuf>,
      ::rs::alloc::string::String, ::rs::std::path::PathBuf>;
  template <typename U>
    requires(rs_std::ResultForwardConstructible<Result,
                                                ::rs::alloc::string::String, U>)
  explicit constexpr Result(U&& ok) noexcept;
  template <typename U>
    requires(rs_std::ResultForwardConstructible<Result,
                                                ::rs::alloc::string::String, U>)
  constexpr Result& operator=(U&& ok) noexcept;
  template <typename F>
    requires(rs_std::ResultUnexpectedConstructible<::rs::std::path::PathBuf, F>)
  explicit constexpr Result(rs_std::unexpected<F>&& err) noexcept;
  template <typename F>
    requires(rs_std::ResultUnexpectedConstructible<::rs::std::path::PathBuf, F>)
  constexpr Result& operator=(rs_std::unexpected<F>&& err) noexcept;
  template <typename... Args>
  explicit constexpr Result(::std::in_place_t ip, Args&&... args) noexcept;
  template <typename... Args>
  explicit constexpr Result(rs_std::unexpect_t u, Args&&... args) noexcept;
  ~Result() noexcept;

 private:
  friend base_type;
  bool has_value_impl() const noexcept { return tag() == 0; }
  ::rs::alloc::string::String* ok_ptr() noexcept {
    return reinterpret_cast<::rs::alloc::string::String*>(__storage + 8);
  }
  ::rs::alloc::string::String const* ok_const_ptr() const noexcept {
    return reinterpret_cast<::rs::alloc::string::String const*>(__storage + 8);
  }
  ::rs::std::path::PathBuf* err_ptr() noexcept {
    return reinterpret_cast<::rs::std::path::PathBuf*>(__storage + 8);
  }
  ::rs::std::path::PathBuf const* err_const_ptr() const noexcept {
    return reinterpret_cast<::rs::std::path::PathBuf const*>(__storage + 8);
  }
  void set_ok_tag() noexcept { set_tag(0); }
  void set_err_tag() noexcept { set_tag(1); }
  constexpr ::std::uint64_t tag() const& noexcept;
  constexpr void set_tag(::std::uint64_t tag) noexcept;

 private:
  unsigned char __storage[32];
};
#endif

#ifndef _CRUBIT_BINDINGS_FOR_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020bool_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020bool_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
template <>
struct alignas(8) CRUBIT_INTERNAL_RUST_TYPE(
    "std :: result :: Result < bool , :: std :: io :: Error >")
    rs_std::Result<bool, ::rs::std::io::Error>
    : public rs_std::ResultBase<rs_std::Result<bool, ::rs::std::io::Error>,
                                bool, ::rs::std::io::Error> {
 public:
  // `core::result::Result` doesn't implement the `Clone` trait
  Result(const Result&) = delete;
  Result& operator=(const Result&) = delete;
  // C++ move operations are unavailable for this type. See
  // http://crubit.rs/rust/movable_types for an explanation of Rust types that
  // are C++ movable.
  Result(Result&&) = delete;
  rs_std::Result<bool, ::rs::std::io::Error>& operator=(Result&&) = delete;
  Result(::crubit::UnsafeRelocateTag, Result&& value);

 public:
  using base_type =
      rs_std::ResultBase<rs_std::Result<bool, ::rs::std::io::Error>, bool,
                         ::rs::std::io::Error>;
  template <typename U>
    requires(rs_std::ResultForwardConstructible<Result, bool, U>)
  explicit constexpr Result(U&& ok) noexcept;
  template <typename U>
    requires(rs_std::ResultForwardConstructible<Result, bool, U>)
  constexpr Result& operator=(U&& ok) noexcept;
  template <typename F>
    requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
  explicit constexpr Result(rs_std::unexpected<F>&& err) noexcept;
  template <typename F>
    requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
  constexpr Result& operator=(rs_std::unexpected<F>&& err) noexcept;
  template <typename... Args>
  explicit constexpr Result(::std::in_place_t ip, Args&&... args) noexcept;
  template <typename... Args>
  explicit constexpr Result(rs_std::unexpect_t u, Args&&... args) noexcept;
  ~Result() noexcept;

 private:
  friend base_type;
  bool has_value_impl() const noexcept { return tag() == 0; }
  bool* ok_ptr() noexcept { return reinterpret_cast<bool*>(__storage + 1); }
  bool const* ok_const_ptr() const noexcept {
    return reinterpret_cast<bool const*>(__storage + 1);
  }
  ::rs::std::io::Error* err_ptr() noexcept {
    return reinterpret_cast<::rs::std::io::Error*>(__storage + 8);
  }
  ::rs::std::io::Error const* err_const_ptr() const noexcept {
    return reinterpret_cast<::rs::std::io::Error const*>(__storage + 8);
  }
  void set_ok_tag() noexcept { set_tag(0); }
  void set_err_tag() noexcept { set_tag(1); }
  constexpr ::std::uint8_t tag() const& noexcept;
  constexpr void set_tag(::std::uint8_t tag) noexcept;

 private:
  unsigned char __storage[16];
};
#endif

#ifndef _CRUBIT_BINDINGS_FOR_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020core_x00000020_x0000003a_x0000003a_x00000020net_x00000020_x0000003a_x0000003a_x00000020SocketAddr_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020core_x00000020_x0000003a_x0000003a_x00000020net_x00000020_x0000003a_x0000003a_x00000020SocketAddr_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
template <>
struct alignas(8) CRUBIT_INTERNAL_RUST_TYPE(
    "std :: result :: Result < :: core :: net :: SocketAddr , :: std :: io :: "
    "Error >") rs_std::Result<::rs::core::net::SocketAddr, ::rs::std::io::Error>
    : public rs_std::ResultBase<
          rs_std::Result<::rs::core::net::SocketAddr, ::rs::std::io::Error>,
          ::rs::core::net::SocketAddr, ::rs::std::io::Error> {
 public:
  // `core::result::Result` doesn't implement the `Clone` trait
  Result(const Result&) = delete;
  Result& operator=(const Result&) = delete;
  // C++ move operations are unavailable for this type. See
  // http://crubit.rs/rust/movable_types for an explanation of Rust types that
  // are C++ movable.
  Result(Result&&) = delete;
  rs_std::Result<::rs::core::net::SocketAddr, ::rs::std::io::Error>& operator=(
      Result&&) = delete;
  Result(::crubit::UnsafeRelocateTag, Result&& value);

 public:
  using base_type = rs_std::ResultBase<
      rs_std::Result<::rs::core::net::SocketAddr, ::rs::std::io::Error>,
      ::rs::core::net::SocketAddr, ::rs::std::io::Error>;
  template <typename U>
    requires(rs_std::ResultForwardConstructible<Result,
                                                ::rs::core::net::SocketAddr, U>)
  explicit constexpr Result(U&& ok) noexcept;
  template <typename U>
    requires(rs_std::ResultForwardConstructible<Result,
                                                ::rs::core::net::SocketAddr, U>)
  constexpr Result& operator=(U&& ok) noexcept;
  template <typename F>
    requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
  explicit constexpr Result(rs_std::unexpected<F>&& err) noexcept;
  template <typename F>
    requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
  constexpr Result& operator=(rs_std::unexpected<F>&& err) noexcept;
  template <typename... Args>
  explicit constexpr Result(::std::in_place_t ip, Args&&... args) noexcept;
  template <typename... Args>
  explicit constexpr Result(rs_std::unexpect_t u, Args&&... args) noexcept;
  ~Result() noexcept;

 private:
  friend base_type;
  bool has_value_impl() const noexcept { return tag() != 2; }
  ::rs::core::net::SocketAddr* ok_ptr() noexcept {
    return reinterpret_cast<::rs::core::net::SocketAddr*>(__storage);
  }
  ::rs::core::net::SocketAddr const* ok_const_ptr() const noexcept {
    return reinterpret_cast<::rs::core::net::SocketAddr const*>(__storage);
  }
  ::rs::std::io::Error* err_ptr() noexcept {
    return reinterpret_cast<::rs::std::io::Error*>(__storage + 8);
  }
  ::rs::std::io::Error const* err_const_ptr() const noexcept {
    return reinterpret_cast<::rs::std::io::Error const*>(__storage + 8);
  }
  void set_ok_tag() noexcept {}
  void set_err_tag() noexcept { set_tag(2); }
  constexpr ::std::uint16_t tag() const& noexcept;
  constexpr void set_tag(::std::uint16_t tag) noexcept;

 private:
  unsigned char __storage[32];
};
#endif

#ifndef _CRUBIT_BINDINGS_FOR_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020rs_ustd_x00000020_x0000003a_x0000003a_x00000020Option_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020core_x00000020_x0000003a_x0000003a_x00000020time_x00000020_x0000003a_x0000003a_x00000020Duration_x00000020_x0000003e_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020rs_ustd_x00000020_x0000003a_x0000003a_x00000020Option_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020core_x00000020_x0000003a_x0000003a_x00000020time_x00000020_x0000003a_x0000003a_x00000020Duration_x00000020_x0000003e_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
template <>
struct alignas(8) CRUBIT_INTERNAL_RUST_TYPE(
    "std :: result :: Result < :: core :: option :: Option < :: core :: time "
    ":: Duration > , :: std :: io :: Error >")
    rs_std::Result<rs_std::Option<::rs::core::time::Duration>,
                   ::rs::std::io::Error>
    : public rs_std::ResultBase<
          rs_std::Result<rs_std::Option<::rs::core::time::Duration>,
                         ::rs::std::io::Error>,
          rs_std::Option<::rs::core::time::Duration>, ::rs::std::io::Error> {
 public:
  // `core::result::Result` doesn't implement the `Clone` trait
  Result(const Result&) = delete;
  Result& operator=(const Result&) = delete;
  // C++ move operations are unavailable for this type. See
  // http://crubit.rs/rust/movable_types for an explanation of Rust types that
  // are C++ movable.
  Result(Result&&) = delete;
  rs_std::Result<rs_std::Option<::rs::core::time::Duration>,
                 ::rs::std::io::Error>&
  operator=(Result&&) = delete;
  Result(::crubit::UnsafeRelocateTag, Result&& value);

 public:
  using base_type = rs_std::ResultBase<
      rs_std::Result<rs_std::Option<::rs::core::time::Duration>,
                     ::rs::std::io::Error>,
      rs_std::Option<::rs::core::time::Duration>, ::rs::std::io::Error>;
  template <typename U>
    requires(rs_std::ResultForwardConstructible<
             Result, rs_std::Option<::rs::core::time::Duration>, U>)
  explicit constexpr Result(U&& ok) noexcept;
  template <typename U>
    requires(rs_std::ResultForwardConstructible<
             Result, rs_std::Option<::rs::core::time::Duration>, U>)
  constexpr Result& operator=(U&& ok) noexcept;
  template <typename F>
    requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
  explicit constexpr Result(rs_std::unexpected<F>&& err) noexcept;
  template <typename F>
    requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
  constexpr Result& operator=(rs_std::unexpected<F>&& err) noexcept;
  template <typename... Args>
  explicit constexpr Result(::std::in_place_t ip, Args&&... args) noexcept;
  template <typename... Args>
  explicit constexpr Result(rs_std::unexpect_t u, Args&&... args) noexcept;
  ~Result() noexcept;

 private:
  friend base_type;
  bool has_value_impl() const noexcept { return tag() != UINT32_C(4294967294); }
  rs_std::Option<::rs::core::time::Duration>* ok_ptr() noexcept {
    return reinterpret_cast<rs_std::Option<::rs::core::time::Duration>*>(
        __storage);
  }
  rs_std::Option<::rs::core::time::Duration> const* ok_const_ptr()
      const noexcept {
    return reinterpret_cast<rs_std::Option<::rs::core::time::Duration> const*>(
        __storage);
  }
  ::rs::std::io::Error* err_ptr() noexcept {
    return reinterpret_cast<::rs::std::io::Error*>(__storage + 0);
  }
  ::rs::std::io::Error const* err_const_ptr() const noexcept {
    return reinterpret_cast<::rs::std::io::Error const*>(__storage + 0);
  }
  void set_ok_tag() noexcept {}
  void set_err_tag() noexcept { set_tag(UINT32_C(4294967294)); }
  constexpr ::std::uint32_t tag() const& noexcept;
  constexpr void set_tag(::std::uint32_t tag) noexcept;

 private:
  unsigned char __storage[16];
};
#endif

#ifndef _CRUBIT_BINDINGS_FOR_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020rs_ustd_x00000020_x0000003a_x0000003a_x00000020Option_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020process_x00000020_x0000003a_x0000003a_x00000020ExitStatus_x00000020_x0000003e_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020rs_ustd_x00000020_x0000003a_x0000003a_x00000020Option_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020process_x00000020_x0000003a_x0000003a_x00000020ExitStatus_x00000020_x0000003e_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
template <>
struct alignas(8) CRUBIT_INTERNAL_RUST_TYPE(
    "std :: result :: Result < :: core :: option :: Option < :: std :: process "
    ":: ExitStatus > , :: std :: io :: Error >")
    rs_std::Result<rs_std::Option<::rs::std::process::ExitStatus>,
                   ::rs::std::io::Error>
    : public rs_std::ResultBase<
          rs_std::Result<rs_std::Option<::rs::std::process::ExitStatus>,
                         ::rs::std::io::Error>,
          rs_std::Option<::rs::std::process::ExitStatus>,
          ::rs::std::io::Error> {
 public:
  // `core::result::Result` doesn't implement the `Clone` trait
  Result(const Result&) = delete;
  Result& operator=(const Result&) = delete;
  // C++ move operations are unavailable for this type. See
  // http://crubit.rs/rust/movable_types for an explanation of Rust types that
  // are C++ movable.
  Result(Result&&) = delete;
  rs_std::Result<rs_std::Option<::rs::std::process::ExitStatus>,
                 ::rs::std::io::Error>&
  operator=(Result&&) = delete;
  Result(::crubit::UnsafeRelocateTag, Result&& value);

 public:
  using base_type = rs_std::ResultBase<
      rs_std::Result<rs_std::Option<::rs::std::process::ExitStatus>,
                     ::rs::std::io::Error>,
      rs_std::Option<::rs::std::process::ExitStatus>, ::rs::std::io::Error>;
  template <typename U>
    requires(rs_std::ResultForwardConstructible<
             Result, rs_std::Option<::rs::std::process::ExitStatus>, U>)
  explicit constexpr Result(U&& ok) noexcept;
  template <typename U>
    requires(rs_std::ResultForwardConstructible<
             Result, rs_std::Option<::rs::std::process::ExitStatus>, U>)
  constexpr Result& operator=(U&& ok) noexcept;
  template <typename F>
    requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
  explicit constexpr Result(rs_std::unexpected<F>&& err) noexcept;
  template <typename F>
    requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
  constexpr Result& operator=(rs_std::unexpected<F>&& err) noexcept;
  template <typename... Args>
  explicit constexpr Result(::std::in_place_t ip, Args&&... args) noexcept;
  template <typename... Args>
  explicit constexpr Result(rs_std::unexpect_t u, Args&&... args) noexcept;
  ~Result() noexcept;

 private:
  friend base_type;
  bool has_value_impl() const noexcept { return tag() == 0; }
  rs_std::Option<::rs::std::process::ExitStatus>* ok_ptr() noexcept {
    return reinterpret_cast<rs_std::Option<::rs::std::process::ExitStatus>*>(
        __storage + 4);
  }
  rs_std::Option<::rs::std::process::ExitStatus> const* ok_const_ptr()
      const noexcept {
    return reinterpret_cast<
        rs_std::Option<::rs::std::process::ExitStatus> const*>(__storage + 4);
  }
  ::rs::std::io::Error* err_ptr() noexcept {
    return reinterpret_cast<::rs::std::io::Error*>(__storage + 8);
  }
  ::rs::std::io::Error const* err_const_ptr() const noexcept {
    return reinterpret_cast<::rs::std::io::Error const*>(__storage + 8);
  }
  void set_ok_tag() noexcept { set_tag(0); }
  void set_err_tag() noexcept { set_tag(1); }
  constexpr ::std::uint32_t tag() const& noexcept;
  constexpr void set_tag(::std::uint32_t tag) noexcept;

 private:
  unsigned char __storage[16];
};
#endif

#ifndef _CRUBIT_BINDINGS_FOR_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020core_x00000020_x0000003a_x0000003a_x00000020time_x00000020_x0000003a_x0000003a_x00000020Duration_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020time_x00000020_x0000003a_x0000003a_x00000020SystemTimeError_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020core_x00000020_x0000003a_x0000003a_x00000020time_x00000020_x0000003a_x0000003a_x00000020Duration_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020time_x00000020_x0000003a_x0000003a_x00000020SystemTimeError_x00000020_x0000003e
template <>
struct alignas(8) CRUBIT_INTERNAL_RUST_TYPE(
    "std :: result :: Result < :: core :: time :: Duration , :: std :: time :: "
    "SystemTimeError >")
    rs_std::Result<::rs::core::time::Duration, ::rs::std::time::SystemTimeError>
    : public rs_std::ResultBase<
          rs_std::Result<::rs::core::time::Duration,
                         ::rs::std::time::SystemTimeError>,
          ::rs::core::time::Duration, ::rs::std::time::SystemTimeError> {
 public:
  // Clone::clone
  Result(const Result&);

  // Clone::clone_from
  rs_std::Result<::rs::core::time::Duration, ::rs::std::time::SystemTimeError>&
  operator=(const Result&);

  Result(Result&&) = default;
  Result& operator=(Result&&) = default;

  Result(::crubit::UnsafeRelocateTag, Result&& value);

 public:
  using base_type =
      rs_std::ResultBase<rs_std::Result<::rs::core::time::Duration,
                                        ::rs::std::time::SystemTimeError>,
                         ::rs::core::time::Duration,
                         ::rs::std::time::SystemTimeError>;
  template <typename U>
    requires(rs_std::ResultForwardConstructible<Result,
                                                ::rs::core::time::Duration, U>)
  explicit constexpr Result(U&& ok) noexcept;
  template <typename U>
    requires(rs_std::ResultForwardConstructible<Result,
                                                ::rs::core::time::Duration, U>)
  constexpr Result& operator=(U&& ok) noexcept;
  template <typename F>
    requires(rs_std::ResultUnexpectedConstructible<
             ::rs::std::time::SystemTimeError, F>)
  explicit constexpr Result(rs_std::unexpected<F>&& err) noexcept;
  template <typename F>
    requires(rs_std::ResultUnexpectedConstructible<
             ::rs::std::time::SystemTimeError, F>)
  constexpr Result& operator=(rs_std::unexpected<F>&& err) noexcept;
  template <typename... Args>
  explicit constexpr Result(::std::in_place_t ip, Args&&... args) noexcept;
  template <typename... Args>
  explicit constexpr Result(rs_std::unexpect_t u, Args&&... args) noexcept;
  ~Result() noexcept = default;

 private:
  friend base_type;
  bool has_value_impl() const noexcept { return tag() == 0; }
  ::rs::core::time::Duration* ok_ptr() noexcept {
    return reinterpret_cast<::rs::core::time::Duration*>(__storage + 8);
  }
  ::rs::core::time::Duration const* ok_const_ptr() const noexcept {
    return reinterpret_cast<::rs::core::time::Duration const*>(__storage + 8);
  }
  ::rs::std::time::SystemTimeError* err_ptr() noexcept {
    return reinterpret_cast<::rs::std::time::SystemTimeError*>(__storage + 8);
  }
  ::rs::std::time::SystemTimeError const* err_const_ptr() const noexcept {
    return reinterpret_cast<::rs::std::time::SystemTimeError const*>(__storage +
                                                                     8);
  }
  void set_ok_tag() noexcept { set_tag(0); }
  void set_err_tag() noexcept { set_tag(1); }
  constexpr ::std::uint64_t tag() const& noexcept;
  constexpr void set_tag(::std::uint64_t tag) noexcept;

 private:
  unsigned char __storage[24];
};
#endif

#ifndef _CRUBIT_BINDINGS_FOR_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020fs_x00000020_x0000003a_x0000003a_x00000020DirEntry_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020fs_x00000020_x0000003a_x0000003a_x00000020DirEntry_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
template <>
struct alignas(8) CRUBIT_INTERNAL_RUST_TYPE(
    "std :: result :: Result < :: std :: fs :: DirEntry , :: std :: io :: "
    "Error >") rs_std::Result<::rs::std::fs::DirEntry, ::rs::std::io::Error>
    : public rs_std::ResultBase<
          rs_std::Result<::rs::std::fs::DirEntry, ::rs::std::io::Error>,
          ::rs::std::fs::DirEntry, ::rs::std::io::Error> {
 public:
  // `core::result::Result` doesn't implement the `Clone` trait
  Result(const Result&) = delete;
  Result& operator=(const Result&) = delete;
  // C++ move operations are unavailable for this type. See
  // http://crubit.rs/rust/movable_types for an explanation of Rust types that
  // are C++ movable.
  Result(Result&&) = delete;
  rs_std::Result<::rs::std::fs::DirEntry, ::rs::std::io::Error>& operator=(
      Result&&) = delete;
  Result(::crubit::UnsafeRelocateTag, Result&& value);

 public:
  using base_type = rs_std::ResultBase<
      rs_std::Result<::rs::std::fs::DirEntry, ::rs::std::io::Error>,
      ::rs::std::fs::DirEntry, ::rs::std::io::Error>;
  template <typename U>
    requires(
        rs_std::ResultForwardConstructible<Result, ::rs::std::fs::DirEntry, U>)
  explicit constexpr Result(U&& ok) noexcept;
  template <typename U>
    requires(
        rs_std::ResultForwardConstructible<Result, ::rs::std::fs::DirEntry, U>)
  constexpr Result& operator=(U&& ok) noexcept;
  template <typename F>
    requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
  explicit constexpr Result(rs_std::unexpected<F>&& err) noexcept;
  template <typename F>
    requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
  constexpr Result& operator=(rs_std::unexpected<F>&& err) noexcept;
  template <typename... Args>
  explicit constexpr Result(::std::in_place_t ip, Args&&... args) noexcept;
  template <typename... Args>
  explicit constexpr Result(rs_std::unexpect_t u, Args&&... args) noexcept;
  ~Result() noexcept;

 private:
  friend base_type;
  bool has_value_impl() const noexcept { return tag() != 0; }
  ::rs::std::fs::DirEntry* ok_ptr() noexcept {
    return reinterpret_cast<::rs::std::fs::DirEntry*>(__storage);
  }
  ::rs::std::fs::DirEntry const* ok_const_ptr() const noexcept {
    return reinterpret_cast<::rs::std::fs::DirEntry const*>(__storage);
  }
  ::rs::std::io::Error* err_ptr() noexcept {
    return reinterpret_cast<::rs::std::io::Error*>(__storage + 8);
  }
  ::rs::std::io::Error const* err_const_ptr() const noexcept {
    return reinterpret_cast<::rs::std::io::Error const*>(__storage + 8);
  }
  void set_ok_tag() noexcept {}
  void set_err_tag() noexcept { set_tag(0); }
  constexpr ::std::uint64_t tag() const& noexcept;
  constexpr void set_tag(::std::uint64_t tag) noexcept;

 private:
  unsigned char __storage[40];
};
#endif

#ifndef _CRUBIT_BINDINGS_FOR_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020fs_x00000020_x0000003a_x0000003a_x00000020File_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020fs_x00000020_x0000003a_x0000003a_x00000020File_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
template <>
struct alignas(8) CRUBIT_INTERNAL_RUST_TYPE(
    "std :: result :: Result < :: std :: fs :: File , :: std :: io :: Error >")
    rs_std::Result<::rs::std::fs::File, ::rs::std::io::Error>
    : public rs_std::ResultBase<
          rs_std::Result<::rs::std::fs::File, ::rs::std::io::Error>,
          ::rs::std::fs::File, ::rs::std::io::Error> {
 public:
  // `core::result::Result` doesn't implement the `Clone` trait
  Result(const Result&) = delete;
  Result& operator=(const Result&) = delete;
  // C++ move operations are unavailable for this type. See
  // http://crubit.rs/rust/movable_types for an explanation of Rust types that
  // are C++ movable.
  Result(Result&&) = delete;
  rs_std::Result<::rs::std::fs::File, ::rs::std::io::Error>& operator=(
      Result&&) = delete;
  Result(::crubit::UnsafeRelocateTag, Result&& value);

 public:
  using base_type = rs_std::ResultBase<
      rs_std::Result<::rs::std::fs::File, ::rs::std::io::Error>,
      ::rs::std::fs::File, ::rs::std::io::Error>;
  template <typename U>
    requires(rs_std::ResultForwardConstructible<Result, ::rs::std::fs::File, U>)
  explicit constexpr Result(U&& ok) noexcept;
  template <typename U>
    requires(rs_std::ResultForwardConstructible<Result, ::rs::std::fs::File, U>)
  constexpr Result& operator=(U&& ok) noexcept;
  template <typename F>
    requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
  explicit constexpr Result(rs_std::unexpected<F>&& err) noexcept;
  template <typename F>
    requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
  constexpr Result& operator=(rs_std::unexpected<F>&& err) noexcept;
  template <typename... Args>
  explicit constexpr Result(::std::in_place_t ip, Args&&... args) noexcept;
  template <typename... Args>
  explicit constexpr Result(rs_std::unexpect_t u, Args&&... args) noexcept;
  ~Result() noexcept;

 private:
  friend base_type;
  bool has_value_impl() const noexcept { return tag() == 0; }
  ::rs::std::fs::File* ok_ptr() noexcept {
    return reinterpret_cast<::rs::std::fs::File*>(__storage + 4);
  }
  ::rs::std::fs::File const* ok_const_ptr() const noexcept {
    return reinterpret_cast<::rs::std::fs::File const*>(__storage + 4);
  }
  ::rs::std::io::Error* err_ptr() noexcept {
    return reinterpret_cast<::rs::std::io::Error*>(__storage + 8);
  }
  ::rs::std::io::Error const* err_const_ptr() const noexcept {
    return reinterpret_cast<::rs::std::io::Error const*>(__storage + 8);
  }
  void set_ok_tag() noexcept { set_tag(0); }
  void set_err_tag() noexcept { set_tag(1); }
  constexpr ::std::uint32_t tag() const& noexcept;
  constexpr void set_tag(::std::uint32_t tag) noexcept;

 private:
  unsigned char __storage[16];
};
#endif

#ifndef _CRUBIT_BINDINGS_FOR_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020fs_x00000020_x0000003a_x0000003a_x00000020FileType_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020fs_x00000020_x0000003a_x0000003a_x00000020FileType_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
template <>
struct alignas(8) CRUBIT_INTERNAL_RUST_TYPE(
    "std :: result :: Result < :: std :: fs :: FileType , :: std :: io :: "
    "Error >") rs_std::Result<::rs::std::fs::FileType, ::rs::std::io::Error>
    : public rs_std::ResultBase<
          rs_std::Result<::rs::std::fs::FileType, ::rs::std::io::Error>,
          ::rs::std::fs::FileType, ::rs::std::io::Error> {
 public:
  // `core::result::Result` doesn't implement the `Clone` trait
  Result(const Result&) = delete;
  Result& operator=(const Result&) = delete;
  // C++ move operations are unavailable for this type. See
  // http://crubit.rs/rust/movable_types for an explanation of Rust types that
  // are C++ movable.
  Result(Result&&) = delete;
  rs_std::Result<::rs::std::fs::FileType, ::rs::std::io::Error>& operator=(
      Result&&) = delete;
  Result(::crubit::UnsafeRelocateTag, Result&& value);

 public:
  using base_type = rs_std::ResultBase<
      rs_std::Result<::rs::std::fs::FileType, ::rs::std::io::Error>,
      ::rs::std::fs::FileType, ::rs::std::io::Error>;
  template <typename U>
    requires(
        rs_std::ResultForwardConstructible<Result, ::rs::std::fs::FileType, U>)
  explicit constexpr Result(U&& ok) noexcept;
  template <typename U>
    requires(
        rs_std::ResultForwardConstructible<Result, ::rs::std::fs::FileType, U>)
  constexpr Result& operator=(U&& ok) noexcept;
  template <typename F>
    requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
  explicit constexpr Result(rs_std::unexpected<F>&& err) noexcept;
  template <typename F>
    requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
  constexpr Result& operator=(rs_std::unexpected<F>&& err) noexcept;
  template <typename... Args>
  explicit constexpr Result(::std::in_place_t ip, Args&&... args) noexcept;
  template <typename... Args>
  explicit constexpr Result(rs_std::unexpect_t u, Args&&... args) noexcept;
  ~Result() noexcept;

 private:
  friend base_type;
  bool has_value_impl() const noexcept { return tag() == 0; }
  ::rs::std::fs::FileType* ok_ptr() noexcept {
    return reinterpret_cast<::rs::std::fs::FileType*>(__storage + 4);
  }
  ::rs::std::fs::FileType const* ok_const_ptr() const noexcept {
    return reinterpret_cast<::rs::std::fs::FileType const*>(__storage + 4);
  }
  ::rs::std::io::Error* err_ptr() noexcept {
    return reinterpret_cast<::rs::std::io::Error*>(__storage + 8);
  }
  ::rs::std::io::Error const* err_const_ptr() const noexcept {
    return reinterpret_cast<::rs::std::io::Error const*>(__storage + 8);
  }
  void set_ok_tag() noexcept { set_tag(0); }
  void set_err_tag() noexcept { set_tag(1); }
  constexpr ::std::uint32_t tag() const& noexcept;
  constexpr void set_tag(::std::uint32_t tag) noexcept;

 private:
  unsigned char __storage[16];
};
#endif

#ifndef _CRUBIT_BINDINGS_FOR_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020fs_x00000020_x0000003a_x0000003a_x00000020Metadata_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020fs_x00000020_x0000003a_x0000003a_x00000020Metadata_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
template <>
struct alignas(8) CRUBIT_INTERNAL_RUST_TYPE(
    "std :: result :: Result < :: std :: fs :: Metadata , :: std :: io :: "
    "Error >") rs_std::Result<::rs::std::fs::Metadata, ::rs::std::io::Error>
    : public rs_std::ResultBase<
          rs_std::Result<::rs::std::fs::Metadata, ::rs::std::io::Error>,
          ::rs::std::fs::Metadata, ::rs::std::io::Error> {
 public:
  // `core::result::Result` doesn't implement the `Clone` trait
  Result(const Result&) = delete;
  Result& operator=(const Result&) = delete;
  // C++ move operations are unavailable for this type. See
  // http://crubit.rs/rust/movable_types for an explanation of Rust types that
  // are C++ movable.
  Result(Result&&) = delete;
  rs_std::Result<::rs::std::fs::Metadata, ::rs::std::io::Error>& operator=(
      Result&&) = delete;
  Result(::crubit::UnsafeRelocateTag, Result&& value);

 public:
  using base_type = rs_std::ResultBase<
      rs_std::Result<::rs::std::fs::Metadata, ::rs::std::io::Error>,
      ::rs::std::fs::Metadata, ::rs::std::io::Error>;
  template <typename U>
    requires(
        rs_std::ResultForwardConstructible<Result, ::rs::std::fs::Metadata, U>)
  explicit constexpr Result(U&& ok) noexcept;
  template <typename U>
    requires(
        rs_std::ResultForwardConstructible<Result, ::rs::std::fs::Metadata, U>)
  constexpr Result& operator=(U&& ok) noexcept;
  template <typename F>
    requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
  explicit constexpr Result(rs_std::unexpected<F>&& err) noexcept;
  template <typename F>
    requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
  constexpr Result& operator=(rs_std::unexpected<F>&& err) noexcept;
  template <typename... Args>
  explicit constexpr Result(::std::in_place_t ip, Args&&... args) noexcept;
  template <typename... Args>
  explicit constexpr Result(rs_std::unexpect_t u, Args&&... args) noexcept;
  ~Result() noexcept;

 private:
  friend base_type;
  bool has_value_impl() const noexcept { return tag() == 0; }
  ::rs::std::fs::Metadata* ok_ptr() noexcept {
    return reinterpret_cast<::rs::std::fs::Metadata*>(__storage + 8);
  }
  ::rs::std::fs::Metadata const* ok_const_ptr() const noexcept {
    return reinterpret_cast<::rs::std::fs::Metadata const*>(__storage + 8);
  }
  ::rs::std::io::Error* err_ptr() noexcept {
    return reinterpret_cast<::rs::std::io::Error*>(__storage + 8);
  }
  ::rs::std::io::Error const* err_const_ptr() const noexcept {
    return reinterpret_cast<::rs::std::io::Error const*>(__storage + 8);
  }
  void set_ok_tag() noexcept { set_tag(0); }
  void set_err_tag() noexcept { set_tag(1); }
  constexpr ::std::uint64_t tag() const& noexcept;
  constexpr void set_tag(::std::uint64_t tag) noexcept;

 private:
  unsigned char __storage[136];
};
#endif

#ifndef _CRUBIT_BINDINGS_FOR_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020PipeReader_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020PipeReader_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
template <>
struct alignas(8) CRUBIT_INTERNAL_RUST_TYPE(
    "std :: result :: Result < :: std :: io :: PipeReader , :: std :: io :: "
    "Error >") rs_std::Result<::rs::std::io::PipeReader, ::rs::std::io::Error>
    : public rs_std::ResultBase<
          rs_std::Result<::rs::std::io::PipeReader, ::rs::std::io::Error>,
          ::rs::std::io::PipeReader, ::rs::std::io::Error> {
 public:
  // `core::result::Result` doesn't implement the `Clone` trait
  Result(const Result&) = delete;
  Result& operator=(const Result&) = delete;
  // C++ move operations are unavailable for this type. See
  // http://crubit.rs/rust/movable_types for an explanation of Rust types that
  // are C++ movable.
  Result(Result&&) = delete;
  rs_std::Result<::rs::std::io::PipeReader, ::rs::std::io::Error>& operator=(
      Result&&) = delete;
  Result(::crubit::UnsafeRelocateTag, Result&& value);

 public:
  using base_type = rs_std::ResultBase<
      rs_std::Result<::rs::std::io::PipeReader, ::rs::std::io::Error>,
      ::rs::std::io::PipeReader, ::rs::std::io::Error>;
  template <typename U>
    requires(rs_std::ResultForwardConstructible<Result,
                                                ::rs::std::io::PipeReader, U>)
  explicit constexpr Result(U&& ok) noexcept;
  template <typename U>
    requires(rs_std::ResultForwardConstructible<Result,
                                                ::rs::std::io::PipeReader, U>)
  constexpr Result& operator=(U&& ok) noexcept;
  template <typename F>
    requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
  explicit constexpr Result(rs_std::unexpected<F>&& err) noexcept;
  template <typename F>
    requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
  constexpr Result& operator=(rs_std::unexpected<F>&& err) noexcept;
  template <typename... Args>
  explicit constexpr Result(::std::in_place_t ip, Args&&... args) noexcept;
  template <typename... Args>
  explicit constexpr Result(rs_std::unexpect_t u, Args&&... args) noexcept;
  ~Result() noexcept;

 private:
  friend base_type;
  bool has_value_impl() const noexcept { return tag() == 0; }
  ::rs::std::io::PipeReader* ok_ptr() noexcept {
    return reinterpret_cast<::rs::std::io::PipeReader*>(__storage + 4);
  }
  ::rs::std::io::PipeReader const* ok_const_ptr() const noexcept {
    return reinterpret_cast<::rs::std::io::PipeReader const*>(__storage + 4);
  }
  ::rs::std::io::Error* err_ptr() noexcept {
    return reinterpret_cast<::rs::std::io::Error*>(__storage + 8);
  }
  ::rs::std::io::Error const* err_const_ptr() const noexcept {
    return reinterpret_cast<::rs::std::io::Error const*>(__storage + 8);
  }
  void set_ok_tag() noexcept { set_tag(0); }
  void set_err_tag() noexcept { set_tag(1); }
  constexpr ::std::uint32_t tag() const& noexcept;
  constexpr void set_tag(::std::uint32_t tag) noexcept;

 private:
  unsigned char __storage[16];
};
#endif

#ifndef _CRUBIT_BINDINGS_FOR_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020PipeWriter_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020PipeWriter_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
template <>
struct alignas(8) CRUBIT_INTERNAL_RUST_TYPE(
    "std :: result :: Result < :: std :: io :: PipeWriter , :: std :: io :: "
    "Error >") rs_std::Result<::rs::std::io::PipeWriter, ::rs::std::io::Error>
    : public rs_std::ResultBase<
          rs_std::Result<::rs::std::io::PipeWriter, ::rs::std::io::Error>,
          ::rs::std::io::PipeWriter, ::rs::std::io::Error> {
 public:
  // `core::result::Result` doesn't implement the `Clone` trait
  Result(const Result&) = delete;
  Result& operator=(const Result&) = delete;
  // C++ move operations are unavailable for this type. See
  // http://crubit.rs/rust/movable_types for an explanation of Rust types that
  // are C++ movable.
  Result(Result&&) = delete;
  rs_std::Result<::rs::std::io::PipeWriter, ::rs::std::io::Error>& operator=(
      Result&&) = delete;
  Result(::crubit::UnsafeRelocateTag, Result&& value);

 public:
  using base_type = rs_std::ResultBase<
      rs_std::Result<::rs::std::io::PipeWriter, ::rs::std::io::Error>,
      ::rs::std::io::PipeWriter, ::rs::std::io::Error>;
  template <typename U>
    requires(rs_std::ResultForwardConstructible<Result,
                                                ::rs::std::io::PipeWriter, U>)
  explicit constexpr Result(U&& ok) noexcept;
  template <typename U>
    requires(rs_std::ResultForwardConstructible<Result,
                                                ::rs::std::io::PipeWriter, U>)
  constexpr Result& operator=(U&& ok) noexcept;
  template <typename F>
    requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
  explicit constexpr Result(rs_std::unexpected<F>&& err) noexcept;
  template <typename F>
    requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
  constexpr Result& operator=(rs_std::unexpected<F>&& err) noexcept;
  template <typename... Args>
  explicit constexpr Result(::std::in_place_t ip, Args&&... args) noexcept;
  template <typename... Args>
  explicit constexpr Result(rs_std::unexpect_t u, Args&&... args) noexcept;
  ~Result() noexcept;

 private:
  friend base_type;
  bool has_value_impl() const noexcept { return tag() == 0; }
  ::rs::std::io::PipeWriter* ok_ptr() noexcept {
    return reinterpret_cast<::rs::std::io::PipeWriter*>(__storage + 4);
  }
  ::rs::std::io::PipeWriter const* ok_const_ptr() const noexcept {
    return reinterpret_cast<::rs::std::io::PipeWriter const*>(__storage + 4);
  }
  ::rs::std::io::Error* err_ptr() noexcept {
    return reinterpret_cast<::rs::std::io::Error*>(__storage + 8);
  }
  ::rs::std::io::Error const* err_const_ptr() const noexcept {
    return reinterpret_cast<::rs::std::io::Error const*>(__storage + 8);
  }
  void set_ok_tag() noexcept { set_tag(0); }
  void set_err_tag() noexcept { set_tag(1); }
  constexpr ::std::uint32_t tag() const& noexcept;
  constexpr void set_tag(::std::uint32_t tag) noexcept;

 private:
  unsigned char __storage[16];
};
#endif

#ifndef _CRUBIT_BINDINGS_FOR_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020net_x00000020_x0000003a_x0000003a_x00000020TcpListener_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020net_x00000020_x0000003a_x0000003a_x00000020TcpListener_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
template <>
struct alignas(8) CRUBIT_INTERNAL_RUST_TYPE(
    "std :: result :: Result < :: std :: net :: TcpListener , :: std :: io :: "
    "Error >") rs_std::Result<::rs::std::net::TcpListener, ::rs::std::io::Error>
    : public rs_std::ResultBase<
          rs_std::Result<::rs::std::net::TcpListener, ::rs::std::io::Error>,
          ::rs::std::net::TcpListener, ::rs::std::io::Error> {
 public:
  // `core::result::Result` doesn't implement the `Clone` trait
  Result(const Result&) = delete;
  Result& operator=(const Result&) = delete;
  // C++ move operations are unavailable for this type. See
  // http://crubit.rs/rust/movable_types for an explanation of Rust types that
  // are C++ movable.
  Result(Result&&) = delete;
  rs_std::Result<::rs::std::net::TcpListener, ::rs::std::io::Error>& operator=(
      Result&&) = delete;
  Result(::crubit::UnsafeRelocateTag, Result&& value);

 public:
  using base_type = rs_std::ResultBase<
      rs_std::Result<::rs::std::net::TcpListener, ::rs::std::io::Error>,
      ::rs::std::net::TcpListener, ::rs::std::io::Error>;
  template <typename U>
    requires(rs_std::ResultForwardConstructible<Result,
                                                ::rs::std::net::TcpListener, U>)
  explicit constexpr Result(U&& ok) noexcept;
  template <typename U>
    requires(rs_std::ResultForwardConstructible<Result,
                                                ::rs::std::net::TcpListener, U>)
  constexpr Result& operator=(U&& ok) noexcept;
  template <typename F>
    requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
  explicit constexpr Result(rs_std::unexpected<F>&& err) noexcept;
  template <typename F>
    requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
  constexpr Result& operator=(rs_std::unexpected<F>&& err) noexcept;
  template <typename... Args>
  explicit constexpr Result(::std::in_place_t ip, Args&&... args) noexcept;
  template <typename... Args>
  explicit constexpr Result(rs_std::unexpect_t u, Args&&... args) noexcept;
  ~Result() noexcept;

 private:
  friend base_type;
  bool has_value_impl() const noexcept { return tag() == 0; }
  ::rs::std::net::TcpListener* ok_ptr() noexcept {
    return reinterpret_cast<::rs::std::net::TcpListener*>(__storage + 4);
  }
  ::rs::std::net::TcpListener const* ok_const_ptr() const noexcept {
    return reinterpret_cast<::rs::std::net::TcpListener const*>(__storage + 4);
  }
  ::rs::std::io::Error* err_ptr() noexcept {
    return reinterpret_cast<::rs::std::io::Error*>(__storage + 8);
  }
  ::rs::std::io::Error const* err_const_ptr() const noexcept {
    return reinterpret_cast<::rs::std::io::Error const*>(__storage + 8);
  }
  void set_ok_tag() noexcept { set_tag(0); }
  void set_err_tag() noexcept { set_tag(1); }
  constexpr ::std::uint32_t tag() const& noexcept;
  constexpr void set_tag(::std::uint32_t tag) noexcept;

 private:
  unsigned char __storage[16];
};
#endif

#ifndef _CRUBIT_BINDINGS_FOR_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020net_x00000020_x0000003a_x0000003a_x00000020TcpStream_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020net_x00000020_x0000003a_x0000003a_x00000020TcpStream_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
template <>
struct alignas(8) CRUBIT_INTERNAL_RUST_TYPE(
    "std :: result :: Result < :: std :: net :: TcpStream , :: std :: io :: "
    "Error >") rs_std::Result<::rs::std::net::TcpStream, ::rs::std::io::Error>
    : public rs_std::ResultBase<
          rs_std::Result<::rs::std::net::TcpStream, ::rs::std::io::Error>,
          ::rs::std::net::TcpStream, ::rs::std::io::Error> {
 public:
  // `core::result::Result` doesn't implement the `Clone` trait
  Result(const Result&) = delete;
  Result& operator=(const Result&) = delete;
  // C++ move operations are unavailable for this type. See
  // http://crubit.rs/rust/movable_types for an explanation of Rust types that
  // are C++ movable.
  Result(Result&&) = delete;
  rs_std::Result<::rs::std::net::TcpStream, ::rs::std::io::Error>& operator=(
      Result&&) = delete;
  Result(::crubit::UnsafeRelocateTag, Result&& value);

 public:
  using base_type = rs_std::ResultBase<
      rs_std::Result<::rs::std::net::TcpStream, ::rs::std::io::Error>,
      ::rs::std::net::TcpStream, ::rs::std::io::Error>;
  template <typename U>
    requires(rs_std::ResultForwardConstructible<Result,
                                                ::rs::std::net::TcpStream, U>)
  explicit constexpr Result(U&& ok) noexcept;
  template <typename U>
    requires(rs_std::ResultForwardConstructible<Result,
                                                ::rs::std::net::TcpStream, U>)
  constexpr Result& operator=(U&& ok) noexcept;
  template <typename F>
    requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
  explicit constexpr Result(rs_std::unexpected<F>&& err) noexcept;
  template <typename F>
    requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
  constexpr Result& operator=(rs_std::unexpected<F>&& err) noexcept;
  template <typename... Args>
  explicit constexpr Result(::std::in_place_t ip, Args&&... args) noexcept;
  template <typename... Args>
  explicit constexpr Result(rs_std::unexpect_t u, Args&&... args) noexcept;
  ~Result() noexcept;

 private:
  friend base_type;
  bool has_value_impl() const noexcept { return tag() == 0; }
  ::rs::std::net::TcpStream* ok_ptr() noexcept {
    return reinterpret_cast<::rs::std::net::TcpStream*>(__storage + 4);
  }
  ::rs::std::net::TcpStream const* ok_const_ptr() const noexcept {
    return reinterpret_cast<::rs::std::net::TcpStream const*>(__storage + 4);
  }
  ::rs::std::io::Error* err_ptr() noexcept {
    return reinterpret_cast<::rs::std::io::Error*>(__storage + 8);
  }
  ::rs::std::io::Error const* err_const_ptr() const noexcept {
    return reinterpret_cast<::rs::std::io::Error const*>(__storage + 8);
  }
  void set_ok_tag() noexcept { set_tag(0); }
  void set_err_tag() noexcept { set_tag(1); }
  constexpr ::std::uint32_t tag() const& noexcept;
  constexpr void set_tag(::std::uint32_t tag) noexcept;

 private:
  unsigned char __storage[16];
};
#endif

#ifndef _CRUBIT_BINDINGS_FOR_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020net_x00000020_x0000003a_x0000003a_x00000020UdpSocket_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020net_x00000020_x0000003a_x0000003a_x00000020UdpSocket_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
template <>
struct alignas(8) CRUBIT_INTERNAL_RUST_TYPE(
    "std :: result :: Result < :: std :: net :: UdpSocket , :: std :: io :: "
    "Error >") rs_std::Result<::rs::std::net::UdpSocket, ::rs::std::io::Error>
    : public rs_std::ResultBase<
          rs_std::Result<::rs::std::net::UdpSocket, ::rs::std::io::Error>,
          ::rs::std::net::UdpSocket, ::rs::std::io::Error> {
 public:
  // `core::result::Result` doesn't implement the `Clone` trait
  Result(const Result&) = delete;
  Result& operator=(const Result&) = delete;
  // C++ move operations are unavailable for this type. See
  // http://crubit.rs/rust/movable_types for an explanation of Rust types that
  // are C++ movable.
  Result(Result&&) = delete;
  rs_std::Result<::rs::std::net::UdpSocket, ::rs::std::io::Error>& operator=(
      Result&&) = delete;
  Result(::crubit::UnsafeRelocateTag, Result&& value);

 public:
  using base_type = rs_std::ResultBase<
      rs_std::Result<::rs::std::net::UdpSocket, ::rs::std::io::Error>,
      ::rs::std::net::UdpSocket, ::rs::std::io::Error>;
  template <typename U>
    requires(rs_std::ResultForwardConstructible<Result,
                                                ::rs::std::net::UdpSocket, U>)
  explicit constexpr Result(U&& ok) noexcept;
  template <typename U>
    requires(rs_std::ResultForwardConstructible<Result,
                                                ::rs::std::net::UdpSocket, U>)
  constexpr Result& operator=(U&& ok) noexcept;
  template <typename F>
    requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
  explicit constexpr Result(rs_std::unexpected<F>&& err) noexcept;
  template <typename F>
    requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
  constexpr Result& operator=(rs_std::unexpected<F>&& err) noexcept;
  template <typename... Args>
  explicit constexpr Result(::std::in_place_t ip, Args&&... args) noexcept;
  template <typename... Args>
  explicit constexpr Result(rs_std::unexpect_t u, Args&&... args) noexcept;
  ~Result() noexcept;

 private:
  friend base_type;
  bool has_value_impl() const noexcept { return tag() == 0; }
  ::rs::std::net::UdpSocket* ok_ptr() noexcept {
    return reinterpret_cast<::rs::std::net::UdpSocket*>(__storage + 4);
  }
  ::rs::std::net::UdpSocket const* ok_const_ptr() const noexcept {
    return reinterpret_cast<::rs::std::net::UdpSocket const*>(__storage + 4);
  }
  ::rs::std::io::Error* err_ptr() noexcept {
    return reinterpret_cast<::rs::std::io::Error*>(__storage + 8);
  }
  ::rs::std::io::Error const* err_const_ptr() const noexcept {
    return reinterpret_cast<::rs::std::io::Error const*>(__storage + 8);
  }
  void set_ok_tag() noexcept { set_tag(0); }
  void set_err_tag() noexcept { set_tag(1); }
  constexpr ::std::uint32_t tag() const& noexcept;
  constexpr void set_tag(::std::uint32_t tag) noexcept;

 private:
  unsigned char __storage[16];
};
#endif

#ifndef _CRUBIT_BINDINGS_FOR_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020path_x00000020_x0000003a_x0000003a_x00000020PathBuf_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020path_x00000020_x0000003a_x0000003a_x00000020PathBuf_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
template <>
struct alignas(8) CRUBIT_INTERNAL_RUST_TYPE(
    "std :: result :: Result < :: std :: path :: PathBuf , :: std :: io :: "
    "Error >") rs_std::Result<::rs::std::path::PathBuf, ::rs::std::io::Error>
    : public rs_std::ResultBase<
          rs_std::Result<::rs::std::path::PathBuf, ::rs::std::io::Error>,
          ::rs::std::path::PathBuf, ::rs::std::io::Error> {
 public:
  // `core::result::Result` doesn't implement the `Clone` trait
  Result(const Result&) = delete;
  Result& operator=(const Result&) = delete;
  // C++ move operations are unavailable for this type. See
  // http://crubit.rs/rust/movable_types for an explanation of Rust types that
  // are C++ movable.
  Result(Result&&) = delete;
  rs_std::Result<::rs::std::path::PathBuf, ::rs::std::io::Error>& operator=(
      Result&&) = delete;
  Result(::crubit::UnsafeRelocateTag, Result&& value);

 public:
  using base_type = rs_std::ResultBase<
      rs_std::Result<::rs::std::path::PathBuf, ::rs::std::io::Error>,
      ::rs::std::path::PathBuf, ::rs::std::io::Error>;
  template <typename U>
    requires(
        rs_std::ResultForwardConstructible<Result, ::rs::std::path::PathBuf, U>)
  explicit constexpr Result(U&& ok) noexcept;
  template <typename U>
    requires(
        rs_std::ResultForwardConstructible<Result, ::rs::std::path::PathBuf, U>)
  constexpr Result& operator=(U&& ok) noexcept;
  template <typename F>
    requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
  explicit constexpr Result(rs_std::unexpected<F>&& err) noexcept;
  template <typename F>
    requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
  constexpr Result& operator=(rs_std::unexpected<F>&& err) noexcept;
  template <typename... Args>
  explicit constexpr Result(::std::in_place_t ip, Args&&... args) noexcept;
  template <typename... Args>
  explicit constexpr Result(rs_std::unexpect_t u, Args&&... args) noexcept;
  ~Result() noexcept;

 private:
  friend base_type;
  bool has_value_impl() const noexcept {
    return tag() != UINT64_C(18446744073709551615);
  }
  ::rs::std::path::PathBuf* ok_ptr() noexcept {
    return reinterpret_cast<::rs::std::path::PathBuf*>(__storage);
  }
  ::rs::std::path::PathBuf const* ok_const_ptr() const noexcept {
    return reinterpret_cast<::rs::std::path::PathBuf const*>(__storage);
  }
  ::rs::std::io::Error* err_ptr() noexcept {
    return reinterpret_cast<::rs::std::io::Error*>(__storage + 8);
  }
  ::rs::std::io::Error const* err_const_ptr() const noexcept {
    return reinterpret_cast<::rs::std::io::Error const*>(__storage + 8);
  }
  void set_ok_tag() noexcept {}
  void set_err_tag() noexcept { set_tag(UINT64_C(18446744073709551615)); }
  constexpr ::std::uint64_t tag() const& noexcept;
  constexpr void set_tag(::std::uint64_t tag) noexcept;

 private:
  unsigned char __storage[24];
};
#endif

#ifndef _CRUBIT_BINDINGS_FOR_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020process_x00000020_x0000003a_x0000003a_x00000020Child_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020process_x00000020_x0000003a_x0000003a_x00000020Child_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
template <>
struct alignas(8) CRUBIT_INTERNAL_RUST_TYPE(
    "std :: result :: Result < :: std :: process :: Child , :: std :: io :: "
    "Error >") rs_std::Result<::rs::std::process::Child, ::rs::std::io::Error>
    : public rs_std::ResultBase<
          rs_std::Result<::rs::std::process::Child, ::rs::std::io::Error>,
          ::rs::std::process::Child, ::rs::std::io::Error> {
 public:
  // `core::result::Result` doesn't implement the `Clone` trait
  Result(const Result&) = delete;
  Result& operator=(const Result&) = delete;
  // C++ move operations are unavailable for this type. See
  // http://crubit.rs/rust/movable_types for an explanation of Rust types that
  // are C++ movable.
  Result(Result&&) = delete;
  rs_std::Result<::rs::std::process::Child, ::rs::std::io::Error>& operator=(
      Result&&) = delete;
  Result(::crubit::UnsafeRelocateTag, Result&& value);

 public:
  using base_type = rs_std::ResultBase<
      rs_std::Result<::rs::std::process::Child, ::rs::std::io::Error>,
      ::rs::std::process::Child, ::rs::std::io::Error>;
  template <typename U>
    requires(rs_std::ResultForwardConstructible<Result,
                                                ::rs::std::process::Child, U>)
  explicit constexpr Result(U&& ok) noexcept;
  template <typename U>
    requires(rs_std::ResultForwardConstructible<Result,
                                                ::rs::std::process::Child, U>)
  constexpr Result& operator=(U&& ok) noexcept;
  template <typename F>
    requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
  explicit constexpr Result(rs_std::unexpected<F>&& err) noexcept;
  template <typename F>
    requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
  constexpr Result& operator=(rs_std::unexpected<F>&& err) noexcept;
  template <typename... Args>
  explicit constexpr Result(::std::in_place_t ip, Args&&... args) noexcept;
  template <typename... Args>
  explicit constexpr Result(rs_std::unexpect_t u, Args&&... args) noexcept;
  ~Result() noexcept;

 private:
  friend base_type;
  bool has_value_impl() const noexcept { return tag() != 2; }
  ::rs::std::process::Child* ok_ptr() noexcept {
    return reinterpret_cast<::rs::std::process::Child*>(__storage);
  }
  ::rs::std::process::Child const* ok_const_ptr() const noexcept {
    return reinterpret_cast<::rs::std::process::Child const*>(__storage);
  }
  ::rs::std::io::Error* err_ptr() noexcept {
    return reinterpret_cast<::rs::std::io::Error*>(__storage + 8);
  }
  ::rs::std::io::Error const* err_const_ptr() const noexcept {
    return reinterpret_cast<::rs::std::io::Error const*>(__storage + 8);
  }
  void set_ok_tag() noexcept {}
  void set_err_tag() noexcept { set_tag(2); }
  constexpr ::std::uint32_t tag() const& noexcept;
  constexpr void set_tag(::std::uint32_t tag) noexcept;

 private:
  unsigned char __storage[24];
};
#endif

#ifndef _CRUBIT_BINDINGS_FOR_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020process_x00000020_x0000003a_x0000003a_x00000020ExitStatus_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020process_x00000020_x0000003a_x0000003a_x00000020ExitStatus_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
template <>
struct alignas(8) CRUBIT_INTERNAL_RUST_TYPE(
    "std :: result :: Result < :: std :: process :: ExitStatus , :: std :: io "
    ":: Error >")
    rs_std::Result<::rs::std::process::ExitStatus, ::rs::std::io::Error>
    : public rs_std::ResultBase<
          rs_std::Result<::rs::std::process::ExitStatus, ::rs::std::io::Error>,
          ::rs::std::process::ExitStatus, ::rs::std::io::Error> {
 public:
  // `core::result::Result` doesn't implement the `Clone` trait
  Result(const Result&) = delete;
  Result& operator=(const Result&) = delete;
  // C++ move operations are unavailable for this type. See
  // http://crubit.rs/rust/movable_types for an explanation of Rust types that
  // are C++ movable.
  Result(Result&&) = delete;
  rs_std::Result<::rs::std::process::ExitStatus, ::rs::std::io::Error>&
  operator=(Result&&) = delete;
  Result(::crubit::UnsafeRelocateTag, Result&& value);

 public:
  using base_type = rs_std::ResultBase<
      rs_std::Result<::rs::std::process::ExitStatus, ::rs::std::io::Error>,
      ::rs::std::process::ExitStatus, ::rs::std::io::Error>;
  template <typename U>
    requires(rs_std::ResultForwardConstructible<
             Result, ::rs::std::process::ExitStatus, U>)
  explicit constexpr Result(U&& ok) noexcept;
  template <typename U>
    requires(rs_std::ResultForwardConstructible<
             Result, ::rs::std::process::ExitStatus, U>)
  constexpr Result& operator=(U&& ok) noexcept;
  template <typename F>
    requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
  explicit constexpr Result(rs_std::unexpected<F>&& err) noexcept;
  template <typename F>
    requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
  constexpr Result& operator=(rs_std::unexpected<F>&& err) noexcept;
  template <typename... Args>
  explicit constexpr Result(::std::in_place_t ip, Args&&... args) noexcept;
  template <typename... Args>
  explicit constexpr Result(rs_std::unexpect_t u, Args&&... args) noexcept;
  ~Result() noexcept;

 private:
  friend base_type;
  bool has_value_impl() const noexcept { return tag() == 0; }
  ::rs::std::process::ExitStatus* ok_ptr() noexcept {
    return reinterpret_cast<::rs::std::process::ExitStatus*>(__storage + 4);
  }
  ::rs::std::process::ExitStatus const* ok_const_ptr() const noexcept {
    return reinterpret_cast<::rs::std::process::ExitStatus const*>(__storage +
                                                                   4);
  }
  ::rs::std::io::Error* err_ptr() noexcept {
    return reinterpret_cast<::rs::std::io::Error*>(__storage + 8);
  }
  ::rs::std::io::Error const* err_const_ptr() const noexcept {
    return reinterpret_cast<::rs::std::io::Error const*>(__storage + 8);
  }
  void set_ok_tag() noexcept { set_tag(0); }
  void set_err_tag() noexcept { set_tag(1); }
  constexpr ::std::uint32_t tag() const& noexcept;
  constexpr void set_tag(::std::uint32_t tag) noexcept;

 private:
  unsigned char __storage[16];
};
#endif

#ifndef _CRUBIT_BINDINGS_FOR_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020process_x00000020_x0000003a_x0000003a_x00000020Output_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020process_x00000020_x0000003a_x0000003a_x00000020Output_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
template <>
struct alignas(8) CRUBIT_INTERNAL_RUST_TYPE(
    "std :: result :: Result < :: std :: process :: Output , :: std :: io :: "
    "Error >") rs_std::Result<::rs::std::process::Output, ::rs::std::io::Error>
    : public rs_std::ResultBase<
          rs_std::Result<::rs::std::process::Output, ::rs::std::io::Error>,
          ::rs::std::process::Output, ::rs::std::io::Error> {
 public:
  // `core::result::Result` doesn't implement the `Clone` trait
  Result(const Result&) = delete;
  Result& operator=(const Result&) = delete;
  // C++ move operations are unavailable for this type. See
  // http://crubit.rs/rust/movable_types for an explanation of Rust types that
  // are C++ movable.
  Result(Result&&) = delete;
  rs_std::Result<::rs::std::process::Output, ::rs::std::io::Error>& operator=(
      Result&&) = delete;
  Result(::crubit::UnsafeRelocateTag, Result&& value);

 public:
  using base_type = rs_std::ResultBase<
      rs_std::Result<::rs::std::process::Output, ::rs::std::io::Error>,
      ::rs::std::process::Output, ::rs::std::io::Error>;
  template <typename U>
    requires(rs_std::ResultForwardConstructible<Result,
                                                ::rs::std::process::Output, U>)
  explicit constexpr Result(U&& ok) noexcept;
  template <typename U>
    requires(rs_std::ResultForwardConstructible<Result,
                                                ::rs::std::process::Output, U>)
  constexpr Result& operator=(U&& ok) noexcept;
  template <typename F>
    requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
  explicit constexpr Result(rs_std::unexpected<F>&& err) noexcept;
  template <typename F>
    requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
  constexpr Result& operator=(rs_std::unexpected<F>&& err) noexcept;
  template <typename... Args>
  explicit constexpr Result(::std::in_place_t ip, Args&&... args) noexcept;
  template <typename... Args>
  explicit constexpr Result(rs_std::unexpect_t u, Args&&... args) noexcept;
  ~Result() noexcept;

 private:
  friend base_type;
  bool has_value_impl() const noexcept {
    return tag() != UINT64_C(18446744073709551615);
  }
  ::rs::std::process::Output* ok_ptr() noexcept {
    return reinterpret_cast<::rs::std::process::Output*>(__storage);
  }
  ::rs::std::process::Output const* ok_const_ptr() const noexcept {
    return reinterpret_cast<::rs::std::process::Output const*>(__storage);
  }
  ::rs::std::io::Error* err_ptr() noexcept {
    return reinterpret_cast<::rs::std::io::Error*>(__storage + 8);
  }
  ::rs::std::io::Error const* err_const_ptr() const noexcept {
    return reinterpret_cast<::rs::std::io::Error const*>(__storage + 8);
  }
  void set_ok_tag() noexcept {}
  void set_err_tag() noexcept { set_tag(UINT64_C(18446744073709551615)); }
  constexpr ::std::uint64_t tag() const& noexcept;
  constexpr void set_tag(::std::uint64_t tag) noexcept;

 private:
  unsigned char __storage[56];
};
#endif

#ifndef _CRUBIT_BINDINGS_FOR_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020time_x00000020_x0000003a_x0000003a_x00000020SystemTime_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020time_x00000020_x0000003a_x0000003a_x00000020SystemTime_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
template <>
struct alignas(8) CRUBIT_INTERNAL_RUST_TYPE(
    "std :: result :: Result < :: std :: time :: SystemTime , :: std :: io :: "
    "Error >") rs_std::Result<::rs::std::time::SystemTime, ::rs::std::io::Error>
    : public rs_std::ResultBase<
          rs_std::Result<::rs::std::time::SystemTime, ::rs::std::io::Error>,
          ::rs::std::time::SystemTime, ::rs::std::io::Error> {
 public:
  // `core::result::Result` doesn't implement the `Clone` trait
  Result(const Result&) = delete;
  Result& operator=(const Result&) = delete;
  // C++ move operations are unavailable for this type. See
  // http://crubit.rs/rust/movable_types for an explanation of Rust types that
  // are C++ movable.
  Result(Result&&) = delete;
  rs_std::Result<::rs::std::time::SystemTime, ::rs::std::io::Error>& operator=(
      Result&&) = delete;
  Result(::crubit::UnsafeRelocateTag, Result&& value);

 public:
  using base_type = rs_std::ResultBase<
      rs_std::Result<::rs::std::time::SystemTime, ::rs::std::io::Error>,
      ::rs::std::time::SystemTime, ::rs::std::io::Error>;
  template <typename U>
    requires(rs_std::ResultForwardConstructible<Result,
                                                ::rs::std::time::SystemTime, U>)
  explicit constexpr Result(U&& ok) noexcept;
  template <typename U>
    requires(rs_std::ResultForwardConstructible<Result,
                                                ::rs::std::time::SystemTime, U>)
  constexpr Result& operator=(U&& ok) noexcept;
  template <typename F>
    requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
  explicit constexpr Result(rs_std::unexpected<F>&& err) noexcept;
  template <typename F>
    requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
  constexpr Result& operator=(rs_std::unexpected<F>&& err) noexcept;
  template <typename... Args>
  explicit constexpr Result(::std::in_place_t ip, Args&&... args) noexcept;
  template <typename... Args>
  explicit constexpr Result(rs_std::unexpect_t u, Args&&... args) noexcept;
  ~Result() noexcept;

 private:
  friend base_type;
  bool has_value_impl() const noexcept { return tag() != UINT32_C(4294967295); }
  ::rs::std::time::SystemTime* ok_ptr() noexcept {
    return reinterpret_cast<::rs::std::time::SystemTime*>(__storage);
  }
  ::rs::std::time::SystemTime const* ok_const_ptr() const noexcept {
    return reinterpret_cast<::rs::std::time::SystemTime const*>(__storage);
  }
  ::rs::std::io::Error* err_ptr() noexcept {
    return reinterpret_cast<::rs::std::io::Error*>(__storage + 0);
  }
  ::rs::std::io::Error const* err_const_ptr() const noexcept {
    return reinterpret_cast<::rs::std::io::Error const*>(__storage + 0);
  }
  void set_ok_tag() noexcept {}
  void set_err_tag() noexcept { set_tag(UINT32_C(4294967295)); }
  constexpr ::std::uint32_t tag() const& noexcept;
  constexpr void set_tag(::std::uint32_t tag) noexcept;

 private:
  unsigned char __storage[16];
};
#endif

#ifndef _CRUBIT_BINDINGS_FOR_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020uint32_ut_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020uint32_ut_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
template <>
struct alignas(8) CRUBIT_INTERNAL_RUST_TYPE(
    "std :: result :: Result < u32 , :: std :: io :: Error >")
    rs_std::Result<::std::uint32_t, ::rs::std::io::Error>
    : public rs_std::ResultBase<
          rs_std::Result<::std::uint32_t, ::rs::std::io::Error>,
          ::std::uint32_t, ::rs::std::io::Error> {
 public:
  // `core::result::Result` doesn't implement the `Clone` trait
  Result(const Result&) = delete;
  Result& operator=(const Result&) = delete;
  // C++ move operations are unavailable for this type. See
  // http://crubit.rs/rust/movable_types for an explanation of Rust types that
  // are C++ movable.
  Result(Result&&) = delete;
  rs_std::Result<::std::uint32_t, ::rs::std::io::Error>& operator=(Result&&) =
      delete;
  Result(::crubit::UnsafeRelocateTag, Result&& value);

 public:
  using base_type =
      rs_std::ResultBase<rs_std::Result<::std::uint32_t, ::rs::std::io::Error>,
                         ::std::uint32_t, ::rs::std::io::Error>;
  template <typename U>
    requires(rs_std::ResultForwardConstructible<Result, ::std::uint32_t, U>)
  explicit constexpr Result(U&& ok) noexcept;
  template <typename U>
    requires(rs_std::ResultForwardConstructible<Result, ::std::uint32_t, U>)
  constexpr Result& operator=(U&& ok) noexcept;
  template <typename F>
    requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
  explicit constexpr Result(rs_std::unexpected<F>&& err) noexcept;
  template <typename F>
    requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
  constexpr Result& operator=(rs_std::unexpected<F>&& err) noexcept;
  template <typename... Args>
  explicit constexpr Result(::std::in_place_t ip, Args&&... args) noexcept;
  template <typename... Args>
  explicit constexpr Result(rs_std::unexpect_t u, Args&&... args) noexcept;
  ~Result() noexcept;

 private:
  friend base_type;
  bool has_value_impl() const noexcept { return tag() == 0; }
  ::std::uint32_t* ok_ptr() noexcept {
    return reinterpret_cast<::std::uint32_t*>(__storage + 4);
  }
  ::std::uint32_t const* ok_const_ptr() const noexcept {
    return reinterpret_cast<::std::uint32_t const*>(__storage + 4);
  }
  ::rs::std::io::Error* err_ptr() noexcept {
    return reinterpret_cast<::rs::std::io::Error*>(__storage + 8);
  }
  ::rs::std::io::Error const* err_const_ptr() const noexcept {
    return reinterpret_cast<::rs::std::io::Error const*>(__storage + 8);
  }
  void set_ok_tag() noexcept { set_tag(0); }
  void set_err_tag() noexcept { set_tag(1); }
  constexpr ::std::uint32_t tag() const& noexcept;
  constexpr void set_tag(::std::uint32_t tag) noexcept;

 private:
  unsigned char __storage[16];
};
#endif

#ifndef _CRUBIT_BINDINGS_FOR_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020uint64_ut_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020uint64_ut_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
template <>
struct alignas(8) CRUBIT_INTERNAL_RUST_TYPE(
    "std :: result :: Result < u64 , :: std :: io :: Error >")
    rs_std::Result<::std::uint64_t, ::rs::std::io::Error>
    : public rs_std::ResultBase<
          rs_std::Result<::std::uint64_t, ::rs::std::io::Error>,
          ::std::uint64_t, ::rs::std::io::Error> {
 public:
  // `core::result::Result` doesn't implement the `Clone` trait
  Result(const Result&) = delete;
  Result& operator=(const Result&) = delete;
  // C++ move operations are unavailable for this type. See
  // http://crubit.rs/rust/movable_types for an explanation of Rust types that
  // are C++ movable.
  Result(Result&&) = delete;
  rs_std::Result<::std::uint64_t, ::rs::std::io::Error>& operator=(Result&&) =
      delete;
  Result(::crubit::UnsafeRelocateTag, Result&& value);

 public:
  using base_type =
      rs_std::ResultBase<rs_std::Result<::std::uint64_t, ::rs::std::io::Error>,
                         ::std::uint64_t, ::rs::std::io::Error>;
  template <typename U>
    requires(rs_std::ResultForwardConstructible<Result, ::std::uint64_t, U>)
  explicit constexpr Result(U&& ok) noexcept;
  template <typename U>
    requires(rs_std::ResultForwardConstructible<Result, ::std::uint64_t, U>)
  constexpr Result& operator=(U&& ok) noexcept;
  template <typename F>
    requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
  explicit constexpr Result(rs_std::unexpected<F>&& err) noexcept;
  template <typename F>
    requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
  constexpr Result& operator=(rs_std::unexpected<F>&& err) noexcept;
  template <typename... Args>
  explicit constexpr Result(::std::in_place_t ip, Args&&... args) noexcept;
  template <typename... Args>
  explicit constexpr Result(rs_std::unexpect_t u, Args&&... args) noexcept;
  ~Result() noexcept;

 private:
  friend base_type;
  bool has_value_impl() const noexcept { return tag() == 0; }
  ::std::uint64_t* ok_ptr() noexcept {
    return reinterpret_cast<::std::uint64_t*>(__storage + 8);
  }
  ::std::uint64_t const* ok_const_ptr() const noexcept {
    return reinterpret_cast<::std::uint64_t const*>(__storage + 8);
  }
  ::rs::std::io::Error* err_ptr() noexcept {
    return reinterpret_cast<::rs::std::io::Error*>(__storage + 8);
  }
  ::rs::std::io::Error const* err_const_ptr() const noexcept {
    return reinterpret_cast<::rs::std::io::Error const*>(__storage + 8);
  }
  void set_ok_tag() noexcept { set_tag(0); }
  void set_err_tag() noexcept { set_tag(1); }
  constexpr ::std::uint64_t tag() const& noexcept;
  constexpr void set_tag(::std::uint64_t tag) noexcept;

 private:
  unsigned char __storage[16];
};
#endif

// Error generating bindings for implementation `ffi::os_str::<impl
// core::convert::AsRef<ffi::os_str::OsStr> for alloc_crate::string::String>`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/ffi/os_str.rs;l=1777:
// Failed to format type for the definition of `ffi::os_str::OsStr`: Bindings
// for dynamically sized types are not supported.

// Error generating bindings for implementation `path::<impl
// core::convert::AsRef<path::Path> for alloc_crate::string::String>` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=3912:
// Failed to format type for the definition of `path::Path`: Bindings for
// dynamically sized types are not supported.

// Error generating bindings for implementation `path::<impl
// core::convert::AsRef<path::Path> for ffi::os_str::OsString>` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs;l=3896:
// Failed to format type for the definition of `path::Path`: Bindings for
// dynamically sized types are not supported.

namespace rs::std::alloc {
using ::rs::alloc::alloc::alloc;
using ::rs::alloc::alloc::alloc_zeroed;
using ::rs::alloc::alloc::dealloc;
using ::rs::alloc::alloc::handle_alloc_error;
using ::rs::alloc::alloc::realloc;
}  // namespace rs::std::alloc

namespace rs::std {

// Error generating bindings for module `alloc_crate::borrow` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/lib.rs;l=247:
// Unsupported use statement that refers to this type of the entity:
// alloc_crate::borrow of kind Mod

}

namespace rs::std::borrow {

// Error generating bindings for enum `alloc_crate::borrow::Cow` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/borrow.rs;l=169:
// Generic types are not supported yet (b/259749095)

using ::rs::alloc::borrow::ToOwned;
}  // namespace rs::std::borrow

namespace rs::std::prelude::rust_2015 {
using ::rs::alloc::borrow::ToOwned;
}

namespace rs::std::prelude::rust_2018 {
using ::rs::alloc::borrow::ToOwned;
}

namespace rs::std::prelude::rust_2021 {
using ::rs::alloc::borrow::ToOwned;
}

namespace rs::std::prelude::rust_2024 {
using ::rs::alloc::borrow::ToOwned;
}

namespace rs::std::prelude::v1 {
using ::rs::alloc::borrow::ToOwned;
}

namespace rs::std {

// Error generating bindings for module `alloc_crate::boxed` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/lib.rs;l=248:
// Unsupported use statement that refers to this type of the entity:
// alloc_crate::boxed of kind Mod

}

namespace rs::std::boxed {

// Error generating bindings for struct `alloc_crate::boxed::Box` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/boxed.rs;l=236:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::prelude::rust_2015 {

// Error generating bindings for struct `alloc_crate::boxed::Box` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/boxed.rs;l=236:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::prelude::rust_2018 {

// Error generating bindings for struct `alloc_crate::boxed::Box` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/boxed.rs;l=236:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for struct `alloc_crate::boxed::Box` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/boxed.rs;l=236:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for struct `alloc_crate::boxed::Box` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/boxed.rs;l=236:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::prelude::v1 {

// Error generating bindings for struct `alloc_crate::boxed::Box` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/boxed.rs;l=236:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::boxed {

// Error generating bindings for struct `alloc_crate::boxed::BoxedArrayIntoIter`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/boxed/iter.rs;l=233:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::collections {

// Error generating bindings for struct `alloc_crate::collections::BTreeMap`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/btree/map.rs;l=189:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::collections::btree_map {

// Error generating bindings for struct `alloc_crate::collections::BTreeMap`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/btree/map.rs;l=189:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::collections {

// Error generating bindings for struct `alloc_crate::collections::BTreeSet`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/btree/set.rs;l=78:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::collections::btree_set {

// Error generating bindings for struct `alloc_crate::collections::BTreeSet`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/btree/set.rs;l=78:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::collections {

// Error generating bindings for struct `alloc_crate::collections::BinaryHeap`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/binary_heap/mod.rs;l=274:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::collections::binary_heap {

// Error generating bindings for struct `alloc_crate::collections::BinaryHeap`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/binary_heap/mod.rs;l=274:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::collections {

// Error generating bindings for struct `alloc_crate::collections::LinkedList`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/linked_list.rs;l=50:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::collections::linked_list {

// Error generating bindings for struct `alloc_crate::collections::LinkedList`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/linked_list.rs;l=50:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::collections {

//  The error type for `try_reserve` methods.
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/mod.rs;l=71
using TryReserveError CRUBIT_INTERNAL_RUST_TYPE(
    ":: alloc :: collections :: TryReserveError") =
    ::rs::alloc::collections::TryReserveError;
}  // namespace rs::std::collections

namespace rs::std::collections {

// Error generating bindings for struct `alloc_crate::collections::VecDeque`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/vec_deque/mod.rs;l=104:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::collections::vec_deque {

// Error generating bindings for struct `alloc_crate::collections::VecDeque`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/vec_deque/mod.rs;l=104:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::collections {

// Error generating bindings for module `alloc_crate::collections::binary_heap`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/mod.rs;l=9:
// Unsupported use statement that refers to this type of the entity:
// alloc_crate::collections::binary_heap of kind Mod

}

namespace rs::std::collections::binary_heap {

// Error generating bindings for struct
// `alloc_crate::collections::binary_heap::Drain` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/binary_heap/mod.rs;l=1833:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for struct
// `alloc_crate::collections::binary_heap::IntoIter` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/binary_heap/mod.rs;l=1680:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for struct
// `alloc_crate::collections::binary_heap::Iter` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/binary_heap/mod.rs;l=1601:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for struct
// `alloc_crate::collections::binary_heap::PeekMut` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/binary_heap/mod.rs;l=289:
// Generic types are not supported yet (b/259749095)

}  // namespace rs::std::collections::binary_heap

namespace rs::std::collections {

// Error generating bindings for module `alloc_crate::collections::btree_map`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/mod.rs;l=19:
// Unsupported use statement that refers to this type of the entity:
// alloc_crate::collections::btree_map of kind Mod

}

namespace rs::std::collections::btree_map {

// Error generating bindings for enum
// `alloc_crate::collections::btree_map::Entry` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/btree/map/entry.rs;l=19:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::collections::btree_map {

// Error generating bindings for struct
// `alloc_crate::collections::btree_map::ExtractIf` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/btree/map.rs;l=2130:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for struct
// `alloc_crate::collections::btree_map::IntoIter` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/btree/map.rs;l=444:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for struct
// `alloc_crate::collections::btree_map::IntoKeys` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/btree/map.rs;l=552:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for struct
// `alloc_crate::collections::btree_map::IntoValues` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/btree/map.rs;l=575:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for struct
// `alloc_crate::collections::btree_map::Iter` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/btree/map.rs;l=372:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for struct
// `alloc_crate::collections::btree_map::IterMut` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/btree/map.rs;l=406:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for struct
// `alloc_crate::collections::btree_map::Keys` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/btree/map.rs;l=495:
// Generic types are not supported yet (b/259749095)

}  // namespace rs::std::collections::btree_map

namespace rs::std::collections::btree_map {

// Error generating bindings for struct
// `alloc_crate::collections::btree_map::OccupiedEntry` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/btree/map/entry.rs;l=75:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::collections::btree_map {

// Error generating bindings for struct
// `alloc_crate::collections::btree_map::Range` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/btree/map.rs;l=598:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for struct
// `alloc_crate::collections::btree_map::RangeMut` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/btree/map.rs;l=617:
// Generic types are not supported yet (b/259749095)

}  // namespace rs::std::collections::btree_map

namespace rs::std::collections::btree_map {

// Error generating bindings for struct
// `alloc_crate::collections::btree_map::VacantEntry` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/btree/map/entry.rs;l=47:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::collections::btree_map {

// Error generating bindings for struct
// `alloc_crate::collections::btree_map::Values` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/btree/map.rs;l=514:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for struct
// `alloc_crate::collections::btree_map::ValuesMut` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/btree/map.rs;l=533:
// Generic types are not supported yet (b/259749095)

}  // namespace rs::std::collections::btree_map

namespace rs::std::collections {

// Error generating bindings for module `alloc_crate::collections::btree_set`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/mod.rs;l=28:
// Unsupported use statement that refers to this type of the entity:
// alloc_crate::collections::btree_set of kind Mod

}

namespace rs::std::collections::btree_set {

// Error generating bindings for struct
// `alloc_crate::collections::btree_set::Difference` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/btree/set.rs;l=183:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for struct
// `alloc_crate::collections::btree_set::ExtractIf` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/btree/set.rs;l=1557:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for struct
// `alloc_crate::collections::btree_set::Intersection` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/btree/set.rs;l=257:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for struct
// `alloc_crate::collections::btree_set::IntoIter` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/btree/set.rs;l=154:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for struct
// `alloc_crate::collections::btree_set::Iter` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/btree/set.rs;l=135:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for struct
// `alloc_crate::collections::btree_set::Range` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/btree/set.rs;l=170:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for struct
// `alloc_crate::collections::btree_set::SymmetricDifference` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/btree/set.rs;l=239:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for struct
// `alloc_crate::collections::btree_set::Union` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/btree/set.rs;l=311:
// Generic types are not supported yet (b/259749095)

}  // namespace rs::std::collections::btree_set

namespace rs::std::collections {

// Error generating bindings for module `alloc_crate::collections::linked_list`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/mod.rs;l=13:
// Unsupported use statement that refers to this type of the entity:
// alloc_crate::collections::linked_list of kind Mod

}

namespace rs::std::collections::linked_list {

// Error generating bindings for struct
// `alloc_crate::collections::linked_list::ExtractIf` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/linked_list.rs;l=1951:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for struct
// `alloc_crate::collections::linked_list::IntoIter` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/linked_list.rs;l=141:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for struct
// `alloc_crate::collections::linked_list::Iter` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/linked_list.rs;l=73:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for struct
// `alloc_crate::collections::linked_list::IterMut` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/linked_list.rs;l=110:
// Generic types are not supported yet (b/259749095)

}  // namespace rs::std::collections::linked_list

namespace rs::std::collections {

// Error generating bindings for module `alloc_crate::collections::vec_deque`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/mod.rs;l=15:
// Unsupported use statement that refers to this type of the entity:
// alloc_crate::collections::vec_deque of kind Mod

}

namespace rs::std::collections::vec_deque {

// Error generating bindings for struct
// `alloc_crate::collections::vec_deque::Drain` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/vec_deque/drain.rs;l=18:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::collections::vec_deque {

// Error generating bindings for struct
// `alloc_crate::collections::vec_deque::IntoIter` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/vec_deque/into_iter.rs;l=19:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::collections::vec_deque {

// Error generating bindings for struct
// `alloc_crate::collections::vec_deque::Iter` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/vec_deque/iter.rs;l=13:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::collections::vec_deque {

// Error generating bindings for struct
// `alloc_crate::collections::vec_deque::IterMut` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/vec_deque/iter_mut.rs;l=13:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::ffi {

//  A type representing an owned, C-compatible, nul-terminated string with no
//  nul bytes in the middle.
//
//  This type serves the purpose of being able to safely generate a
//  C-compatible string from a Rust byte slice or vector. An instance of this
//  type is a static guarantee that the underlying bytes contain no interior 0
//  bytes ("nul characters") and that the final byte is 0 ("nul terminator").
//
//  `CString` is to <code>&[CStr]</code> as [`String`] is to
//  <code>&[str]</code>: the former in each pair are owned strings; the latter
//  are borrowed references.
//
//  # Creating a `CString`
//
//  A `CString` is created from either a byte slice or a byte vector,
//  or anything that implements <code>[Into]<[Vec]<[u8]>></code> (for
//  example, you can build a `CString` straight out of a [`String`] or
//  a <code>&[str]</code>, since both implement that trait).
//  You can create a `CString` from a literal with `CString::from(c"Text")`.
//
//  The [`CString::new`] method will actually check that the provided
//  <code>&[[u8]]</code> does not have 0 bytes in the middle, and return an
//  error if it finds one.
//
//  # Extracting a raw pointer to the whole C string
//
//  `CString` implements an [`as_ptr`][`CStr::as_ptr`] method through the
//  [`Deref`] trait. This method will give you a `*const c_char` which you can
//  feed directly to extern functions that expect a nul-terminated
//  string, like C's `strdup()`. Notice that [`as_ptr`][`CStr::as_ptr`] returns
//  a read-only pointer; if the C code writes to it, that causes undefined
//  behavior.
//
//  # Extracting a slice of the whole C string
//
//  Alternatively, you can obtain a <code>&[[u8]]</code> slice from a
//  `CString` with the [`CString::as_bytes`] method. Slices produced in this
//  way do *not* contain the trailing nul terminator. This is useful
//  when you will be calling an extern function that takes a `*const
//  u8` argument which is not necessarily nul-terminated, plus another
//  argument with the length of the string — like C's `strndup()`.
//  You can of course get the slice's length with its
//  [`len`][slice::len] method.
//
//  If you need a <code>&[[u8]]</code> slice *with* the nul terminator, you
//  can use [`CString::as_bytes_with_nul`] instead.
//
//  Once you have the kind of slice you need (with or without a nul
//  terminator), you can call the slice's own
//  [`as_ptr`][slice::as_ptr] method to get a read-only raw pointer to pass to
//  extern functions. See the documentation for that function for a
//  discussion on ensuring the lifetime of the raw pointer.
//
//  [str]: prim@str "str"
//  [`Deref`]: ops::Deref
//
//  # Examples
//
//  ```ignore (extern-declaration)
//  # fn main() {
//  use std::ffi::CString;
//  use std::os::raw::c_char;
//
//  extern "C" {
//      fn my_printer(s: *const c_char);
//  }
//
//  // We are certain that our string doesn't have 0 bytes in the middle,
//  // so we can .expect()
//  let c_to_print = CString::new("Hello, world!").expect("we provided a string
//  without NUL bytes, so CString::new should not fail"); unsafe {
//      my_printer(c_to_print.as_ptr());
//  }
//  # }
//  ```
//
//  # Safety
//
//  `CString` is intended for working with traditional C-style strings
//  (a sequence of non-nul bytes terminated by a single nul byte); the
//  primary use case for these kinds of strings is interoperating with C-like
//  code. Often you will need to transfer ownership to/from that external
//  code. It is strongly recommended that you thoroughly read through the
//  documentation of `CString` before use, as improper ownership management
//  of `CString` instances can lead to invalid memory accesses, memory leaks,
//  and other memory errors.
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/ffi/c_str.rs;l=108
using CString CRUBIT_INTERNAL_RUST_TYPE(":: alloc :: ffi :: CString") =
    ::rs::alloc::ffi::CString;
}  // namespace rs::std::ffi

namespace rs::std::ffi::c_str {

//  A type representing an owned, C-compatible, nul-terminated string with no
//  nul bytes in the middle.
//
//  This type serves the purpose of being able to safely generate a
//  C-compatible string from a Rust byte slice or vector. An instance of this
//  type is a static guarantee that the underlying bytes contain no interior 0
//  bytes ("nul characters") and that the final byte is 0 ("nul terminator").
//
//  `CString` is to <code>&[CStr]</code> as [`String`] is to
//  <code>&[str]</code>: the former in each pair are owned strings; the latter
//  are borrowed references.
//
//  # Creating a `CString`
//
//  A `CString` is created from either a byte slice or a byte vector,
//  or anything that implements <code>[Into]<[Vec]<[u8]>></code> (for
//  example, you can build a `CString` straight out of a [`String`] or
//  a <code>&[str]</code>, since both implement that trait).
//  You can create a `CString` from a literal with `CString::from(c"Text")`.
//
//  The [`CString::new`] method will actually check that the provided
//  <code>&[[u8]]</code> does not have 0 bytes in the middle, and return an
//  error if it finds one.
//
//  # Extracting a raw pointer to the whole C string
//
//  `CString` implements an [`as_ptr`][`CStr::as_ptr`] method through the
//  [`Deref`] trait. This method will give you a `*const c_char` which you can
//  feed directly to extern functions that expect a nul-terminated
//  string, like C's `strdup()`. Notice that [`as_ptr`][`CStr::as_ptr`] returns
//  a read-only pointer; if the C code writes to it, that causes undefined
//  behavior.
//
//  # Extracting a slice of the whole C string
//
//  Alternatively, you can obtain a <code>&[[u8]]</code> slice from a
//  `CString` with the [`CString::as_bytes`] method. Slices produced in this
//  way do *not* contain the trailing nul terminator. This is useful
//  when you will be calling an extern function that takes a `*const
//  u8` argument which is not necessarily nul-terminated, plus another
//  argument with the length of the string — like C's `strndup()`.
//  You can of course get the slice's length with its
//  [`len`][slice::len] method.
//
//  If you need a <code>&[[u8]]</code> slice *with* the nul terminator, you
//  can use [`CString::as_bytes_with_nul`] instead.
//
//  Once you have the kind of slice you need (with or without a nul
//  terminator), you can call the slice's own
//  [`as_ptr`][slice::as_ptr] method to get a read-only raw pointer to pass to
//  extern functions. See the documentation for that function for a
//  discussion on ensuring the lifetime of the raw pointer.
//
//  [str]: prim@str "str"
//  [`Deref`]: ops::Deref
//
//  # Examples
//
//  ```ignore (extern-declaration)
//  # fn main() {
//  use std::ffi::CString;
//  use std::os::raw::c_char;
//
//  extern "C" {
//      fn my_printer(s: *const c_char);
//  }
//
//  // We are certain that our string doesn't have 0 bytes in the middle,
//  // so we can .expect()
//  let c_to_print = CString::new("Hello, world!").expect("we provided a string
//  without NUL bytes, so CString::new should not fail"); unsafe {
//      my_printer(c_to_print.as_ptr());
//  }
//  # }
//  ```
//
//  # Safety
//
//  `CString` is intended for working with traditional C-style strings
//  (a sequence of non-nul bytes terminated by a single nul byte); the
//  primary use case for these kinds of strings is interoperating with C-like
//  code. Often you will need to transfer ownership to/from that external
//  code. It is strongly recommended that you thoroughly read through the
//  documentation of `CString` before use, as improper ownership management
//  of `CString` instances can lead to invalid memory accesses, memory leaks,
//  and other memory errors.
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/ffi/c_str.rs;l=108
using CString CRUBIT_INTERNAL_RUST_TYPE(":: alloc :: ffi :: CString") =
    ::rs::alloc::ffi::CString;
}  // namespace rs::std::ffi::c_str

namespace rs::std::ffi {

//  An error indicating that a nul byte was not in the expected position.
//
//  The vector used to create a [`CString`] must have one and only one nul byte,
//  positioned at the end.
//
//  This error is created by the [`CString::from_vec_with_nul`] method.
//  See its documentation for more.
//
//  # Examples
//
//  ```
//  use std::ffi::{CString, FromVecWithNulError};
//
//  let _: FromVecWithNulError =
//  CString::from_vec_with_nul(b"f\\0oo".to_vec()).unwrap_err();
//  ```
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/ffi/c_str.rs;l=157
using FromVecWithNulError CRUBIT_INTERNAL_RUST_TYPE(
    ":: alloc :: ffi :: FromVecWithNulError") =
    ::rs::alloc::ffi::FromVecWithNulError;
}  // namespace rs::std::ffi

namespace rs::std::ffi::c_str {

//  An error indicating that a nul byte was not in the expected position.
//
//  The vector used to create a [`CString`] must have one and only one nul byte,
//  positioned at the end.
//
//  This error is created by the [`CString::from_vec_with_nul`] method.
//  See its documentation for more.
//
//  # Examples
//
//  ```
//  use std::ffi::{CString, FromVecWithNulError};
//
//  let _: FromVecWithNulError =
//  CString::from_vec_with_nul(b"f\\0oo".to_vec()).unwrap_err();
//  ```
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/ffi/c_str.rs;l=157
using FromVecWithNulError CRUBIT_INTERNAL_RUST_TYPE(
    ":: alloc :: ffi :: FromVecWithNulError") =
    ::rs::alloc::ffi::FromVecWithNulError;
}  // namespace rs::std::ffi::c_str

namespace rs::std::ffi {

//  An error indicating invalid UTF-8 when converting a [`CString`] into a
//  [`String`].
//
//  `CString` is just a wrapper over a buffer of bytes with a nul terminator;
//  [`CString::into_string`] performs UTF-8 validation on those bytes and may
//  return this error.
//
//  This `struct` is created by [`CString::into_string()`]. See
//  its documentation for more.
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/ffi/c_str.rs;l=223
using IntoStringError CRUBIT_INTERNAL_RUST_TYPE(
    ":: alloc :: ffi :: IntoStringError") = ::rs::alloc::ffi::IntoStringError;
}  // namespace rs::std::ffi

namespace rs::std::ffi::c_str {

//  An error indicating invalid UTF-8 when converting a [`CString`] into a
//  [`String`].
//
//  `CString` is just a wrapper over a buffer of bytes with a nul terminator;
//  [`CString::into_string`] performs UTF-8 validation on those bytes and may
//  return this error.
//
//  This `struct` is created by [`CString::into_string()`]. See
//  its documentation for more.
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/ffi/c_str.rs;l=223
using IntoStringError CRUBIT_INTERNAL_RUST_TYPE(
    ":: alloc :: ffi :: IntoStringError") = ::rs::alloc::ffi::IntoStringError;
}  // namespace rs::std::ffi::c_str

namespace rs::std::ffi {

//  An error indicating that an interior nul byte was found.
//
//  While Rust strings may contain nul bytes in the middle, C strings
//  can't, as that byte would effectively truncate the string.
//
//  This error is created by the [`new`][`CString::new`] method on
//  [`CString`]. See its documentation for more.
//
//  # Examples
//
//  ```
//  use std::ffi::{CString, NulError};
//
//  let _: NulError = CString::new(b"f\\0oo".to_vec()).unwrap_err();
//  ```
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/ffi/c_str.rs;l=132
using NulError CRUBIT_INTERNAL_RUST_TYPE(":: alloc :: ffi :: NulError") =
    ::rs::alloc::ffi::NulError;
}  // namespace rs::std::ffi

namespace rs::std::ffi::c_str {

//  An error indicating that an interior nul byte was found.
//
//  While Rust strings may contain nul bytes in the middle, C strings
//  can't, as that byte would effectively truncate the string.
//
//  This error is created by the [`new`][`CString::new`] method on
//  [`CString`]. See its documentation for more.
//
//  # Examples
//
//  ```
//  use std::ffi::{CString, NulError};
//
//  let _: NulError = CString::new(b"f\\0oo".to_vec()).unwrap_err();
//  ```
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/ffi/c_str.rs;l=132
using NulError CRUBIT_INTERNAL_RUST_TYPE(":: alloc :: ffi :: NulError") =
    ::rs::alloc::ffi::NulError;
}  // namespace rs::std::ffi::c_str

namespace rs::std {

// Error generating bindings for module `alloc_crate::fmt` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/lib.rs;l=254:
// Unsupported use statement that refers to this type of the entity:
// alloc_crate::fmt of kind Mod

}

namespace rs::std::fmt {
using ::rs::alloc::fmt::format;
}

namespace rs::std {

// Error generating bindings for macro `alloc_crate::format` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/macros.rs;l=113:
// Unsupported use statement that refers to this type of the entity:
// alloc_crate::format of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2015 {

// Error generating bindings for macro `alloc_crate::format` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/macros.rs;l=113:
// Unsupported use statement that refers to this type of the entity:
// alloc_crate::format of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2018 {

// Error generating bindings for macro `alloc_crate::format` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/macros.rs;l=113:
// Unsupported use statement that refers to this type of the entity:
// alloc_crate::format of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for macro `alloc_crate::format` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/macros.rs;l=113:
// Unsupported use statement that refers to this type of the entity:
// alloc_crate::format of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for macro `alloc_crate::format` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/macros.rs;l=113:
// Unsupported use statement that refers to this type of the entity:
// alloc_crate::format of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::v1 {

// Error generating bindings for macro `alloc_crate::format` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/macros.rs;l=113:
// Unsupported use statement that refers to this type of the entity:
// alloc_crate::format of kind Macro(MacroKinds(1))

}

namespace rs::std::io::prelude {
using ::rs::std::io::BufRead;
}

namespace rs::std::io::prelude {
using ::rs::std::io::Read;
}

namespace rs::std::io {

static_assert(
    sizeof(WriterPanicked) == 24,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(WriterPanicked) == 8,
    "Verify that ADT layout didn't change since this header got generated");
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtNtNtCsaddbpR6HRqH_u5alloc2io8buffered9bufwriter14WriterPanickedNtNtNtCs9kG8YiNG2f0_u4core3ops4drop4Drop4dropCsb7ytMsthdgm_u3std(
    ::rs::std::io::WriterPanicked&);
}
inline WriterPanicked::~WriterPanicked() {
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtNtNtCsaddbpR6HRqH_u5alloc2io8buffered9bufwriter14WriterPanickedNtNtNtCs9kG8YiNG2f0_u4core3ops4drop4Drop4dropCsb7ytMsthdgm_u3std(
          *this);
}
inline ::rs::std::io::WriterPanicked::WriterPanicked(
    ::crubit::UnsafeRelocateTag, WriterPanicked&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtNtNtCsaddbpR6HRqH_u5alloc2io8buffered9bufwriter14WriterPanickedNtNtBa_u6string8ToString9to_ustringCsb7ytMsthdgm_u3std(
    ::rs::std::io::WriterPanicked const&,
    ::rs::alloc::string::String* __ret_ptr);
inline void WriterPanicked::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(WriterPanicked, buf));
}
}  // namespace rs::std::io

namespace rs::std {

// Error generating bindings for module `alloc_crate::rc` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/lib.rs;l=259:
// Unsupported use statement that refers to this type of the entity:
// alloc_crate::rc of kind Mod

}

namespace rs::std::rc {

// Error generating bindings for struct `alloc_crate::rc::Rc` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/rc.rs;l=324:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for struct `alloc_crate::rc::Weak` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/rc.rs;l=3207:
// Generic types are not supported yet (b/259749095)

}  // namespace rs::std::rc

namespace rs::std {

// Error generating bindings for module `alloc_crate::slice` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/lib.rs;l=260:
// Unsupported use statement that refers to this type of the entity:
// alloc_crate::slice of kind Mod

// Error generating bindings for module `alloc_crate::str` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/lib.rs;l=261:
// Unsupported use statement that refers to this type of the entity:
// alloc_crate::str of kind Mod

}  // namespace rs::std

namespace rs::std::str {

// Error generating bindings for function
// `alloc_crate::str::from_boxed_utf8_unchecked` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/str.rs;l=905:
// Unable to `use` function whose bindings failed: Error formatting function
// return type `alloc_crate::boxed::Box<str>`
//
// Caused by:
//     Generic types are not supported yet (b/259749095)

}

namespace rs::std {

// Error generating bindings for module `alloc_crate::string` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/lib.rs;l=262:
// Unsupported use statement that refers to this type of the entity:
// alloc_crate::string of kind Mod

}

namespace rs::std::string {

//  A draining iterator for `String`.
//
//  This struct is created by the [`drain`] method on [`String`]. See its
//  documentation for more.
//
//  [`drain`]: String::drain
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/string.rs;l=3528
using Drain CRUBIT_INTERNAL_RUST_TYPE(":: alloc :: string :: Drain") =
    ::rs::alloc::string::Drain;
//  A possible error value when converting a `String` from a UTF-16 byte slice.
//
//  This type is the error type for the [`from_utf16`] method on [`String`].
//
//  [`from_utf16`]: String::from_utf16
//
//  # Examples
//
//  ```
//  // 𝄞mu<invalid>ic
//  let v = &[0xD834, 0xDD1E, 0x006d, 0x0075,
//            0xD800, 0x0069, 0x0063];
//
//  assert!(String::from_utf16(v).is_err());
//  ```
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/string.rs;l=413
using FromUtf16Error CRUBIT_INTERNAL_RUST_TYPE(
    ":: alloc :: string :: FromUtf16Error") =
    ::rs::alloc::string::FromUtf16Error;
//  A possible error value when converting a `String` from a UTF-8 byte vector.
//
//  This type is the error type for the [`from_utf8`] method on [`String`]. It
//  is designed in such a way to carefully avoid reallocations: the
//  [`into_bytes`] method will give back the byte vector that was used in the
//  conversion attempt.
//
//  [`from_utf8`]: String::from_utf8
//  [`into_bytes`]: FromUtf8Error::into_bytes
//
//  The [`Utf8Error`] type provided by [`std::str`] represents an error that may
//  occur when converting a slice of [`u8`]s to a [`&str`]. In this sense, it's
//  an analogue to `FromUtf8Error`, and you can get one from a `FromUtf8Error`
//  through the [`utf8_error`] method.
//
//  [`Utf8Error`]: str::Utf8Error "std::str::Utf8Error"
//  [`std::str`]: core::str "std::str"
//  [`&str`]: prim@str "&str"
//  [`utf8_error`]: FromUtf8Error::utf8_error
//
//  # Examples
//
//  ```
//  // some invalid bytes, in a vector
//  let bytes = vec![0, 159];
//
//  let value = String::from_utf8(bytes);
//
//  assert!(value.is_err());
//  assert_eq!(vec![0, 159], value.unwrap_err().into_bytes());
//  ```
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/string.rs;l=391
using FromUtf8Error CRUBIT_INTERNAL_RUST_TYPE(
    ":: alloc :: string :: FromUtf8Error") = ::rs::alloc::string::FromUtf8Error;
//  A UTF-8–encoded, growable string.
//
//  `String` is the most common string type. It has ownership over the contents
//  of the string, stored in a heap-allocated buffer (see
//  [Representation](#representation)). It is closely related to its borrowed
//  counterpart, the primitive [`str`].
//
//  # Examples
//
//  You can create a `String` from [a literal string][`&str`] with
//  [`String::from`]:
//
//  [`String::from`]: From::from
//
//  ```
//  let hello = String::from("Hello, world!");
//  ```
//
//  You can append a [`char`] to a `String` with the [`push`] method, and
//  append a [`&str`] with the [`push_str`] method:
//
//  ```
//  let mut hello = String::from("Hello, ");
//
//  hello.push('w');
//  hello.push_str("orld!");
//  ```
//
//  [`push`]: String::push
//  [`push_str`]: String::push_str
//
//  If you have a vector of UTF-8 bytes, you can create a `String` from it with
//  the [`from_utf8`] method:
//
//  ```
//  // some bytes, in a vector
//  let sparkle_heart = vec![240, 159, 146, 150];
//
//  // We know these bytes are valid, so we'll use `unwrap()`.
//  let sparkle_heart = String::from_utf8(sparkle_heart).unwrap();
//
//  assert_eq!("💖", sparkle_heart);
//  ```
//
//  [`from_utf8`]: String::from_utf8
//
//  # UTF-8
//
//  `String`s are always valid UTF-8. If you need a non-UTF-8 string, consider
//  [`OsString`]. It is similar, but without the UTF-8 constraint. Because UTF-8
//  is a variable width encoding, `String`s are typically smaller than an array
//  of the same `char`s:
//
//  ```
//  // `s` is ASCII which represents each `char` as one byte
//  let s = "hello";
//  assert_eq!(s.len(), 5);
//
//  // A `char` array with the same contents would be longer because
//  // every `char` is four bytes
//  let s = ['h', 'e', 'l', 'l', 'o'];
//  let size: usize = s.into_iter().map(|c| size_of_val(&c)).sum();
//  assert_eq!(size, 20);
//
//  // However, for non-ASCII strings, the difference will be smaller
//  // and sometimes they are the same
//  let s = "💖💖💖💖💖";
//  assert_eq!(s.len(), 20);
//
//  let s = ['💖', '💖', '💖', '💖', '💖'];
//  let size: usize = s.into_iter().map(|c| size_of_val(&c)).sum();
//  assert_eq!(size, 20);
//  ```
//
//  This raises interesting questions as to how `s[i]` should work.
//  What should `i` be here? Several options include byte indices and
//  `char` indices but, because of UTF-8 encoding, only byte indices
//  would provide constant time indexing. Getting the `i`th `char`, for
//  example, is available using [`chars`]:
//
//  ```
//  let s = "hello";
//  let third_character = s.chars().nth(2);
//  assert_eq!(third_character, Some('l'));
//
//  let s = "💖💖💖💖💖";
//  let third_character = s.chars().nth(2);
//  assert_eq!(third_character, Some('💖'));
//  ```
//
//  Next, what should `s[i]` return? Because indexing returns a reference
//  to underlying data it could be `&u8`, `&[u8]`, or something similar.
//  Since we're only providing one index, `&u8` makes the most sense but that
//  might not be what the user expects and can be explicitly achieved with
//  [`as_bytes()`]:
//
//  ```
//  // The first byte is 104 - the byte value of `'h'`
//  let s = "hello";
//  assert_eq!(s.as_bytes()[0], 104);
//  // or
//  assert_eq!(s.as_bytes()[0], b'h');
//
//  // The first byte is 240 which isn't obviously useful
//  let s = "💖💖💖💖💖";
//  assert_eq!(s.as_bytes()[0], 240);
//  ```
//
//  Due to these ambiguities/restrictions, indexing with a `usize` is simply
//  forbidden:
//
//  ```compile_fail,E0277
//  let s = "hello";
//
//  // The following will not compile!
//  println!("The first letter of s is {}", s[0]);
//  ```
//
//  It is more clear, however, how `&s[i..j]` should work (that is,
//  indexing with a range). It should accept byte indices (to be constant-time)
//  and return a `&str` which is UTF-8 encoded. This is also called "string
//  slicing". Note this will panic if the byte indices provided are not
//  character boundaries - see [`is_char_boundary`] for more details. See the
//  implementations for [`SliceIndex<str>`] for more details on string slicing.
//  For a non-panicking version of string slicing, see [`get`].
//
//  [`OsString`]: ../../std/ffi/struct.OsString.html "ffi::OsString"
//  [`SliceIndex<str>`]: core::slice::SliceIndex
//  [`as_bytes()`]: str::as_bytes
//  [`get`]: str::get
//  [`is_char_boundary`]: str::is_char_boundary
//
//  The [`bytes`] and [`chars`] methods return iterators over the bytes and
//  codepoints of the string, respectively. To iterate over codepoints along
//  with byte indices, use [`char_indices`].
//
//  [`bytes`]: str::bytes
//  [`chars`]: str::chars
//  [`char_indices`]: str::char_indices
//
//  # Deref
//
//  `String` implements <code>[Deref]<Target = [str]></code>, and so inherits
//  all of [`str`]'s methods. In addition, this means that you can pass a
//  `String` to a function which takes a [`&str`] by using an ampersand (`&`):
//
//  ```
//  fn takes_str(s: &str) { }
//
//  let s = String::from("Hello");
//
//  takes_str(&s);
//  ```
//
//  This will create a [`&str`] from the `String` and pass it in. This
//  conversion is very inexpensive, and so generally, functions will accept
//  [`&str`]s as arguments unless they need a `String` for some specific
//  reason.
//
//  In certain cases Rust doesn't have enough information to make this
//  conversion, known as [`Deref`] coercion. In the following example a string
//  slice [`&'a str`][`&str`] implements the trait `TraitExample`, and the
//  function `example_func` takes anything that implements the trait. In this
//  case Rust would need to make two implicit conversions, which Rust doesn't
//  have the means to do. For that reason, the following example will not
//  compile.
//
//  ```compile_fail,E0277
//  trait TraitExample {}
//
//  impl<'a> TraitExample for &'a str {}
//
//  fn example_func<A: TraitExample>(example_arg: A) {}
//
//  let example_string = String::from("example_string");
//  example_func(&example_string);
//  ```
//
//  There are two options that would work instead. The first would be to
//  change the line `example_func(&example_string);` to
//  `example_func(example_string.as_str());`, using the method [`as_str()`]
//  to explicitly extract the string slice containing the string. The second
//  way changes `example_func(&example_string);` to
//  `example_func(&*example_string);`. In this case we are dereferencing a
//  `String` to a [`str`], then referencing the [`str`] back to
//  [`&str`]. The second way is more idiomatic, however both work to do the
//  conversion explicitly rather than relying on the implicit conversion.
//
//  # Representation
//
//  A `String` is made up of three components: a pointer to some bytes, a
//  length, and a capacity. The pointer points to the internal buffer which
//  `String` uses to store its data. The length is the number of bytes currently
//  stored in the buffer, and the capacity is the size of the buffer in bytes.
//  As such, the length will always be less than or equal to the capacity.
//
//  This buffer is always stored on the heap.
//
//  You can look at these with the [`as_ptr`], [`len`], and [`capacity`]
//  methods:
//
//  ```
//  let story = String::from("Once upon a time...");
//
//  // Deconstruct the String into parts.
//  let (ptr, len, capacity) = story.into_raw_parts();
//
//  // story has nineteen bytes
//  assert_eq!(19, len);
//
//  // We can re-build a String out of ptr, len, and capacity. This is all
//  // unsafe because we are responsible for making sure the components are
//  // valid:
//  let s = unsafe { String::from_raw_parts(ptr, len, capacity) } ;
//
//  assert_eq!(String::from("Once upon a time..."), s);
//  ```
//
//  [`as_ptr`]: str::as_ptr
//  [`len`]: String::len
//  [`capacity`]: String::capacity
//
//  If a `String` has enough capacity, adding elements to it will not
//  re-allocate. For example, consider this program:
//
//  ```
//  let mut s = String::new();
//
//  println!("{}", s.capacity());
//
//  for _ in 0..5 {
//      s.push_str("hello");
//      println!("{}", s.capacity());
//  }
//  ```
//
//  This will output the following:
//
//  ```text
//  0
//  8
//  16
//  16
//  32
//  32
//  ```
//
//  At first, we have no memory allocated at all, but as we append to the
//  string, it increases its capacity appropriately. If we instead use the
//  [`with_capacity`] method to allocate the correct capacity initially:
//
//  ```
//  let mut s = String::with_capacity(25);
//
//  println!("{}", s.capacity());
//
//  for _ in 0..5 {
//      s.push_str("hello");
//      println!("{}", s.capacity());
//  }
//  ```
//
//  [`with_capacity`]: String::with_capacity
//
//  We end up with a different output:
//
//  ```text
//  25
//  25
//  25
//  25
//  25
//  25
//  ```
//
//  Here, there's no need to allocate more memory inside the loop.
//
//  [str]: prim@str "str"
//  [`str`]: prim@str "str"
//  [`&str`]: prim@str "&str"
//  [Deref]: core::ops::Deref "ops::Deref"
//  [`Deref`]: core::ops::Deref "ops::Deref"
//  [`as_str()`]: String::as_str
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/string.rs;l=353
using String CRUBIT_INTERNAL_RUST_TYPE(":: alloc :: string :: String") =
    ::rs::alloc::string::String;
}  // namespace rs::std::string

namespace rs::std::prelude::rust_2015 {

//  A UTF-8–encoded, growable string.
//
//  `String` is the most common string type. It has ownership over the contents
//  of the string, stored in a heap-allocated buffer (see
//  [Representation](#representation)). It is closely related to its borrowed
//  counterpart, the primitive [`str`].
//
//  # Examples
//
//  You can create a `String` from [a literal string][`&str`] with
//  [`String::from`]:
//
//  [`String::from`]: From::from
//
//  ```
//  let hello = String::from("Hello, world!");
//  ```
//
//  You can append a [`char`] to a `String` with the [`push`] method, and
//  append a [`&str`] with the [`push_str`] method:
//
//  ```
//  let mut hello = String::from("Hello, ");
//
//  hello.push('w');
//  hello.push_str("orld!");
//  ```
//
//  [`push`]: String::push
//  [`push_str`]: String::push_str
//
//  If you have a vector of UTF-8 bytes, you can create a `String` from it with
//  the [`from_utf8`] method:
//
//  ```
//  // some bytes, in a vector
//  let sparkle_heart = vec![240, 159, 146, 150];
//
//  // We know these bytes are valid, so we'll use `unwrap()`.
//  let sparkle_heart = String::from_utf8(sparkle_heart).unwrap();
//
//  assert_eq!("💖", sparkle_heart);
//  ```
//
//  [`from_utf8`]: String::from_utf8
//
//  # UTF-8
//
//  `String`s are always valid UTF-8. If you need a non-UTF-8 string, consider
//  [`OsString`]. It is similar, but without the UTF-8 constraint. Because UTF-8
//  is a variable width encoding, `String`s are typically smaller than an array
//  of the same `char`s:
//
//  ```
//  // `s` is ASCII which represents each `char` as one byte
//  let s = "hello";
//  assert_eq!(s.len(), 5);
//
//  // A `char` array with the same contents would be longer because
//  // every `char` is four bytes
//  let s = ['h', 'e', 'l', 'l', 'o'];
//  let size: usize = s.into_iter().map(|c| size_of_val(&c)).sum();
//  assert_eq!(size, 20);
//
//  // However, for non-ASCII strings, the difference will be smaller
//  // and sometimes they are the same
//  let s = "💖💖💖💖💖";
//  assert_eq!(s.len(), 20);
//
//  let s = ['💖', '💖', '💖', '💖', '💖'];
//  let size: usize = s.into_iter().map(|c| size_of_val(&c)).sum();
//  assert_eq!(size, 20);
//  ```
//
//  This raises interesting questions as to how `s[i]` should work.
//  What should `i` be here? Several options include byte indices and
//  `char` indices but, because of UTF-8 encoding, only byte indices
//  would provide constant time indexing. Getting the `i`th `char`, for
//  example, is available using [`chars`]:
//
//  ```
//  let s = "hello";
//  let third_character = s.chars().nth(2);
//  assert_eq!(third_character, Some('l'));
//
//  let s = "💖💖💖💖💖";
//  let third_character = s.chars().nth(2);
//  assert_eq!(third_character, Some('💖'));
//  ```
//
//  Next, what should `s[i]` return? Because indexing returns a reference
//  to underlying data it could be `&u8`, `&[u8]`, or something similar.
//  Since we're only providing one index, `&u8` makes the most sense but that
//  might not be what the user expects and can be explicitly achieved with
//  [`as_bytes()`]:
//
//  ```
//  // The first byte is 104 - the byte value of `'h'`
//  let s = "hello";
//  assert_eq!(s.as_bytes()[0], 104);
//  // or
//  assert_eq!(s.as_bytes()[0], b'h');
//
//  // The first byte is 240 which isn't obviously useful
//  let s = "💖💖💖💖💖";
//  assert_eq!(s.as_bytes()[0], 240);
//  ```
//
//  Due to these ambiguities/restrictions, indexing with a `usize` is simply
//  forbidden:
//
//  ```compile_fail,E0277
//  let s = "hello";
//
//  // The following will not compile!
//  println!("The first letter of s is {}", s[0]);
//  ```
//
//  It is more clear, however, how `&s[i..j]` should work (that is,
//  indexing with a range). It should accept byte indices (to be constant-time)
//  and return a `&str` which is UTF-8 encoded. This is also called "string
//  slicing". Note this will panic if the byte indices provided are not
//  character boundaries - see [`is_char_boundary`] for more details. See the
//  implementations for [`SliceIndex<str>`] for more details on string slicing.
//  For a non-panicking version of string slicing, see [`get`].
//
//  [`OsString`]: ../../std/ffi/struct.OsString.html "ffi::OsString"
//  [`SliceIndex<str>`]: core::slice::SliceIndex
//  [`as_bytes()`]: str::as_bytes
//  [`get`]: str::get
//  [`is_char_boundary`]: str::is_char_boundary
//
//  The [`bytes`] and [`chars`] methods return iterators over the bytes and
//  codepoints of the string, respectively. To iterate over codepoints along
//  with byte indices, use [`char_indices`].
//
//  [`bytes`]: str::bytes
//  [`chars`]: str::chars
//  [`char_indices`]: str::char_indices
//
//  # Deref
//
//  `String` implements <code>[Deref]<Target = [str]></code>, and so inherits
//  all of [`str`]'s methods. In addition, this means that you can pass a
//  `String` to a function which takes a [`&str`] by using an ampersand (`&`):
//
//  ```
//  fn takes_str(s: &str) { }
//
//  let s = String::from("Hello");
//
//  takes_str(&s);
//  ```
//
//  This will create a [`&str`] from the `String` and pass it in. This
//  conversion is very inexpensive, and so generally, functions will accept
//  [`&str`]s as arguments unless they need a `String` for some specific
//  reason.
//
//  In certain cases Rust doesn't have enough information to make this
//  conversion, known as [`Deref`] coercion. In the following example a string
//  slice [`&'a str`][`&str`] implements the trait `TraitExample`, and the
//  function `example_func` takes anything that implements the trait. In this
//  case Rust would need to make two implicit conversions, which Rust doesn't
//  have the means to do. For that reason, the following example will not
//  compile.
//
//  ```compile_fail,E0277
//  trait TraitExample {}
//
//  impl<'a> TraitExample for &'a str {}
//
//  fn example_func<A: TraitExample>(example_arg: A) {}
//
//  let example_string = String::from("example_string");
//  example_func(&example_string);
//  ```
//
//  There are two options that would work instead. The first would be to
//  change the line `example_func(&example_string);` to
//  `example_func(example_string.as_str());`, using the method [`as_str()`]
//  to explicitly extract the string slice containing the string. The second
//  way changes `example_func(&example_string);` to
//  `example_func(&*example_string);`. In this case we are dereferencing a
//  `String` to a [`str`], then referencing the [`str`] back to
//  [`&str`]. The second way is more idiomatic, however both work to do the
//  conversion explicitly rather than relying on the implicit conversion.
//
//  # Representation
//
//  A `String` is made up of three components: a pointer to some bytes, a
//  length, and a capacity. The pointer points to the internal buffer which
//  `String` uses to store its data. The length is the number of bytes currently
//  stored in the buffer, and the capacity is the size of the buffer in bytes.
//  As such, the length will always be less than or equal to the capacity.
//
//  This buffer is always stored on the heap.
//
//  You can look at these with the [`as_ptr`], [`len`], and [`capacity`]
//  methods:
//
//  ```
//  let story = String::from("Once upon a time...");
//
//  // Deconstruct the String into parts.
//  let (ptr, len, capacity) = story.into_raw_parts();
//
//  // story has nineteen bytes
//  assert_eq!(19, len);
//
//  // We can re-build a String out of ptr, len, and capacity. This is all
//  // unsafe because we are responsible for making sure the components are
//  // valid:
//  let s = unsafe { String::from_raw_parts(ptr, len, capacity) } ;
//
//  assert_eq!(String::from("Once upon a time..."), s);
//  ```
//
//  [`as_ptr`]: str::as_ptr
//  [`len`]: String::len
//  [`capacity`]: String::capacity
//
//  If a `String` has enough capacity, adding elements to it will not
//  re-allocate. For example, consider this program:
//
//  ```
//  let mut s = String::new();
//
//  println!("{}", s.capacity());
//
//  for _ in 0..5 {
//      s.push_str("hello");
//      println!("{}", s.capacity());
//  }
//  ```
//
//  This will output the following:
//
//  ```text
//  0
//  8
//  16
//  16
//  32
//  32
//  ```
//
//  At first, we have no memory allocated at all, but as we append to the
//  string, it increases its capacity appropriately. If we instead use the
//  [`with_capacity`] method to allocate the correct capacity initially:
//
//  ```
//  let mut s = String::with_capacity(25);
//
//  println!("{}", s.capacity());
//
//  for _ in 0..5 {
//      s.push_str("hello");
//      println!("{}", s.capacity());
//  }
//  ```
//
//  [`with_capacity`]: String::with_capacity
//
//  We end up with a different output:
//
//  ```text
//  25
//  25
//  25
//  25
//  25
//  25
//  ```
//
//  Here, there's no need to allocate more memory inside the loop.
//
//  [str]: prim@str "str"
//  [`str`]: prim@str "str"
//  [`&str`]: prim@str "&str"
//  [Deref]: core::ops::Deref "ops::Deref"
//  [`Deref`]: core::ops::Deref "ops::Deref"
//  [`as_str()`]: String::as_str
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/string.rs;l=353
using String CRUBIT_INTERNAL_RUST_TYPE(":: alloc :: string :: String") =
    ::rs::alloc::string::String;
}  // namespace rs::std::prelude::rust_2015

namespace rs::std::prelude::rust_2018 {

//  A UTF-8–encoded, growable string.
//
//  `String` is the most common string type. It has ownership over the contents
//  of the string, stored in a heap-allocated buffer (see
//  [Representation](#representation)). It is closely related to its borrowed
//  counterpart, the primitive [`str`].
//
//  # Examples
//
//  You can create a `String` from [a literal string][`&str`] with
//  [`String::from`]:
//
//  [`String::from`]: From::from
//
//  ```
//  let hello = String::from("Hello, world!");
//  ```
//
//  You can append a [`char`] to a `String` with the [`push`] method, and
//  append a [`&str`] with the [`push_str`] method:
//
//  ```
//  let mut hello = String::from("Hello, ");
//
//  hello.push('w');
//  hello.push_str("orld!");
//  ```
//
//  [`push`]: String::push
//  [`push_str`]: String::push_str
//
//  If you have a vector of UTF-8 bytes, you can create a `String` from it with
//  the [`from_utf8`] method:
//
//  ```
//  // some bytes, in a vector
//  let sparkle_heart = vec![240, 159, 146, 150];
//
//  // We know these bytes are valid, so we'll use `unwrap()`.
//  let sparkle_heart = String::from_utf8(sparkle_heart).unwrap();
//
//  assert_eq!("💖", sparkle_heart);
//  ```
//
//  [`from_utf8`]: String::from_utf8
//
//  # UTF-8
//
//  `String`s are always valid UTF-8. If you need a non-UTF-8 string, consider
//  [`OsString`]. It is similar, but without the UTF-8 constraint. Because UTF-8
//  is a variable width encoding, `String`s are typically smaller than an array
//  of the same `char`s:
//
//  ```
//  // `s` is ASCII which represents each `char` as one byte
//  let s = "hello";
//  assert_eq!(s.len(), 5);
//
//  // A `char` array with the same contents would be longer because
//  // every `char` is four bytes
//  let s = ['h', 'e', 'l', 'l', 'o'];
//  let size: usize = s.into_iter().map(|c| size_of_val(&c)).sum();
//  assert_eq!(size, 20);
//
//  // However, for non-ASCII strings, the difference will be smaller
//  // and sometimes they are the same
//  let s = "💖💖💖💖💖";
//  assert_eq!(s.len(), 20);
//
//  let s = ['💖', '💖', '💖', '💖', '💖'];
//  let size: usize = s.into_iter().map(|c| size_of_val(&c)).sum();
//  assert_eq!(size, 20);
//  ```
//
//  This raises interesting questions as to how `s[i]` should work.
//  What should `i` be here? Several options include byte indices and
//  `char` indices but, because of UTF-8 encoding, only byte indices
//  would provide constant time indexing. Getting the `i`th `char`, for
//  example, is available using [`chars`]:
//
//  ```
//  let s = "hello";
//  let third_character = s.chars().nth(2);
//  assert_eq!(third_character, Some('l'));
//
//  let s = "💖💖💖💖💖";
//  let third_character = s.chars().nth(2);
//  assert_eq!(third_character, Some('💖'));
//  ```
//
//  Next, what should `s[i]` return? Because indexing returns a reference
//  to underlying data it could be `&u8`, `&[u8]`, or something similar.
//  Since we're only providing one index, `&u8` makes the most sense but that
//  might not be what the user expects and can be explicitly achieved with
//  [`as_bytes()`]:
//
//  ```
//  // The first byte is 104 - the byte value of `'h'`
//  let s = "hello";
//  assert_eq!(s.as_bytes()[0], 104);
//  // or
//  assert_eq!(s.as_bytes()[0], b'h');
//
//  // The first byte is 240 which isn't obviously useful
//  let s = "💖💖💖💖💖";
//  assert_eq!(s.as_bytes()[0], 240);
//  ```
//
//  Due to these ambiguities/restrictions, indexing with a `usize` is simply
//  forbidden:
//
//  ```compile_fail,E0277
//  let s = "hello";
//
//  // The following will not compile!
//  println!("The first letter of s is {}", s[0]);
//  ```
//
//  It is more clear, however, how `&s[i..j]` should work (that is,
//  indexing with a range). It should accept byte indices (to be constant-time)
//  and return a `&str` which is UTF-8 encoded. This is also called "string
//  slicing". Note this will panic if the byte indices provided are not
//  character boundaries - see [`is_char_boundary`] for more details. See the
//  implementations for [`SliceIndex<str>`] for more details on string slicing.
//  For a non-panicking version of string slicing, see [`get`].
//
//  [`OsString`]: ../../std/ffi/struct.OsString.html "ffi::OsString"
//  [`SliceIndex<str>`]: core::slice::SliceIndex
//  [`as_bytes()`]: str::as_bytes
//  [`get`]: str::get
//  [`is_char_boundary`]: str::is_char_boundary
//
//  The [`bytes`] and [`chars`] methods return iterators over the bytes and
//  codepoints of the string, respectively. To iterate over codepoints along
//  with byte indices, use [`char_indices`].
//
//  [`bytes`]: str::bytes
//  [`chars`]: str::chars
//  [`char_indices`]: str::char_indices
//
//  # Deref
//
//  `String` implements <code>[Deref]<Target = [str]></code>, and so inherits
//  all of [`str`]'s methods. In addition, this means that you can pass a
//  `String` to a function which takes a [`&str`] by using an ampersand (`&`):
//
//  ```
//  fn takes_str(s: &str) { }
//
//  let s = String::from("Hello");
//
//  takes_str(&s);
//  ```
//
//  This will create a [`&str`] from the `String` and pass it in. This
//  conversion is very inexpensive, and so generally, functions will accept
//  [`&str`]s as arguments unless they need a `String` for some specific
//  reason.
//
//  In certain cases Rust doesn't have enough information to make this
//  conversion, known as [`Deref`] coercion. In the following example a string
//  slice [`&'a str`][`&str`] implements the trait `TraitExample`, and the
//  function `example_func` takes anything that implements the trait. In this
//  case Rust would need to make two implicit conversions, which Rust doesn't
//  have the means to do. For that reason, the following example will not
//  compile.
//
//  ```compile_fail,E0277
//  trait TraitExample {}
//
//  impl<'a> TraitExample for &'a str {}
//
//  fn example_func<A: TraitExample>(example_arg: A) {}
//
//  let example_string = String::from("example_string");
//  example_func(&example_string);
//  ```
//
//  There are two options that would work instead. The first would be to
//  change the line `example_func(&example_string);` to
//  `example_func(example_string.as_str());`, using the method [`as_str()`]
//  to explicitly extract the string slice containing the string. The second
//  way changes `example_func(&example_string);` to
//  `example_func(&*example_string);`. In this case we are dereferencing a
//  `String` to a [`str`], then referencing the [`str`] back to
//  [`&str`]. The second way is more idiomatic, however both work to do the
//  conversion explicitly rather than relying on the implicit conversion.
//
//  # Representation
//
//  A `String` is made up of three components: a pointer to some bytes, a
//  length, and a capacity. The pointer points to the internal buffer which
//  `String` uses to store its data. The length is the number of bytes currently
//  stored in the buffer, and the capacity is the size of the buffer in bytes.
//  As such, the length will always be less than or equal to the capacity.
//
//  This buffer is always stored on the heap.
//
//  You can look at these with the [`as_ptr`], [`len`], and [`capacity`]
//  methods:
//
//  ```
//  let story = String::from("Once upon a time...");
//
//  // Deconstruct the String into parts.
//  let (ptr, len, capacity) = story.into_raw_parts();
//
//  // story has nineteen bytes
//  assert_eq!(19, len);
//
//  // We can re-build a String out of ptr, len, and capacity. This is all
//  // unsafe because we are responsible for making sure the components are
//  // valid:
//  let s = unsafe { String::from_raw_parts(ptr, len, capacity) } ;
//
//  assert_eq!(String::from("Once upon a time..."), s);
//  ```
//
//  [`as_ptr`]: str::as_ptr
//  [`len`]: String::len
//  [`capacity`]: String::capacity
//
//  If a `String` has enough capacity, adding elements to it will not
//  re-allocate. For example, consider this program:
//
//  ```
//  let mut s = String::new();
//
//  println!("{}", s.capacity());
//
//  for _ in 0..5 {
//      s.push_str("hello");
//      println!("{}", s.capacity());
//  }
//  ```
//
//  This will output the following:
//
//  ```text
//  0
//  8
//  16
//  16
//  32
//  32
//  ```
//
//  At first, we have no memory allocated at all, but as we append to the
//  string, it increases its capacity appropriately. If we instead use the
//  [`with_capacity`] method to allocate the correct capacity initially:
//
//  ```
//  let mut s = String::with_capacity(25);
//
//  println!("{}", s.capacity());
//
//  for _ in 0..5 {
//      s.push_str("hello");
//      println!("{}", s.capacity());
//  }
//  ```
//
//  [`with_capacity`]: String::with_capacity
//
//  We end up with a different output:
//
//  ```text
//  25
//  25
//  25
//  25
//  25
//  25
//  ```
//
//  Here, there's no need to allocate more memory inside the loop.
//
//  [str]: prim@str "str"
//  [`str`]: prim@str "str"
//  [`&str`]: prim@str "&str"
//  [Deref]: core::ops::Deref "ops::Deref"
//  [`Deref`]: core::ops::Deref "ops::Deref"
//  [`as_str()`]: String::as_str
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/string.rs;l=353
using String CRUBIT_INTERNAL_RUST_TYPE(":: alloc :: string :: String") =
    ::rs::alloc::string::String;
}  // namespace rs::std::prelude::rust_2018

namespace rs::std::prelude::rust_2021 {

//  A UTF-8–encoded, growable string.
//
//  `String` is the most common string type. It has ownership over the contents
//  of the string, stored in a heap-allocated buffer (see
//  [Representation](#representation)). It is closely related to its borrowed
//  counterpart, the primitive [`str`].
//
//  # Examples
//
//  You can create a `String` from [a literal string][`&str`] with
//  [`String::from`]:
//
//  [`String::from`]: From::from
//
//  ```
//  let hello = String::from("Hello, world!");
//  ```
//
//  You can append a [`char`] to a `String` with the [`push`] method, and
//  append a [`&str`] with the [`push_str`] method:
//
//  ```
//  let mut hello = String::from("Hello, ");
//
//  hello.push('w');
//  hello.push_str("orld!");
//  ```
//
//  [`push`]: String::push
//  [`push_str`]: String::push_str
//
//  If you have a vector of UTF-8 bytes, you can create a `String` from it with
//  the [`from_utf8`] method:
//
//  ```
//  // some bytes, in a vector
//  let sparkle_heart = vec![240, 159, 146, 150];
//
//  // We know these bytes are valid, so we'll use `unwrap()`.
//  let sparkle_heart = String::from_utf8(sparkle_heart).unwrap();
//
//  assert_eq!("💖", sparkle_heart);
//  ```
//
//  [`from_utf8`]: String::from_utf8
//
//  # UTF-8
//
//  `String`s are always valid UTF-8. If you need a non-UTF-8 string, consider
//  [`OsString`]. It is similar, but without the UTF-8 constraint. Because UTF-8
//  is a variable width encoding, `String`s are typically smaller than an array
//  of the same `char`s:
//
//  ```
//  // `s` is ASCII which represents each `char` as one byte
//  let s = "hello";
//  assert_eq!(s.len(), 5);
//
//  // A `char` array with the same contents would be longer because
//  // every `char` is four bytes
//  let s = ['h', 'e', 'l', 'l', 'o'];
//  let size: usize = s.into_iter().map(|c| size_of_val(&c)).sum();
//  assert_eq!(size, 20);
//
//  // However, for non-ASCII strings, the difference will be smaller
//  // and sometimes they are the same
//  let s = "💖💖💖💖💖";
//  assert_eq!(s.len(), 20);
//
//  let s = ['💖', '💖', '💖', '💖', '💖'];
//  let size: usize = s.into_iter().map(|c| size_of_val(&c)).sum();
//  assert_eq!(size, 20);
//  ```
//
//  This raises interesting questions as to how `s[i]` should work.
//  What should `i` be here? Several options include byte indices and
//  `char` indices but, because of UTF-8 encoding, only byte indices
//  would provide constant time indexing. Getting the `i`th `char`, for
//  example, is available using [`chars`]:
//
//  ```
//  let s = "hello";
//  let third_character = s.chars().nth(2);
//  assert_eq!(third_character, Some('l'));
//
//  let s = "💖💖💖💖💖";
//  let third_character = s.chars().nth(2);
//  assert_eq!(third_character, Some('💖'));
//  ```
//
//  Next, what should `s[i]` return? Because indexing returns a reference
//  to underlying data it could be `&u8`, `&[u8]`, or something similar.
//  Since we're only providing one index, `&u8` makes the most sense but that
//  might not be what the user expects and can be explicitly achieved with
//  [`as_bytes()`]:
//
//  ```
//  // The first byte is 104 - the byte value of `'h'`
//  let s = "hello";
//  assert_eq!(s.as_bytes()[0], 104);
//  // or
//  assert_eq!(s.as_bytes()[0], b'h');
//
//  // The first byte is 240 which isn't obviously useful
//  let s = "💖💖💖💖💖";
//  assert_eq!(s.as_bytes()[0], 240);
//  ```
//
//  Due to these ambiguities/restrictions, indexing with a `usize` is simply
//  forbidden:
//
//  ```compile_fail,E0277
//  let s = "hello";
//
//  // The following will not compile!
//  println!("The first letter of s is {}", s[0]);
//  ```
//
//  It is more clear, however, how `&s[i..j]` should work (that is,
//  indexing with a range). It should accept byte indices (to be constant-time)
//  and return a `&str` which is UTF-8 encoded. This is also called "string
//  slicing". Note this will panic if the byte indices provided are not
//  character boundaries - see [`is_char_boundary`] for more details. See the
//  implementations for [`SliceIndex<str>`] for more details on string slicing.
//  For a non-panicking version of string slicing, see [`get`].
//
//  [`OsString`]: ../../std/ffi/struct.OsString.html "ffi::OsString"
//  [`SliceIndex<str>`]: core::slice::SliceIndex
//  [`as_bytes()`]: str::as_bytes
//  [`get`]: str::get
//  [`is_char_boundary`]: str::is_char_boundary
//
//  The [`bytes`] and [`chars`] methods return iterators over the bytes and
//  codepoints of the string, respectively. To iterate over codepoints along
//  with byte indices, use [`char_indices`].
//
//  [`bytes`]: str::bytes
//  [`chars`]: str::chars
//  [`char_indices`]: str::char_indices
//
//  # Deref
//
//  `String` implements <code>[Deref]<Target = [str]></code>, and so inherits
//  all of [`str`]'s methods. In addition, this means that you can pass a
//  `String` to a function which takes a [`&str`] by using an ampersand (`&`):
//
//  ```
//  fn takes_str(s: &str) { }
//
//  let s = String::from("Hello");
//
//  takes_str(&s);
//  ```
//
//  This will create a [`&str`] from the `String` and pass it in. This
//  conversion is very inexpensive, and so generally, functions will accept
//  [`&str`]s as arguments unless they need a `String` for some specific
//  reason.
//
//  In certain cases Rust doesn't have enough information to make this
//  conversion, known as [`Deref`] coercion. In the following example a string
//  slice [`&'a str`][`&str`] implements the trait `TraitExample`, and the
//  function `example_func` takes anything that implements the trait. In this
//  case Rust would need to make two implicit conversions, which Rust doesn't
//  have the means to do. For that reason, the following example will not
//  compile.
//
//  ```compile_fail,E0277
//  trait TraitExample {}
//
//  impl<'a> TraitExample for &'a str {}
//
//  fn example_func<A: TraitExample>(example_arg: A) {}
//
//  let example_string = String::from("example_string");
//  example_func(&example_string);
//  ```
//
//  There are two options that would work instead. The first would be to
//  change the line `example_func(&example_string);` to
//  `example_func(example_string.as_str());`, using the method [`as_str()`]
//  to explicitly extract the string slice containing the string. The second
//  way changes `example_func(&example_string);` to
//  `example_func(&*example_string);`. In this case we are dereferencing a
//  `String` to a [`str`], then referencing the [`str`] back to
//  [`&str`]. The second way is more idiomatic, however both work to do the
//  conversion explicitly rather than relying on the implicit conversion.
//
//  # Representation
//
//  A `String` is made up of three components: a pointer to some bytes, a
//  length, and a capacity. The pointer points to the internal buffer which
//  `String` uses to store its data. The length is the number of bytes currently
//  stored in the buffer, and the capacity is the size of the buffer in bytes.
//  As such, the length will always be less than or equal to the capacity.
//
//  This buffer is always stored on the heap.
//
//  You can look at these with the [`as_ptr`], [`len`], and [`capacity`]
//  methods:
//
//  ```
//  let story = String::from("Once upon a time...");
//
//  // Deconstruct the String into parts.
//  let (ptr, len, capacity) = story.into_raw_parts();
//
//  // story has nineteen bytes
//  assert_eq!(19, len);
//
//  // We can re-build a String out of ptr, len, and capacity. This is all
//  // unsafe because we are responsible for making sure the components are
//  // valid:
//  let s = unsafe { String::from_raw_parts(ptr, len, capacity) } ;
//
//  assert_eq!(String::from("Once upon a time..."), s);
//  ```
//
//  [`as_ptr`]: str::as_ptr
//  [`len`]: String::len
//  [`capacity`]: String::capacity
//
//  If a `String` has enough capacity, adding elements to it will not
//  re-allocate. For example, consider this program:
//
//  ```
//  let mut s = String::new();
//
//  println!("{}", s.capacity());
//
//  for _ in 0..5 {
//      s.push_str("hello");
//      println!("{}", s.capacity());
//  }
//  ```
//
//  This will output the following:
//
//  ```text
//  0
//  8
//  16
//  16
//  32
//  32
//  ```
//
//  At first, we have no memory allocated at all, but as we append to the
//  string, it increases its capacity appropriately. If we instead use the
//  [`with_capacity`] method to allocate the correct capacity initially:
//
//  ```
//  let mut s = String::with_capacity(25);
//
//  println!("{}", s.capacity());
//
//  for _ in 0..5 {
//      s.push_str("hello");
//      println!("{}", s.capacity());
//  }
//  ```
//
//  [`with_capacity`]: String::with_capacity
//
//  We end up with a different output:
//
//  ```text
//  25
//  25
//  25
//  25
//  25
//  25
//  ```
//
//  Here, there's no need to allocate more memory inside the loop.
//
//  [str]: prim@str "str"
//  [`str`]: prim@str "str"
//  [`&str`]: prim@str "&str"
//  [Deref]: core::ops::Deref "ops::Deref"
//  [`Deref`]: core::ops::Deref "ops::Deref"
//  [`as_str()`]: String::as_str
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/string.rs;l=353
using String CRUBIT_INTERNAL_RUST_TYPE(":: alloc :: string :: String") =
    ::rs::alloc::string::String;
}  // namespace rs::std::prelude::rust_2021

namespace rs::std::prelude::rust_2024 {

//  A UTF-8–encoded, growable string.
//
//  `String` is the most common string type. It has ownership over the contents
//  of the string, stored in a heap-allocated buffer (see
//  [Representation](#representation)). It is closely related to its borrowed
//  counterpart, the primitive [`str`].
//
//  # Examples
//
//  You can create a `String` from [a literal string][`&str`] with
//  [`String::from`]:
//
//  [`String::from`]: From::from
//
//  ```
//  let hello = String::from("Hello, world!");
//  ```
//
//  You can append a [`char`] to a `String` with the [`push`] method, and
//  append a [`&str`] with the [`push_str`] method:
//
//  ```
//  let mut hello = String::from("Hello, ");
//
//  hello.push('w');
//  hello.push_str("orld!");
//  ```
//
//  [`push`]: String::push
//  [`push_str`]: String::push_str
//
//  If you have a vector of UTF-8 bytes, you can create a `String` from it with
//  the [`from_utf8`] method:
//
//  ```
//  // some bytes, in a vector
//  let sparkle_heart = vec![240, 159, 146, 150];
//
//  // We know these bytes are valid, so we'll use `unwrap()`.
//  let sparkle_heart = String::from_utf8(sparkle_heart).unwrap();
//
//  assert_eq!("💖", sparkle_heart);
//  ```
//
//  [`from_utf8`]: String::from_utf8
//
//  # UTF-8
//
//  `String`s are always valid UTF-8. If you need a non-UTF-8 string, consider
//  [`OsString`]. It is similar, but without the UTF-8 constraint. Because UTF-8
//  is a variable width encoding, `String`s are typically smaller than an array
//  of the same `char`s:
//
//  ```
//  // `s` is ASCII which represents each `char` as one byte
//  let s = "hello";
//  assert_eq!(s.len(), 5);
//
//  // A `char` array with the same contents would be longer because
//  // every `char` is four bytes
//  let s = ['h', 'e', 'l', 'l', 'o'];
//  let size: usize = s.into_iter().map(|c| size_of_val(&c)).sum();
//  assert_eq!(size, 20);
//
//  // However, for non-ASCII strings, the difference will be smaller
//  // and sometimes they are the same
//  let s = "💖💖💖💖💖";
//  assert_eq!(s.len(), 20);
//
//  let s = ['💖', '💖', '💖', '💖', '💖'];
//  let size: usize = s.into_iter().map(|c| size_of_val(&c)).sum();
//  assert_eq!(size, 20);
//  ```
//
//  This raises interesting questions as to how `s[i]` should work.
//  What should `i` be here? Several options include byte indices and
//  `char` indices but, because of UTF-8 encoding, only byte indices
//  would provide constant time indexing. Getting the `i`th `char`, for
//  example, is available using [`chars`]:
//
//  ```
//  let s = "hello";
//  let third_character = s.chars().nth(2);
//  assert_eq!(third_character, Some('l'));
//
//  let s = "💖💖💖💖💖";
//  let third_character = s.chars().nth(2);
//  assert_eq!(third_character, Some('💖'));
//  ```
//
//  Next, what should `s[i]` return? Because indexing returns a reference
//  to underlying data it could be `&u8`, `&[u8]`, or something similar.
//  Since we're only providing one index, `&u8` makes the most sense but that
//  might not be what the user expects and can be explicitly achieved with
//  [`as_bytes()`]:
//
//  ```
//  // The first byte is 104 - the byte value of `'h'`
//  let s = "hello";
//  assert_eq!(s.as_bytes()[0], 104);
//  // or
//  assert_eq!(s.as_bytes()[0], b'h');
//
//  // The first byte is 240 which isn't obviously useful
//  let s = "💖💖💖💖💖";
//  assert_eq!(s.as_bytes()[0], 240);
//  ```
//
//  Due to these ambiguities/restrictions, indexing with a `usize` is simply
//  forbidden:
//
//  ```compile_fail,E0277
//  let s = "hello";
//
//  // The following will not compile!
//  println!("The first letter of s is {}", s[0]);
//  ```
//
//  It is more clear, however, how `&s[i..j]` should work (that is,
//  indexing with a range). It should accept byte indices (to be constant-time)
//  and return a `&str` which is UTF-8 encoded. This is also called "string
//  slicing". Note this will panic if the byte indices provided are not
//  character boundaries - see [`is_char_boundary`] for more details. See the
//  implementations for [`SliceIndex<str>`] for more details on string slicing.
//  For a non-panicking version of string slicing, see [`get`].
//
//  [`OsString`]: ../../std/ffi/struct.OsString.html "ffi::OsString"
//  [`SliceIndex<str>`]: core::slice::SliceIndex
//  [`as_bytes()`]: str::as_bytes
//  [`get`]: str::get
//  [`is_char_boundary`]: str::is_char_boundary
//
//  The [`bytes`] and [`chars`] methods return iterators over the bytes and
//  codepoints of the string, respectively. To iterate over codepoints along
//  with byte indices, use [`char_indices`].
//
//  [`bytes`]: str::bytes
//  [`chars`]: str::chars
//  [`char_indices`]: str::char_indices
//
//  # Deref
//
//  `String` implements <code>[Deref]<Target = [str]></code>, and so inherits
//  all of [`str`]'s methods. In addition, this means that you can pass a
//  `String` to a function which takes a [`&str`] by using an ampersand (`&`):
//
//  ```
//  fn takes_str(s: &str) { }
//
//  let s = String::from("Hello");
//
//  takes_str(&s);
//  ```
//
//  This will create a [`&str`] from the `String` and pass it in. This
//  conversion is very inexpensive, and so generally, functions will accept
//  [`&str`]s as arguments unless they need a `String` for some specific
//  reason.
//
//  In certain cases Rust doesn't have enough information to make this
//  conversion, known as [`Deref`] coercion. In the following example a string
//  slice [`&'a str`][`&str`] implements the trait `TraitExample`, and the
//  function `example_func` takes anything that implements the trait. In this
//  case Rust would need to make two implicit conversions, which Rust doesn't
//  have the means to do. For that reason, the following example will not
//  compile.
//
//  ```compile_fail,E0277
//  trait TraitExample {}
//
//  impl<'a> TraitExample for &'a str {}
//
//  fn example_func<A: TraitExample>(example_arg: A) {}
//
//  let example_string = String::from("example_string");
//  example_func(&example_string);
//  ```
//
//  There are two options that would work instead. The first would be to
//  change the line `example_func(&example_string);` to
//  `example_func(example_string.as_str());`, using the method [`as_str()`]
//  to explicitly extract the string slice containing the string. The second
//  way changes `example_func(&example_string);` to
//  `example_func(&*example_string);`. In this case we are dereferencing a
//  `String` to a [`str`], then referencing the [`str`] back to
//  [`&str`]. The second way is more idiomatic, however both work to do the
//  conversion explicitly rather than relying on the implicit conversion.
//
//  # Representation
//
//  A `String` is made up of three components: a pointer to some bytes, a
//  length, and a capacity. The pointer points to the internal buffer which
//  `String` uses to store its data. The length is the number of bytes currently
//  stored in the buffer, and the capacity is the size of the buffer in bytes.
//  As such, the length will always be less than or equal to the capacity.
//
//  This buffer is always stored on the heap.
//
//  You can look at these with the [`as_ptr`], [`len`], and [`capacity`]
//  methods:
//
//  ```
//  let story = String::from("Once upon a time...");
//
//  // Deconstruct the String into parts.
//  let (ptr, len, capacity) = story.into_raw_parts();
//
//  // story has nineteen bytes
//  assert_eq!(19, len);
//
//  // We can re-build a String out of ptr, len, and capacity. This is all
//  // unsafe because we are responsible for making sure the components are
//  // valid:
//  let s = unsafe { String::from_raw_parts(ptr, len, capacity) } ;
//
//  assert_eq!(String::from("Once upon a time..."), s);
//  ```
//
//  [`as_ptr`]: str::as_ptr
//  [`len`]: String::len
//  [`capacity`]: String::capacity
//
//  If a `String` has enough capacity, adding elements to it will not
//  re-allocate. For example, consider this program:
//
//  ```
//  let mut s = String::new();
//
//  println!("{}", s.capacity());
//
//  for _ in 0..5 {
//      s.push_str("hello");
//      println!("{}", s.capacity());
//  }
//  ```
//
//  This will output the following:
//
//  ```text
//  0
//  8
//  16
//  16
//  32
//  32
//  ```
//
//  At first, we have no memory allocated at all, but as we append to the
//  string, it increases its capacity appropriately. If we instead use the
//  [`with_capacity`] method to allocate the correct capacity initially:
//
//  ```
//  let mut s = String::with_capacity(25);
//
//  println!("{}", s.capacity());
//
//  for _ in 0..5 {
//      s.push_str("hello");
//      println!("{}", s.capacity());
//  }
//  ```
//
//  [`with_capacity`]: String::with_capacity
//
//  We end up with a different output:
//
//  ```text
//  25
//  25
//  25
//  25
//  25
//  25
//  ```
//
//  Here, there's no need to allocate more memory inside the loop.
//
//  [str]: prim@str "str"
//  [`str`]: prim@str "str"
//  [`&str`]: prim@str "&str"
//  [Deref]: core::ops::Deref "ops::Deref"
//  [`Deref`]: core::ops::Deref "ops::Deref"
//  [`as_str()`]: String::as_str
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/string.rs;l=353
using String CRUBIT_INTERNAL_RUST_TYPE(":: alloc :: string :: String") =
    ::rs::alloc::string::String;
}  // namespace rs::std::prelude::rust_2024

namespace rs::std::prelude::v1 {

//  A UTF-8–encoded, growable string.
//
//  `String` is the most common string type. It has ownership over the contents
//  of the string, stored in a heap-allocated buffer (see
//  [Representation](#representation)). It is closely related to its borrowed
//  counterpart, the primitive [`str`].
//
//  # Examples
//
//  You can create a `String` from [a literal string][`&str`] with
//  [`String::from`]:
//
//  [`String::from`]: From::from
//
//  ```
//  let hello = String::from("Hello, world!");
//  ```
//
//  You can append a [`char`] to a `String` with the [`push`] method, and
//  append a [`&str`] with the [`push_str`] method:
//
//  ```
//  let mut hello = String::from("Hello, ");
//
//  hello.push('w');
//  hello.push_str("orld!");
//  ```
//
//  [`push`]: String::push
//  [`push_str`]: String::push_str
//
//  If you have a vector of UTF-8 bytes, you can create a `String` from it with
//  the [`from_utf8`] method:
//
//  ```
//  // some bytes, in a vector
//  let sparkle_heart = vec![240, 159, 146, 150];
//
//  // We know these bytes are valid, so we'll use `unwrap()`.
//  let sparkle_heart = String::from_utf8(sparkle_heart).unwrap();
//
//  assert_eq!("💖", sparkle_heart);
//  ```
//
//  [`from_utf8`]: String::from_utf8
//
//  # UTF-8
//
//  `String`s are always valid UTF-8. If you need a non-UTF-8 string, consider
//  [`OsString`]. It is similar, but without the UTF-8 constraint. Because UTF-8
//  is a variable width encoding, `String`s are typically smaller than an array
//  of the same `char`s:
//
//  ```
//  // `s` is ASCII which represents each `char` as one byte
//  let s = "hello";
//  assert_eq!(s.len(), 5);
//
//  // A `char` array with the same contents would be longer because
//  // every `char` is four bytes
//  let s = ['h', 'e', 'l', 'l', 'o'];
//  let size: usize = s.into_iter().map(|c| size_of_val(&c)).sum();
//  assert_eq!(size, 20);
//
//  // However, for non-ASCII strings, the difference will be smaller
//  // and sometimes they are the same
//  let s = "💖💖💖💖💖";
//  assert_eq!(s.len(), 20);
//
//  let s = ['💖', '💖', '💖', '💖', '💖'];
//  let size: usize = s.into_iter().map(|c| size_of_val(&c)).sum();
//  assert_eq!(size, 20);
//  ```
//
//  This raises interesting questions as to how `s[i]` should work.
//  What should `i` be here? Several options include byte indices and
//  `char` indices but, because of UTF-8 encoding, only byte indices
//  would provide constant time indexing. Getting the `i`th `char`, for
//  example, is available using [`chars`]:
//
//  ```
//  let s = "hello";
//  let third_character = s.chars().nth(2);
//  assert_eq!(third_character, Some('l'));
//
//  let s = "💖💖💖💖💖";
//  let third_character = s.chars().nth(2);
//  assert_eq!(third_character, Some('💖'));
//  ```
//
//  Next, what should `s[i]` return? Because indexing returns a reference
//  to underlying data it could be `&u8`, `&[u8]`, or something similar.
//  Since we're only providing one index, `&u8` makes the most sense but that
//  might not be what the user expects and can be explicitly achieved with
//  [`as_bytes()`]:
//
//  ```
//  // The first byte is 104 - the byte value of `'h'`
//  let s = "hello";
//  assert_eq!(s.as_bytes()[0], 104);
//  // or
//  assert_eq!(s.as_bytes()[0], b'h');
//
//  // The first byte is 240 which isn't obviously useful
//  let s = "💖💖💖💖💖";
//  assert_eq!(s.as_bytes()[0], 240);
//  ```
//
//  Due to these ambiguities/restrictions, indexing with a `usize` is simply
//  forbidden:
//
//  ```compile_fail,E0277
//  let s = "hello";
//
//  // The following will not compile!
//  println!("The first letter of s is {}", s[0]);
//  ```
//
//  It is more clear, however, how `&s[i..j]` should work (that is,
//  indexing with a range). It should accept byte indices (to be constant-time)
//  and return a `&str` which is UTF-8 encoded. This is also called "string
//  slicing". Note this will panic if the byte indices provided are not
//  character boundaries - see [`is_char_boundary`] for more details. See the
//  implementations for [`SliceIndex<str>`] for more details on string slicing.
//  For a non-panicking version of string slicing, see [`get`].
//
//  [`OsString`]: ../../std/ffi/struct.OsString.html "ffi::OsString"
//  [`SliceIndex<str>`]: core::slice::SliceIndex
//  [`as_bytes()`]: str::as_bytes
//  [`get`]: str::get
//  [`is_char_boundary`]: str::is_char_boundary
//
//  The [`bytes`] and [`chars`] methods return iterators over the bytes and
//  codepoints of the string, respectively. To iterate over codepoints along
//  with byte indices, use [`char_indices`].
//
//  [`bytes`]: str::bytes
//  [`chars`]: str::chars
//  [`char_indices`]: str::char_indices
//
//  # Deref
//
//  `String` implements <code>[Deref]<Target = [str]></code>, and so inherits
//  all of [`str`]'s methods. In addition, this means that you can pass a
//  `String` to a function which takes a [`&str`] by using an ampersand (`&`):
//
//  ```
//  fn takes_str(s: &str) { }
//
//  let s = String::from("Hello");
//
//  takes_str(&s);
//  ```
//
//  This will create a [`&str`] from the `String` and pass it in. This
//  conversion is very inexpensive, and so generally, functions will accept
//  [`&str`]s as arguments unless they need a `String` for some specific
//  reason.
//
//  In certain cases Rust doesn't have enough information to make this
//  conversion, known as [`Deref`] coercion. In the following example a string
//  slice [`&'a str`][`&str`] implements the trait `TraitExample`, and the
//  function `example_func` takes anything that implements the trait. In this
//  case Rust would need to make two implicit conversions, which Rust doesn't
//  have the means to do. For that reason, the following example will not
//  compile.
//
//  ```compile_fail,E0277
//  trait TraitExample {}
//
//  impl<'a> TraitExample for &'a str {}
//
//  fn example_func<A: TraitExample>(example_arg: A) {}
//
//  let example_string = String::from("example_string");
//  example_func(&example_string);
//  ```
//
//  There are two options that would work instead. The first would be to
//  change the line `example_func(&example_string);` to
//  `example_func(example_string.as_str());`, using the method [`as_str()`]
//  to explicitly extract the string slice containing the string. The second
//  way changes `example_func(&example_string);` to
//  `example_func(&*example_string);`. In this case we are dereferencing a
//  `String` to a [`str`], then referencing the [`str`] back to
//  [`&str`]. The second way is more idiomatic, however both work to do the
//  conversion explicitly rather than relying on the implicit conversion.
//
//  # Representation
//
//  A `String` is made up of three components: a pointer to some bytes, a
//  length, and a capacity. The pointer points to the internal buffer which
//  `String` uses to store its data. The length is the number of bytes currently
//  stored in the buffer, and the capacity is the size of the buffer in bytes.
//  As such, the length will always be less than or equal to the capacity.
//
//  This buffer is always stored on the heap.
//
//  You can look at these with the [`as_ptr`], [`len`], and [`capacity`]
//  methods:
//
//  ```
//  let story = String::from("Once upon a time...");
//
//  // Deconstruct the String into parts.
//  let (ptr, len, capacity) = story.into_raw_parts();
//
//  // story has nineteen bytes
//  assert_eq!(19, len);
//
//  // We can re-build a String out of ptr, len, and capacity. This is all
//  // unsafe because we are responsible for making sure the components are
//  // valid:
//  let s = unsafe { String::from_raw_parts(ptr, len, capacity) } ;
//
//  assert_eq!(String::from("Once upon a time..."), s);
//  ```
//
//  [`as_ptr`]: str::as_ptr
//  [`len`]: String::len
//  [`capacity`]: String::capacity
//
//  If a `String` has enough capacity, adding elements to it will not
//  re-allocate. For example, consider this program:
//
//  ```
//  let mut s = String::new();
//
//  println!("{}", s.capacity());
//
//  for _ in 0..5 {
//      s.push_str("hello");
//      println!("{}", s.capacity());
//  }
//  ```
//
//  This will output the following:
//
//  ```text
//  0
//  8
//  16
//  16
//  32
//  32
//  ```
//
//  At first, we have no memory allocated at all, but as we append to the
//  string, it increases its capacity appropriately. If we instead use the
//  [`with_capacity`] method to allocate the correct capacity initially:
//
//  ```
//  let mut s = String::with_capacity(25);
//
//  println!("{}", s.capacity());
//
//  for _ in 0..5 {
//      s.push_str("hello");
//      println!("{}", s.capacity());
//  }
//  ```
//
//  [`with_capacity`]: String::with_capacity
//
//  We end up with a different output:
//
//  ```text
//  25
//  25
//  25
//  25
//  25
//  25
//  ```
//
//  Here, there's no need to allocate more memory inside the loop.
//
//  [str]: prim@str "str"
//  [`str`]: prim@str "str"
//  [`&str`]: prim@str "&str"
//  [Deref]: core::ops::Deref "ops::Deref"
//  [`Deref`]: core::ops::Deref "ops::Deref"
//  [`as_str()`]: String::as_str
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/string.rs;l=353
using String CRUBIT_INTERNAL_RUST_TYPE(":: alloc :: string :: String") =
    ::rs::alloc::string::String;
}  // namespace rs::std::prelude::v1

namespace rs::std::string {
using ::rs::alloc::string::ToString;
}

namespace rs::std::prelude::rust_2015 {
using ::rs::alloc::string::ToString;
}

namespace rs::std::prelude::rust_2018 {
using ::rs::alloc::string::ToString;
}

namespace rs::std::prelude::rust_2021 {
using ::rs::alloc::string::ToString;
}

namespace rs::std::prelude::rust_2024 {
using ::rs::alloc::string::ToString;
}

namespace rs::std::prelude::v1 {
using ::rs::alloc::string::ToString;
}

namespace rs::std::sync {

// Error generating bindings for struct `alloc_crate::sync::Arc` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/sync.rs;l=269:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for struct `alloc_crate::sync::Weak` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/sync.rs;l=348:
// Generic types are not supported yet (b/259749095)

}  // namespace rs::std::sync

namespace rs::std::task {
using ::rs::alloc::task::Wake;
}

namespace rs::std {

// Error generating bindings for macro `alloc_crate::vec` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/macros.rs;l=43:
// Unsupported use statement that refers to this type of the entity:
// alloc_crate::vec of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2015 {

// Error generating bindings for macro `alloc_crate::vec` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/macros.rs;l=43:
// Unsupported use statement that refers to this type of the entity:
// alloc_crate::vec of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2018 {

// Error generating bindings for macro `alloc_crate::vec` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/macros.rs;l=43:
// Unsupported use statement that refers to this type of the entity:
// alloc_crate::vec of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for macro `alloc_crate::vec` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/macros.rs;l=43:
// Unsupported use statement that refers to this type of the entity:
// alloc_crate::vec of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for macro `alloc_crate::vec` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/macros.rs;l=43:
// Unsupported use statement that refers to this type of the entity:
// alloc_crate::vec of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::v1 {

// Error generating bindings for macro `alloc_crate::vec` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/macros.rs;l=43:
// Unsupported use statement that refers to this type of the entity:
// alloc_crate::vec of kind Macro(MacroKinds(1))

}

namespace rs::std {

// Error generating bindings for module `alloc_crate::vec` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/lib.rs;l=267:
// Unsupported use statement that refers to this type of the entity:
// alloc_crate::vec of kind Mod

}

namespace rs::std::vec {

// Error generating bindings for struct `alloc_crate::vec::Drain` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/vec/drain.rs;l=21:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::vec {

// Error generating bindings for struct `alloc_crate::vec::ExtractIf` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/vec/extract_if.rs;l=21:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::vec {

// Error generating bindings for struct `alloc_crate::vec::IntoIter` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/vec/into_iter.rs;l=45:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::vec {

// Error generating bindings for struct `alloc_crate::vec::Splice` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/vec/splice.rs;l=20:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::vec {

// Error generating bindings for struct `alloc_crate::vec::Vec` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/vec/mod.rs;l=436:
// crubit.rs/errors/unsupported_type: Generic type parameter `T` is not
// supported without monomorphization

}

namespace rs::std::prelude::rust_2015 {

// Error generating bindings for struct `alloc_crate::vec::Vec` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/vec/mod.rs;l=436:
// crubit.rs/errors/unsupported_type: Generic type parameter `T` is not
// supported without monomorphization

}

namespace rs::std::prelude::rust_2018 {

// Error generating bindings for struct `alloc_crate::vec::Vec` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/vec/mod.rs;l=436:
// crubit.rs/errors/unsupported_type: Generic type parameter `T` is not
// supported without monomorphization

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for struct `alloc_crate::vec::Vec` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/vec/mod.rs;l=436:
// crubit.rs/errors/unsupported_type: Generic type parameter `T` is not
// supported without monomorphization

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for struct `alloc_crate::vec::Vec` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/vec/mod.rs;l=436:
// crubit.rs/errors/unsupported_type: Generic type parameter `T` is not
// supported without monomorphization

}

namespace rs::std::prelude::v1 {

// Error generating bindings for struct `alloc_crate::vec::Vec` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/vec/mod.rs;l=436:
// crubit.rs/errors/unsupported_type: Generic type parameter `T` is not
// supported without monomorphization

}

namespace rs::std::vec {

// Error generating bindings for function `alloc_crate::vec::from_elem` defined
// at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/vec/mod.rs;l=3772:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

}

namespace rs::std::backtrace {

static_assert(
    sizeof(Backtrace) == 48,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(Backtrace) == 8,
    "Verify that ADT layout didn't change since this header got generated");
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std9backtrace9BacktraceNtNtNtCs9kG8YiNG2f0_u4core3ops4drop4Drop4dropB6_u(
    ::rs::std::backtrace::Backtrace&);
}
inline Backtrace::~Backtrace() {
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std9backtrace9BacktraceNtNtNtCs9kG8YiNG2f0_u4core3ops4drop4Drop4dropB6_u(
          *this);
}
inline ::rs::std::backtrace::Backtrace::Backtrace(::crubit::UnsafeRelocateTag,
                                                  Backtrace&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMs2_uNtCsb7ytMsthdgm_u3std9backtraceNtB5_u9Backtrace7capture(
    ::rs::std::backtrace::Backtrace* __ret_ptr);
}
inline ::rs::std::backtrace::Backtrace Backtrace::capture() {
  crubit::Slot<::rs::std::backtrace::Backtrace> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMs2_uNtCsb7ytMsthdgm_u3std9backtraceNtB5_u9Backtrace7capture(
          __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMs2_uNtCsb7ytMsthdgm_u3std9backtraceNtB5_u9Backtrace13force_ucapture(
    ::rs::std::backtrace::Backtrace* __ret_ptr);
}
inline ::rs::std::backtrace::Backtrace Backtrace::force_capture() {
  crubit::Slot<::rs::std::backtrace::Backtrace> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMs2_uNtCsb7ytMsthdgm_u3std9backtraceNtB5_u9Backtrace13force_ucapture(
          __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMs2_uNtCsb7ytMsthdgm_u3std9backtraceNtB5_u9Backtrace8disabled(
    ::rs::std::backtrace::Backtrace* __ret_ptr);
}
inline ::rs::std::backtrace::Backtrace Backtrace::disabled() {
  crubit::Slot<::rs::std::backtrace::Backtrace> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMs2_uNtCsb7ytMsthdgm_u3std9backtraceNtB5_u9Backtrace8disabled(
          __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMs2_uNtCsb7ytMsthdgm_u3std9backtraceNtB5_u9Backtrace6status(
    ::rs::std::backtrace::Backtrace const&,
    ::rs::std::backtrace::BacktraceStatus* __ret_ptr);
}
inline ::rs::std::backtrace::BacktraceStatus Backtrace::status() const {
  auto&& self = *this;
  crubit::Slot<::rs::std::backtrace::BacktraceStatus>
      __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMs2_uNtCsb7ytMsthdgm_u3std9backtraceNtB5_u9Backtrace6status(
          self, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std9backtrace9BacktraceNtNtCsaddbpR6HRqH_u5alloc6string8ToString9to_ustringB6_u(
    ::rs::std::backtrace::Backtrace const&,
    ::rs::alloc::string::String* __ret_ptr);
inline void Backtrace::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(Backtrace, inner));
}
static_assert(
    sizeof(BacktraceStatus) == 1,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(BacktraceStatus) == 1,
    "Verify that ADT layout didn't change since this header got generated");

// `static` constructor
inline constexpr BacktraceStatus BacktraceStatus::MakeUnsupported() {
  return BacktraceStatus(PrivateBytesTag{}, {0});
}

// `static` constructor
inline constexpr BacktraceStatus BacktraceStatus::MakeDisabled() {
  return BacktraceStatus(PrivateBytesTag{}, {1});
}

// `static` constructor
inline constexpr BacktraceStatus BacktraceStatus::MakeCaptured() {
  return BacktraceStatus(PrivateBytesTag{}, {2});
}
static_assert(::std::is_trivially_destructible_v<BacktraceStatus>);
static_assert(::std::is_trivially_move_constructible_v<
              ::rs::std::backtrace::BacktraceStatus>);
static_assert(::std::is_trivially_move_assignable_v<
              ::rs::std::backtrace::BacktraceStatus>);
inline ::rs::std::backtrace::BacktraceStatus::BacktraceStatus(
    ::crubit::UnsafeRelocateTag, BacktraceStatus&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}

namespace __crubit_internal {
extern "C" bool
__crubit_thunk_818b180788380d74__uRNvXs8_uNtCsb7ytMsthdgm_u3std9backtraceNtB5_u15BacktraceStatusNtNtCs9kG8YiNG2f0_u4core3cmp9PartialEq2eq(
    ::rs::std::backtrace::BacktraceStatus const&,
    ::rs::std::backtrace::BacktraceStatus const&);
}
inline bool BacktraceStatus::operator==(
    ::rs::std::backtrace::BacktraceStatus const& other) const {
  auto&& self = *this;
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXs8_uNtCsb7ytMsthdgm_u3std9backtraceNtB5_u15BacktraceStatusNtNtCs9kG8YiNG2f0_u4core3cmp9PartialEq2eq(
          self, other);
}
inline void BacktraceStatus::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(BacktraceStatus, __opaque_blob_of_bytes));
}
}  // namespace rs::std::backtrace

namespace rs::std::alloc {
using ::rs::core::alloc::GlobalAlloc;
}

namespace rs::std::alloc {

//  Layout of a block of memory.
//
//  An instance of `Layout` describes a particular layout of memory.
//  You build a `Layout` up as an input to give to an allocator.
//
//  All layouts have an associated size and a power-of-two alignment. The size,
//  when rounded up to the nearest multiple of `align`, does not overflow
//  `isize` (i.e., the rounded value will always be less than or equal to
//  `isize::MAX`).
//
//  (Note that layouts are *not* required to have non-zero size,
//  even though `GlobalAlloc` requires that all memory requests
//  be non-zero in size. A caller must either ensure that conditions
//  like this are met, use specific allocators with looser
//  requirements, or use the more lenient `Allocator` interface.)
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/alloc/layout.rs;l=30
using Layout CRUBIT_INTERNAL_RUST_TYPE(":: core :: alloc :: Layout") =
    ::rs::core::alloc::Layout;

// Error generating bindings for struct `core::alloc::LayoutError` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/alloc/layout.rs;l=612:
// Failed to format type for the definition of `core::alloc::LayoutError`:
// Zero-sized types (ZSTs) are not supported (b/258259459)

// Error generating bindings for struct `core::alloc::LayoutError` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/alloc/layout.rs;l=612:
// Failed to format type for the definition of `core::alloc::LayoutError`:
// Zero-sized types (ZSTs) are not supported (b/258259459)

}  // namespace rs::std::alloc

namespace rs::std {

// Error generating bindings for module `core::any` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/lib.rs;l=285:
// Unsupported use statement that refers to this type of the entity: core::any
// of kind Mod

}

namespace rs::std::any {
using ::rs::core::any::Any;
//  A `TypeId` represents a globally unique identifier for a type.
//
//  Each `TypeId` is an opaque object which does not allow inspection of what's
//  inside but does allow basic operations such as cloning, comparison,
//  printing, and showing.
//
//  A `TypeId` is currently only available for types which ascribe to `'static`,
//  but this limitation may be removed in the future.
//
//  While `TypeId` implements `Hash`, `PartialOrd`, and `Ord`, it is worth
//  noting that the hashes and ordering will vary between Rust releases. Beware
//  of relying on them inside of your code!
//
//  # Layout
//
//  Like other [`Rust`-representation][repr-rust] types, `TypeId`'s size and
//  layout are unstable. In particular, this means that you cannot rely on the
//  size and layout of `TypeId` remaining the same between Rust releases; they
//  are subject to change without prior notice between Rust releases.
//
//  [repr-rust]:
//  https://doc.rust-lang.org/reference/type-layout.html#r-layout.repr.rust.unspecified
//
//  # Danger of Improper Variance
//
//  You might think that subtyping is impossible between two static types,
//  but this is false; there exists a static type with a static subtype.
//  To wit, `fn(&str)`, which is short for `for<'any> fn(&'any str)`, and
//  `fn(&'static str)`, are two distinct, static types, and yet,
//  `fn(&str)` is a subtype of `fn(&'static str)`, since any value of type
//  `fn(&str)` can be used where a value of type `fn(&'static str)` is needed.
//
//  This means that abstractions around `TypeId`, despite its
//  `'static` bound on arguments, still need to worry about unnecessary
//  and improper variance: it is advisable to strive for invariance
//  first. The usability impact will be negligible, while the reduction
//  in the risk of unsoundness will be most welcome.
//
//  ## Examples
//
//  Suppose `SubType` is a subtype of `SuperType`, that is,
//  a value of type `SubType` can be used wherever
//  a value of type `SuperType` is expected.
//  Suppose also that `CoVar<T>` is a generic type, which is covariant over `T`
//  (like many other types, including `PhantomData<T>` and `Vec<T>`).
//
//  Then, by covariance, `CoVar<SubType>` is a subtype of `CoVar<SuperType>`,
//  that is, a value of type `CoVar<SubType>` can be used wherever
//  a value of type `CoVar<SuperType>` is expected.
//
//  Then if `CoVar<SuperType>` relies on `TypeId::of::<SuperType>()` to uphold
//  any invariants, those invariants may be broken because a value of type
//  `CoVar<SuperType>` can be created without going through any of its methods,
//  like so:
//  ```
//  type SubType = fn(&());
//  type SuperType = fn(&'static ());
//  type CoVar<T> = Vec<T>; // imagine something more complicated
//
//  let sub: CoVar<SubType> = CoVar::new();
//  // we have a `CoVar<SuperType>` instance without
//  // *ever* having called `CoVar::<SuperType>::new()`!
//  let fake_super: CoVar<SuperType> = sub;
//  ```
//
//  The following is an example program that tries to use `TypeId::of` to
//  implement a generic type `Unique<T>` that guarantees unique instances for
//  each `Unique<T>`, that is, for each type `T` there can be at most one value
//  of type `Unique<T>` at any time.
//
//  ```
//  mod unique {
//      use std::any::TypeId;
//      use std::collections::BTreeSet;
//      use std::marker::PhantomData;
//      use std::sync::Mutex;
//
//      static ID_SET: Mutex<BTreeSet<TypeId>> = Mutex::new(BTreeSet::new());
//
//      // TypeId has only covariant uses, which makes Unique covariant over
//      TypeAsId 🚨
//      #[derive(Debug, PartialEq)]
//      pub struct Unique<TypeAsId: 'static>(
//          // private field prevents creation without `new` outside this module
//          PhantomData<TypeAsId>,
//      );
//
//      impl<TypeAsId: 'static> Unique<TypeAsId> {
//          pub fn new() -> Option<Self> {
//              let mut set = ID_SET.lock().unwrap();
//              (set.insert(TypeId::of::<TypeAsId>())).then(||
//              Self(PhantomData))
//          }
//      }
//
//      impl<TypeAsId: 'static> Drop for Unique<TypeAsId> {
//          fn drop(&mut self) {
//              let mut set = ID_SET.lock().unwrap();
//              (!set.remove(&TypeId::of::<TypeAsId>())).then(||
//              panic!("duplicity detected"));
//          }
//      }
//  }
//
//  use unique::Unique;
//
//  // `OtherRing` is a subtype of `TheOneRing`. Both are 'static, and thus have
//  a TypeId. type TheOneRing = fn(&'static ()); type OtherRing = fn(&());
//
//  fn main() {
//      let the_one_ring: Unique<TheOneRing> = Unique::new().unwrap();
//      assert_eq!(Unique::<TheOneRing>::new(), None);
//
//      let other_ring: Unique<OtherRing> = Unique::new().unwrap();
//      // Use that `Unique<OtherRing>` is a subtype of `Unique<TheOneRing>` 🚨
//      let fake_one_ring: Unique<TheOneRing> = other_ring;
//      assert_eq!(fake_one_ring, the_one_ring);
//
//      std::mem::forget(fake_one_ring);
//  }
//  ```
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/any.rs;l=724
using TypeId CRUBIT_INTERNAL_RUST_TYPE(":: core :: any :: TypeId") =
    ::rs::core::any::TypeId;

// Error generating bindings for function `core::any::type_name` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/any.rs;l=905:
// Unable to `use` function whose bindings failed: No support for replacing an
// _unused_ generic type param: `T`

// Error generating bindings for function `core::any::type_name_of_val` defined
// at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/any.rs;l=945:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

}  // namespace rs::std::any

namespace rs::std {

// Error generating bindings for module `core::array` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/lib.rs;l=286:
// Unsupported use statement that refers to this type of the entity: core::array
// of kind Mod

}

namespace rs::std::array {

// Error generating bindings for struct `core::array::IntoIter` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/array/iter.rs;l=20:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::array {

// Error generating bindings for struct `core::array::TryFromSliceError` defined
// at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/array/mod.rs;l=183:
// Failed to format type for the definition of `core::array::TryFromSliceError`:
// Zero-sized types (ZSTs) are not supported (b/258259459)

// Error generating bindings for function `core::array::from_fn` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/array/mod.rs;l=110:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

// Error generating bindings for function `core::array::from_mut` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/array/mod.rs;l=175:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

// Error generating bindings for function `core::array::from_ref` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/array/mod.rs;l=167:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

// Error generating bindings for function `core::array::repeat` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/array/mod.rs;l=54:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

}  // namespace rs::std::array

namespace rs::std::ascii {

//  An iterator over the escaped version of a byte.
//
//  This `struct` is created by the [`escape_default`] function. See its
//  documentation for more.
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ascii.rs;l=29
using EscapeDefault CRUBIT_INTERNAL_RUST_TYPE(
    ":: core :: ascii :: EscapeDefault") = ::rs::core::ascii::EscapeDefault;
using ::rs::core::ascii::escape_default;
}  // namespace rs::std::ascii

namespace rs::std {

// Error generating bindings for macro `core::assert` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1738:
// Unsupported use statement that refers to this type of the entity:
// core::assert of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2015 {

// Error generating bindings for macro `core::assert` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1738:
// Unsupported use statement that refers to this type of the entity:
// core::assert of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2018 {

// Error generating bindings for macro `core::assert` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1738:
// Unsupported use statement that refers to this type of the entity:
// core::assert of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for macro `core::assert` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1738:
// Unsupported use statement that refers to this type of the entity:
// core::assert of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for macro `core::assert` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1738:
// Unsupported use statement that refers to this type of the entity:
// core::assert of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::v1 {

// Error generating bindings for macro `core::assert` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1738:
// Unsupported use statement that refers to this type of the entity:
// core::assert of kind Macro(MacroKinds(1))

}

namespace rs::std {

// Error generating bindings for macro `core::assert_eq` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=43:
// Unsupported use statement that refers to this type of the entity:
// core::assert_eq of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2015 {

// Error generating bindings for macro `core::assert_eq` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=43:
// Unsupported use statement that refers to this type of the entity:
// core::assert_eq of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2018 {

// Error generating bindings for macro `core::assert_eq` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=43:
// Unsupported use statement that refers to this type of the entity:
// core::assert_eq of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for macro `core::assert_eq` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=43:
// Unsupported use statement that refers to this type of the entity:
// core::assert_eq of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for macro `core::assert_eq` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=43:
// Unsupported use statement that refers to this type of the entity:
// core::assert_eq of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::v1 {

// Error generating bindings for macro `core::assert_eq` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=43:
// Unsupported use statement that refers to this type of the entity:
// core::assert_eq of kind Macro(MacroKinds(1))

}

namespace rs::std {

// Error generating bindings for macro `core::assert_matches` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=172:
// Unsupported use statement that refers to this type of the entity:
// core::assert_matches of kind Macro(MacroKinds(1))

// Error generating bindings for macro `core::assert_ne` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=100:
// Unsupported use statement that refers to this type of the entity:
// core::assert_ne of kind Macro(MacroKinds(1))

}  // namespace rs::std

namespace rs::std::prelude::rust_2015 {

// Error generating bindings for macro `core::assert_ne` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=100:
// Unsupported use statement that refers to this type of the entity:
// core::assert_ne of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2018 {

// Error generating bindings for macro `core::assert_ne` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=100:
// Unsupported use statement that refers to this type of the entity:
// core::assert_ne of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for macro `core::assert_ne` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=100:
// Unsupported use statement that refers to this type of the entity:
// core::assert_ne of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for macro `core::assert_ne` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=100:
// Unsupported use statement that refers to this type of the entity:
// core::assert_ne of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::v1 {

// Error generating bindings for macro `core::assert_ne` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=100:
// Unsupported use statement that refers to this type of the entity:
// core::assert_ne of kind Macro(MacroKinds(1))

}

namespace rs::std::borrow {

// Error generating bindings for trait `core::borrow::Borrow` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/borrow.rs;l=158:
// Aliases to generic trait `core::borrow::Borrow` are not supported.

// Error generating bindings for trait `core::borrow::BorrowMut` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/borrow.rs;l=190:
// Aliases to generic trait `core::borrow::BorrowMut` are not supported.

}  // namespace rs::std::borrow

namespace rs::std {

// Error generating bindings for module `core::cell` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/lib.rs;l=293:
// Unsupported use statement that refers to this type of the entity: core::cell
// of kind Mod

}

namespace rs::std::cell {

// Error generating bindings for struct `core::cell::BorrowError` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/cell.rs;l=867:
// Failed to format type for the definition of `core::cell::BorrowError`:
// Zero-sized types (ZSTs) are not supported (b/258259459)

// Error generating bindings for struct `core::cell::BorrowMutError` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/cell.rs;l=893:
// Failed to format type for the definition of `core::cell::BorrowMutError`:
// Zero-sized types (ZSTs) are not supported (b/258259459)

// Error generating bindings for struct `core::cell::Cell` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/cell.rs;l=315:
// Generic types are not supported yet (b/259749095)

}  // namespace rs::std::cell

namespace rs::std::cell {

// Error generating bindings for struct `core::cell::LazyCell` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/cell/lazy.rs;l=54:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::cell {

// Error generating bindings for struct `core::cell::OnceCell` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/cell/once.rs;l=35:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::cell {

// Error generating bindings for struct `core::cell::Ref` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/cell.rs;l=1617:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for struct `core::cell::RefCell` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/cell.rs;l=852:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for struct `core::cell::RefMut` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/cell.rs;l=2100:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for struct `core::cell::UnsafeCell` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/cell.rs;l=2311:
// Generic types are not supported yet (b/259749095)

}  // namespace rs::std::cell

namespace rs::std {

// Error generating bindings for macro `core::cfg` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1424:
// Unsupported use statement that refers to this type of the entity: core::cfg
// of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2015 {

// Error generating bindings for macro `core::cfg` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1424:
// Unsupported use statement that refers to this type of the entity: core::cfg
// of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2018 {

// Error generating bindings for macro `core::cfg` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1424:
// Unsupported use statement that refers to this type of the entity: core::cfg
// of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for macro `core::cfg` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1424:
// Unsupported use statement that refers to this type of the entity: core::cfg
// of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for macro `core::cfg` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1424:
// Unsupported use statement that refers to this type of the entity: core::cfg
// of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::v1 {

// Error generating bindings for macro `core::cfg` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1424:
// Unsupported use statement that refers to this type of the entity: core::cfg
// of kind Macro(MacroKinds(1))

}

namespace rs::std {

// Error generating bindings for macro `core::cfg_select` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=237:
// Unsupported use statement that refers to this type of the entity:
// core::cfg_select of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2015 {

// Error generating bindings for macro `core::cfg_select` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=237:
// Unsupported use statement that refers to this type of the entity:
// core::cfg_select of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2018 {

// Error generating bindings for macro `core::cfg_select` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=237:
// Unsupported use statement that refers to this type of the entity:
// core::cfg_select of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for macro `core::cfg_select` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=237:
// Unsupported use statement that refers to this type of the entity:
// core::cfg_select of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for macro `core::cfg_select` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=237:
// Unsupported use statement that refers to this type of the entity:
// core::cfg_select of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::v1 {

// Error generating bindings for macro `core::cfg_select` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=237:
// Unsupported use statement that refers to this type of the entity:
// core::cfg_select of kind Macro(MacroKinds(1))

}

namespace rs::std {

// Error generating bindings for module `core::char` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/lib.rs;l=294:
// Unsupported use statement that refers to this type of the entity: core::char
// of kind Mod

}

namespace rs::std::char_ {

// Error generating bindings for struct `core::char::CharTryFromError` defined
// at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/char/convert.rs;l=318:
// Failed to format type for the definition of `core::char::CharTryFromError`:
// Zero-sized types (ZSTs) are not supported (b/258259459)

}

namespace rs::std::char_ {

// Error generating bindings for struct `core::char::DecodeUtf16` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/char/decode.rs;l=15:
// Generic types are not supported yet (b/259749095)

//  An error that can be returned when decoding UTF-16 code points.
//
//  This `struct` is created when using the [`DecodeUtf16`] type.
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/char/decode.rs;l=28
using DecodeUtf16Error CRUBIT_INTERNAL_RUST_TYPE(
    ":: core :: char :: DecodeUtf16Error") =
    ::rs::core::char_::DecodeUtf16Error;
}  // namespace rs::std::char_

namespace rs::std::char_ {

//  An iterator that yields the literal escape code of a `char`.
//
//  This `struct` is created by the [`escape_debug`] method on [`char`]. See its
//  documentation for more.
//
//  [`escape_debug`]: char::escape_debug
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/char/mod.rs;l=310
using EscapeDebug CRUBIT_INTERNAL_RUST_TYPE(":: core :: char :: EscapeDebug") =
    ::rs::core::char_::EscapeDebug;
//  An iterator that yields the literal escape code of a `char`.
//
//  This `struct` is created by the [`escape_default`] method on [`char`]. See
//  its documentation for more.
//
//  [`escape_default`]: char::escape_default
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/char/mod.rs;l=233
using EscapeDefault CRUBIT_INTERNAL_RUST_TYPE(
    ":: core :: char :: EscapeDefault") = ::rs::core::char_::EscapeDefault;
//  Returns an iterator that yields the hexadecimal Unicode escape of a
//  character, as `char`s.
//
//  This `struct` is created by the [`escape_unicode`] method on [`char`]. See
//  its documentation for more.
//
//  [`escape_unicode`]: char::escape_unicode
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/char/mod.rs;l=167
using EscapeUnicode CRUBIT_INTERNAL_RUST_TYPE(
    ":: core :: char :: EscapeUnicode") = ::rs::core::char_::EscapeUnicode;

// Error generating bindings for constant `core::char::MAX` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/char/mod.rs;l=97:
// Unsupported use statement that refers to this type of the entity:
// core::char::MAX of kind Const { is_type_const: false }

}  // namespace rs::std::char_

namespace rs::std::char_ {

//  An error which can be returned when parsing a char.
//
//  This `struct` is created when using the [`char::from_str`] method.
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/char/convert.rs;l=239
using ParseCharError CRUBIT_INTERNAL_RUST_TYPE(
    ":: core :: char :: ParseCharError") = ::rs::core::char_::ParseCharError;
}  // namespace rs::std::char_

namespace rs::std::char_ {

// Error generating bindings for constant `core::char::REPLACEMENT_CHARACTER`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/char/mod.rs;l=106:
// Unsupported use statement that refers to this type of the entity:
// core::char::REPLACEMENT_CHARACTER of kind Const { is_type_const: false }

//  Returns an iterator that yields the lowercase equivalent of a `char`.
//
//  This `struct` is created by the [`to_lowercase`] method on [`char`]. See
//  its documentation for more.
//
//  [`to_lowercase`]: char::to_lowercase
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/char/mod.rs;l=381
using ToLowercase CRUBIT_INTERNAL_RUST_TYPE(":: core :: char :: ToLowercase") =
    ::rs::core::char_::ToLowercase;
//  Returns an iterator that yields the uppercase equivalent of a `char`.
//
//  This `struct` is created by the [`to_uppercase`] method on [`char`]. See
//  its documentation for more.
//
//  [`to_uppercase`]: char::to_uppercase
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/char/mod.rs;l=381
using ToUppercase CRUBIT_INTERNAL_RUST_TYPE(":: core :: char :: ToUppercase") =
    ::rs::core::char_::ToUppercase;

// Error generating bindings for struct `core::char::TryFromCharError` defined
// at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/char/mod.rs;l=646:
// Failed to format type for the definition of `core::char::TryFromCharError`:
// Zero-sized types (ZSTs) are not supported (b/258259459)

// Error generating bindings for constant `core::char::UNICODE_VERSION` defined
// at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/char/mod.rs;l=115:
// Unsupported use statement that refers to this type of the entity:
// core::char::UNICODE_VERSION of kind Const { is_type_const: false }

// Error generating bindings for function `core::char::decode_utf16` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/char/mod.rs;l=122:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `I`

using ::rs::core::char_::from_digit;
using ::rs::core::char_::from_u32;
using ::rs::core::char_::from_u32_unchecked;
}  // namespace rs::std::char_

namespace rs::std {

// Error generating bindings for module `core::clone` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/lib.rs;l=272:
// Unsupported use statement that refers to this type of the entity: core::clone
// of kind Mod

}

namespace rs::std::clone {

// Error generating bindings for trait `core::clone::Clone` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/clone.rs;l=194:
// Trait core::clone::Clone is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::prelude::rust_2015 {

// Error generating bindings for trait `core::clone::Clone` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/clone.rs;l=194:
// Trait core::clone::Clone is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::prelude::rust_2018 {

// Error generating bindings for trait `core::clone::Clone` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/clone.rs;l=194:
// Trait core::clone::Clone is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for trait `core::clone::Clone` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/clone.rs;l=194:
// Trait core::clone::Clone is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for trait `core::clone::Clone` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/clone.rs;l=194:
// Trait core::clone::Clone is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::prelude::v1 {

// Error generating bindings for trait `core::clone::Clone` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/clone.rs;l=194:
// Trait core::clone::Clone is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::clone {

// Error generating bindings for derive macro `core::clone::Clone` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/clone.rs;l=289:
// Unsupported use statement that refers to this type of the entity:
// core::clone::Clone of kind Macro(MacroKinds(4))

}

namespace rs::std::prelude::rust_2015 {

// Error generating bindings for derive macro `core::clone::Clone` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/clone.rs;l=289:
// Unsupported use statement that refers to this type of the entity:
// core::clone::Clone of kind Macro(MacroKinds(4))

}

namespace rs::std::prelude::rust_2018 {

// Error generating bindings for derive macro `core::clone::Clone` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/clone.rs;l=289:
// Unsupported use statement that refers to this type of the entity:
// core::clone::Clone of kind Macro(MacroKinds(4))

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for derive macro `core::clone::Clone` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/clone.rs;l=289:
// Unsupported use statement that refers to this type of the entity:
// core::clone::Clone of kind Macro(MacroKinds(4))

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for derive macro `core::clone::Clone` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/clone.rs;l=289:
// Unsupported use statement that refers to this type of the entity:
// core::clone::Clone of kind Macro(MacroKinds(4))

}

namespace rs::std::prelude::v1 {

// Error generating bindings for derive macro `core::clone::Clone` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/clone.rs;l=289:
// Unsupported use statement that refers to this type of the entity:
// core::clone::Clone of kind Macro(MacroKinds(4))

}

namespace rs::std {

// Error generating bindings for module `core::cmp` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/lib.rs;l=273:
// Unsupported use statement that refers to this type of the entity: core::cmp
// of kind Mod

}

namespace rs::std::cmp {

// Error generating bindings for derive macro `core::cmp::Eq` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/cmp.rs;l=377:
// Unsupported use statement that refers to this type of the entity:
// core::cmp::Eq of kind Macro(MacroKinds(4))

}

namespace rs::std::prelude::rust_2015 {

// Error generating bindings for derive macro `core::cmp::Eq` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/cmp.rs;l=377:
// Unsupported use statement that refers to this type of the entity:
// core::cmp::Eq of kind Macro(MacroKinds(4))

}

namespace rs::std::prelude::rust_2018 {

// Error generating bindings for derive macro `core::cmp::Eq` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/cmp.rs;l=377:
// Unsupported use statement that refers to this type of the entity:
// core::cmp::Eq of kind Macro(MacroKinds(4))

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for derive macro `core::cmp::Eq` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/cmp.rs;l=377:
// Unsupported use statement that refers to this type of the entity:
// core::cmp::Eq of kind Macro(MacroKinds(4))

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for derive macro `core::cmp::Eq` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/cmp.rs;l=377:
// Unsupported use statement that refers to this type of the entity:
// core::cmp::Eq of kind Macro(MacroKinds(4))

}

namespace rs::std::prelude::v1 {

// Error generating bindings for derive macro `core::cmp::Eq` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/cmp.rs;l=377:
// Unsupported use statement that refers to this type of the entity:
// core::cmp::Eq of kind Macro(MacroKinds(4))

}

namespace rs::std::cmp {
using ::rs::core::cmp::Eq;
}

namespace rs::std::prelude::rust_2015 {
using ::rs::core::cmp::Eq;
}

namespace rs::std::prelude::rust_2018 {
using ::rs::core::cmp::Eq;
}

namespace rs::std::prelude::rust_2021 {
using ::rs::core::cmp::Eq;
}

namespace rs::std::prelude::rust_2024 {
using ::rs::core::cmp::Eq;
}

namespace rs::std::prelude::v1 {
using ::rs::core::cmp::Eq;
}

namespace rs::std::cmp {
using ::rs::core::cmp::Ord;
}

namespace rs::std::prelude::rust_2015 {
using ::rs::core::cmp::Ord;
}

namespace rs::std::prelude::rust_2018 {
using ::rs::core::cmp::Ord;
}

namespace rs::std::prelude::rust_2021 {
using ::rs::core::cmp::Ord;
}

namespace rs::std::prelude::rust_2024 {
using ::rs::core::cmp::Ord;
}

namespace rs::std::prelude::v1 {
using ::rs::core::cmp::Ord;
}

namespace rs::std::cmp {

// Error generating bindings for derive macro `core::cmp::Ord` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/cmp.rs;l=1131:
// Unsupported use statement that refers to this type of the entity:
// core::cmp::Ord of kind Macro(MacroKinds(4))

}

namespace rs::std::prelude::rust_2015 {

// Error generating bindings for derive macro `core::cmp::Ord` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/cmp.rs;l=1131:
// Unsupported use statement that refers to this type of the entity:
// core::cmp::Ord of kind Macro(MacroKinds(4))

}

namespace rs::std::prelude::rust_2018 {

// Error generating bindings for derive macro `core::cmp::Ord` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/cmp.rs;l=1131:
// Unsupported use statement that refers to this type of the entity:
// core::cmp::Ord of kind Macro(MacroKinds(4))

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for derive macro `core::cmp::Ord` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/cmp.rs;l=1131:
// Unsupported use statement that refers to this type of the entity:
// core::cmp::Ord of kind Macro(MacroKinds(4))

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for derive macro `core::cmp::Ord` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/cmp.rs;l=1131:
// Unsupported use statement that refers to this type of the entity:
// core::cmp::Ord of kind Macro(MacroKinds(4))

}

namespace rs::std::prelude::v1 {

// Error generating bindings for derive macro `core::cmp::Ord` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/cmp.rs;l=1131:
// Unsupported use statement that refers to this type of the entity:
// core::cmp::Ord of kind Macro(MacroKinds(4))

}

namespace rs::std::cmp {

//  An `Ordering` is the result of a comparison between two values.
//
//  # Examples
//
//  ```
//  use std::cmp::Ordering;
//
//  assert_eq!(1.cmp(&2), Ordering::Less);
//
//  assert_eq!(1.cmp(&1), Ordering::Equal);
//
//  assert_eq!(2.cmp(&1), Ordering::Greater);
//  ```
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/cmp.rs;l=417
using Ordering CRUBIT_INTERNAL_RUST_TYPE(":: core :: cmp :: Ordering") =
    ::rs::core::cmp::Ordering;

// Error generating bindings for derive macro `core::cmp::PartialEq` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/cmp.rs;l=285:
// Unsupported use statement that refers to this type of the entity:
// core::cmp::PartialEq of kind Macro(MacroKinds(4))

}  // namespace rs::std::cmp

namespace rs::std::prelude::rust_2015 {

// Error generating bindings for derive macro `core::cmp::PartialEq` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/cmp.rs;l=285:
// Unsupported use statement that refers to this type of the entity:
// core::cmp::PartialEq of kind Macro(MacroKinds(4))

}

namespace rs::std::prelude::rust_2018 {

// Error generating bindings for derive macro `core::cmp::PartialEq` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/cmp.rs;l=285:
// Unsupported use statement that refers to this type of the entity:
// core::cmp::PartialEq of kind Macro(MacroKinds(4))

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for derive macro `core::cmp::PartialEq` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/cmp.rs;l=285:
// Unsupported use statement that refers to this type of the entity:
// core::cmp::PartialEq of kind Macro(MacroKinds(4))

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for derive macro `core::cmp::PartialEq` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/cmp.rs;l=285:
// Unsupported use statement that refers to this type of the entity:
// core::cmp::PartialEq of kind Macro(MacroKinds(4))

}

namespace rs::std::prelude::v1 {

// Error generating bindings for derive macro `core::cmp::PartialEq` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/cmp.rs;l=285:
// Unsupported use statement that refers to this type of the entity:
// core::cmp::PartialEq of kind Macro(MacroKinds(4))

}

namespace rs::std::cmp {

// Error generating bindings for trait `core::cmp::PartialEq` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/cmp.rs;l=250:
// Trait core::cmp::PartialEq is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::prelude::rust_2015 {

// Error generating bindings for trait `core::cmp::PartialEq` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/cmp.rs;l=250:
// Trait core::cmp::PartialEq is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::prelude::rust_2018 {

// Error generating bindings for trait `core::cmp::PartialEq` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/cmp.rs;l=250:
// Trait core::cmp::PartialEq is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for trait `core::cmp::PartialEq` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/cmp.rs;l=250:
// Trait core::cmp::PartialEq is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for trait `core::cmp::PartialEq` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/cmp.rs;l=250:
// Trait core::cmp::PartialEq is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::prelude::v1 {

// Error generating bindings for trait `core::cmp::PartialEq` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/cmp.rs;l=250:
// Trait core::cmp::PartialEq is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::cmp {

// Error generating bindings for trait `core::cmp::PartialOrd` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/cmp.rs;l=1378:
// Trait core::cmp::PartialOrd is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::prelude::rust_2015 {

// Error generating bindings for trait `core::cmp::PartialOrd` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/cmp.rs;l=1378:
// Trait core::cmp::PartialOrd is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::prelude::rust_2018 {

// Error generating bindings for trait `core::cmp::PartialOrd` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/cmp.rs;l=1378:
// Trait core::cmp::PartialOrd is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for trait `core::cmp::PartialOrd` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/cmp.rs;l=1378:
// Trait core::cmp::PartialOrd is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for trait `core::cmp::PartialOrd` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/cmp.rs;l=1378:
// Trait core::cmp::PartialOrd is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::prelude::v1 {

// Error generating bindings for trait `core::cmp::PartialOrd` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/cmp.rs;l=1378:
// Trait core::cmp::PartialOrd is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::cmp {

// Error generating bindings for derive macro `core::cmp::PartialOrd` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/cmp.rs;l=1545:
// Unsupported use statement that refers to this type of the entity:
// core::cmp::PartialOrd of kind Macro(MacroKinds(4))

}

namespace rs::std::prelude::rust_2015 {

// Error generating bindings for derive macro `core::cmp::PartialOrd` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/cmp.rs;l=1545:
// Unsupported use statement that refers to this type of the entity:
// core::cmp::PartialOrd of kind Macro(MacroKinds(4))

}

namespace rs::std::prelude::rust_2018 {

// Error generating bindings for derive macro `core::cmp::PartialOrd` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/cmp.rs;l=1545:
// Unsupported use statement that refers to this type of the entity:
// core::cmp::PartialOrd of kind Macro(MacroKinds(4))

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for derive macro `core::cmp::PartialOrd` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/cmp.rs;l=1545:
// Unsupported use statement that refers to this type of the entity:
// core::cmp::PartialOrd of kind Macro(MacroKinds(4))

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for derive macro `core::cmp::PartialOrd` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/cmp.rs;l=1545:
// Unsupported use statement that refers to this type of the entity:
// core::cmp::PartialOrd of kind Macro(MacroKinds(4))

}

namespace rs::std::prelude::v1 {

// Error generating bindings for derive macro `core::cmp::PartialOrd` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/cmp.rs;l=1545:
// Unsupported use statement that refers to this type of the entity:
// core::cmp::PartialOrd of kind Macro(MacroKinds(4))

}

namespace rs::std::cmp {

// Error generating bindings for struct `core::cmp::Reverse` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/cmp.rs;l=696:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for function `core::cmp::max` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/cmp.rs;l=1693:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

// Error generating bindings for function `core::cmp::max_by` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/cmp.rs;l=1724:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

// Error generating bindings for function `core::cmp::max_by_key` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/cmp.rs;l=1754:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

// Error generating bindings for function `core::cmp::min` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/cmp.rs;l=1586:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

// Error generating bindings for function `core::cmp::min_by` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/cmp.rs;l=1617:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

// Error generating bindings for function `core::cmp::min_by_key` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/cmp.rs;l=1647:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

}  // namespace rs::std::cmp

namespace rs::std {

// Error generating bindings for macro `core::column` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1223:
// Unsupported use statement that refers to this type of the entity:
// core::column of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2015 {

// Error generating bindings for macro `core::column` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1223:
// Unsupported use statement that refers to this type of the entity:
// core::column of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2018 {

// Error generating bindings for macro `core::column` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1223:
// Unsupported use statement that refers to this type of the entity:
// core::column of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for macro `core::column` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1223:
// Unsupported use statement that refers to this type of the entity:
// core::column of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for macro `core::column` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1223:
// Unsupported use statement that refers to this type of the entity:
// core::column of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::v1 {

// Error generating bindings for macro `core::column` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1223:
// Unsupported use statement that refers to this type of the entity:
// core::column of kind Macro(MacroKinds(1))

}

namespace rs::std {

// Error generating bindings for macro `core::compile_error` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=936:
// Unsupported use statement that refers to this type of the entity:
// core::compile_error of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2015 {

// Error generating bindings for macro `core::compile_error` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=936:
// Unsupported use statement that refers to this type of the entity:
// core::compile_error of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2018 {

// Error generating bindings for macro `core::compile_error` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=936:
// Unsupported use statement that refers to this type of the entity:
// core::compile_error of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for macro `core::compile_error` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=936:
// Unsupported use statement that refers to this type of the entity:
// core::compile_error of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for macro `core::compile_error` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=936:
// Unsupported use statement that refers to this type of the entity:
// core::compile_error of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::v1 {

// Error generating bindings for macro `core::compile_error` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=936:
// Unsupported use statement that refers to this type of the entity:
// core::compile_error of kind Macro(MacroKinds(1))

}

namespace rs::std {

// Error generating bindings for macro `core::concat` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1159:
// Unsupported use statement that refers to this type of the entity:
// core::concat of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2015 {

// Error generating bindings for macro `core::concat` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1159:
// Unsupported use statement that refers to this type of the entity:
// core::concat of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2018 {

// Error generating bindings for macro `core::concat` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1159:
// Unsupported use statement that refers to this type of the entity:
// core::concat of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for macro `core::concat` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1159:
// Unsupported use statement that refers to this type of the entity:
// core::concat of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for macro `core::concat` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1159:
// Unsupported use statement that refers to this type of the entity:
// core::concat of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::v1 {

// Error generating bindings for macro `core::concat` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1159:
// Unsupported use statement that refers to this type of the entity:
// core::concat of kind Macro(MacroKinds(1))

}

namespace rs::std {

// Error generating bindings for module `core::convert` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/lib.rs;l=274:
// Unsupported use statement that refers to this type of the entity:
// core::convert of kind Mod

}

namespace rs::std::convert {

// Error generating bindings for trait `core::convert::AsMut` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/convert/mod.rs;l=373:
// Aliases to generic trait `core::convert::AsMut` are not supported.

}

namespace rs::std::prelude::rust_2015 {

// Error generating bindings for trait `core::convert::AsMut` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/convert/mod.rs;l=373:
// Aliases to generic trait `core::convert::AsMut` are not supported.

}

namespace rs::std::prelude::rust_2018 {

// Error generating bindings for trait `core::convert::AsMut` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/convert/mod.rs;l=373:
// Aliases to generic trait `core::convert::AsMut` are not supported.

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for trait `core::convert::AsMut` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/convert/mod.rs;l=373:
// Aliases to generic trait `core::convert::AsMut` are not supported.

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for trait `core::convert::AsMut` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/convert/mod.rs;l=373:
// Aliases to generic trait `core::convert::AsMut` are not supported.

}

namespace rs::std::prelude::v1 {

// Error generating bindings for trait `core::convert::AsMut` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/convert/mod.rs;l=373:
// Aliases to generic trait `core::convert::AsMut` are not supported.

}

namespace rs::std::convert {

// Error generating bindings for trait `core::convert::AsRef` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/convert/mod.rs;l=221:
// Aliases to generic trait `core::convert::AsRef` are not supported.

}

namespace rs::std::prelude::rust_2015 {

// Error generating bindings for trait `core::convert::AsRef` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/convert/mod.rs;l=221:
// Aliases to generic trait `core::convert::AsRef` are not supported.

}

namespace rs::std::prelude::rust_2018 {

// Error generating bindings for trait `core::convert::AsRef` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/convert/mod.rs;l=221:
// Aliases to generic trait `core::convert::AsRef` are not supported.

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for trait `core::convert::AsRef` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/convert/mod.rs;l=221:
// Aliases to generic trait `core::convert::AsRef` are not supported.

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for trait `core::convert::AsRef` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/convert/mod.rs;l=221:
// Aliases to generic trait `core::convert::AsRef` are not supported.

}

namespace rs::std::prelude::v1 {

// Error generating bindings for trait `core::convert::AsRef` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/convert/mod.rs;l=221:
// Aliases to generic trait `core::convert::AsRef` are not supported.

}

namespace rs::std::convert {

// Error generating bindings for trait `core::convert::From` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/convert/mod.rs;l=589:
// Trait core::convert::From is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::prelude::rust_2015 {

// Error generating bindings for trait `core::convert::From` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/convert/mod.rs;l=589:
// Trait core::convert::From is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::prelude::rust_2018 {

// Error generating bindings for trait `core::convert::From` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/convert/mod.rs;l=589:
// Trait core::convert::From is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for trait `core::convert::From` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/convert/mod.rs;l=589:
// Trait core::convert::From is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for trait `core::convert::From` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/convert/mod.rs;l=589:
// Trait core::convert::From is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::prelude::v1 {

// Error generating bindings for trait `core::convert::From` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/convert/mod.rs;l=589:
// Trait core::convert::From is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::convert {

// Error generating bindings for enum `core::convert::Infallible` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/convert/mod.rs;l=933:
// Failed to format type for the definition of `core::convert::Infallible`:
// Zero-sized types (ZSTs) are not supported (b/258259459)

}

namespace rs::std::string {

// Error generating bindings for enum `core::convert::Infallible` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/convert/mod.rs;l=933:
// Failed to format type for the definition of `core::convert::Infallible`:
// Zero-sized types (ZSTs) are not supported (b/258259459)

}

namespace rs::std::convert {

// Error generating bindings for trait `core::convert::Into` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/convert/mod.rs;l=452:
// Trait core::convert::Into is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::prelude::rust_2015 {

// Error generating bindings for trait `core::convert::Into` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/convert/mod.rs;l=452:
// Trait core::convert::Into is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::prelude::rust_2018 {

// Error generating bindings for trait `core::convert::Into` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/convert/mod.rs;l=452:
// Trait core::convert::Into is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for trait `core::convert::Into` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/convert/mod.rs;l=452:
// Trait core::convert::Into is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for trait `core::convert::Into` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/convert/mod.rs;l=452:
// Trait core::convert::Into is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::prelude::v1 {

// Error generating bindings for trait `core::convert::Into` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/convert/mod.rs;l=452:
// Trait core::convert::Into is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::convert {

// Error generating bindings for trait `core::convert::TryFrom` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/convert/mod.rs;l=697:
// Aliases to generic trait `core::convert::TryFrom` are not supported.

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for trait `core::convert::TryFrom` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/convert/mod.rs;l=697:
// Aliases to generic trait `core::convert::TryFrom` are not supported.

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for trait `core::convert::TryFrom` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/convert/mod.rs;l=697:
// Aliases to generic trait `core::convert::TryFrom` are not supported.

}

namespace rs::std::convert {

// Error generating bindings for trait `core::convert::TryInto` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/convert/mod.rs;l=618:
// Aliases to generic trait `core::convert::TryInto` are not supported.

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for trait `core::convert::TryInto` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/convert/mod.rs;l=618:
// Aliases to generic trait `core::convert::TryInto` are not supported.

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for trait `core::convert::TryInto` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/convert/mod.rs;l=618:
// Aliases to generic trait `core::convert::TryInto` are not supported.

}

namespace rs::std::convert {

// Error generating bindings for function `core::convert::identity` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/convert/mod.rs;l=106:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

}

namespace rs::std {

// Error generating bindings for macro `core::debug_assert` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=290:
// Unsupported use statement that refers to this type of the entity:
// core::debug_assert of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2015 {

// Error generating bindings for macro `core::debug_assert` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=290:
// Unsupported use statement that refers to this type of the entity:
// core::debug_assert of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2018 {

// Error generating bindings for macro `core::debug_assert` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=290:
// Unsupported use statement that refers to this type of the entity:
// core::debug_assert of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for macro `core::debug_assert` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=290:
// Unsupported use statement that refers to this type of the entity:
// core::debug_assert of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for macro `core::debug_assert` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=290:
// Unsupported use statement that refers to this type of the entity:
// core::debug_assert of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::v1 {

// Error generating bindings for macro `core::debug_assert` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=290:
// Unsupported use statement that refers to this type of the entity:
// core::debug_assert of kind Macro(MacroKinds(1))

}

namespace rs::std {

// Error generating bindings for macro `core::debug_assert_eq` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=320:
// Unsupported use statement that refers to this type of the entity:
// core::debug_assert_eq of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2015 {

// Error generating bindings for macro `core::debug_assert_eq` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=320:
// Unsupported use statement that refers to this type of the entity:
// core::debug_assert_eq of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2018 {

// Error generating bindings for macro `core::debug_assert_eq` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=320:
// Unsupported use statement that refers to this type of the entity:
// core::debug_assert_eq of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for macro `core::debug_assert_eq` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=320:
// Unsupported use statement that refers to this type of the entity:
// core::debug_assert_eq of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for macro `core::debug_assert_eq` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=320:
// Unsupported use statement that refers to this type of the entity:
// core::debug_assert_eq of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::v1 {

// Error generating bindings for macro `core::debug_assert_eq` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=320:
// Unsupported use statement that refers to this type of the entity:
// core::debug_assert_eq of kind Macro(MacroKinds(1))

}

namespace rs::std {

// Error generating bindings for macro `core::debug_assert_matches` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=401:
// Unsupported use statement that refers to this type of the entity:
// core::debug_assert_matches of kind Macro(MacroKinds(1))

// Error generating bindings for macro `core::debug_assert_ne` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=350:
// Unsupported use statement that refers to this type of the entity:
// core::debug_assert_ne of kind Macro(MacroKinds(1))

}  // namespace rs::std

namespace rs::std::prelude::rust_2015 {

// Error generating bindings for macro `core::debug_assert_ne` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=350:
// Unsupported use statement that refers to this type of the entity:
// core::debug_assert_ne of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2018 {

// Error generating bindings for macro `core::debug_assert_ne` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=350:
// Unsupported use statement that refers to this type of the entity:
// core::debug_assert_ne of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for macro `core::debug_assert_ne` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=350:
// Unsupported use statement that refers to this type of the entity:
// core::debug_assert_ne of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for macro `core::debug_assert_ne` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=350:
// Unsupported use statement that refers to this type of the entity:
// core::debug_assert_ne of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::v1 {

// Error generating bindings for macro `core::debug_assert_ne` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=350:
// Unsupported use statement that refers to this type of the entity:
// core::debug_assert_ne of kind Macro(MacroKinds(1))

}

namespace rs::std {

// Error generating bindings for module `core::default` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/lib.rs;l=275:
// Unsupported use statement that refers to this type of the entity:
// core::default of kind Mod

}

namespace rs::std::default_ {

// Error generating bindings for derive macro `core::default::Default` defined
// at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/default.rs;l=146:
// Unsupported use statement that refers to this type of the entity:
// core::default::Default of kind Macro(MacroKinds(4))

}

namespace rs::std::prelude::rust_2015 {

// Error generating bindings for derive macro `core::default::Default` defined
// at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/default.rs;l=146:
// Unsupported use statement that refers to this type of the entity:
// core::default::Default of kind Macro(MacroKinds(4))

}

namespace rs::std::prelude::rust_2018 {

// Error generating bindings for derive macro `core::default::Default` defined
// at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/default.rs;l=146:
// Unsupported use statement that refers to this type of the entity:
// core::default::Default of kind Macro(MacroKinds(4))

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for derive macro `core::default::Default` defined
// at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/default.rs;l=146:
// Unsupported use statement that refers to this type of the entity:
// core::default::Default of kind Macro(MacroKinds(4))

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for derive macro `core::default::Default` defined
// at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/default.rs;l=146:
// Unsupported use statement that refers to this type of the entity:
// core::default::Default of kind Macro(MacroKinds(4))

}

namespace rs::std::prelude::v1 {

// Error generating bindings for derive macro `core::default::Default` defined
// at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/default.rs;l=146:
// Unsupported use statement that refers to this type of the entity:
// core::default::Default of kind Macro(MacroKinds(4))

}

namespace rs::std::default_ {

// Error generating bindings for trait `core::default::Default` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/default.rs;l=107:
// Trait core::default::Default is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::prelude::rust_2015 {

// Error generating bindings for trait `core::default::Default` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/default.rs;l=107:
// Trait core::default::Default is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::prelude::rust_2018 {

// Error generating bindings for trait `core::default::Default` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/default.rs;l=107:
// Trait core::default::Default is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for trait `core::default::Default` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/default.rs;l=107:
// Trait core::default::Default is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for trait `core::default::Default` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/default.rs;l=107:
// Trait core::default::Default is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::prelude::v1 {

// Error generating bindings for trait `core::default::Default` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/default.rs;l=107:
// Trait core::default::Default is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std {

// Error generating bindings for attribute macro `core::derive` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1777:
// Unsupported use statement that refers to this type of the entity:
// core::derive of kind Macro(MacroKinds(2))

}

namespace rs::std::prelude::rust_2015 {

// Error generating bindings for attribute macro `core::derive` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1777:
// Unsupported use statement that refers to this type of the entity:
// core::derive of kind Macro(MacroKinds(2))

}

namespace rs::std::prelude::rust_2018 {

// Error generating bindings for attribute macro `core::derive` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1777:
// Unsupported use statement that refers to this type of the entity:
// core::derive of kind Macro(MacroKinds(2))

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for attribute macro `core::derive` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1777:
// Unsupported use statement that refers to this type of the entity:
// core::derive of kind Macro(MacroKinds(2))

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for attribute macro `core::derive` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1777:
// Unsupported use statement that refers to this type of the entity:
// core::derive of kind Macro(MacroKinds(2))

}

namespace rs::std::prelude::v1 {

// Error generating bindings for attribute macro `core::derive` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1777:
// Unsupported use statement that refers to this type of the entity:
// core::derive of kind Macro(MacroKinds(2))

}

namespace rs::std {

// Error generating bindings for macro `core::env` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1076:
// Unsupported use statement that refers to this type of the entity: core::env
// of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2015 {

// Error generating bindings for macro `core::env` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1076:
// Unsupported use statement that refers to this type of the entity: core::env
// of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2018 {

// Error generating bindings for macro `core::env` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1076:
// Unsupported use statement that refers to this type of the entity: core::env
// of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for macro `core::env` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1076:
// Unsupported use statement that refers to this type of the entity: core::env
// of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for macro `core::env` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1076:
// Unsupported use statement that refers to this type of the entity: core::env
// of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::v1 {

// Error generating bindings for macro `core::env` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1076:
// Unsupported use statement that refers to this type of the entity: core::env
// of kind Macro(MacroKinds(1))

}

namespace rs::std::error {
using ::rs::core::error::Error;
}

namespace rs::std::f32 {

// Error generating bindings for constant `core::f32::DIGITS` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/f32.rs;l=80:
// Unsupported use statement that refers to this type of the entity:
// core::f32::DIGITS of kind Const { is_type_const: false }

// Error generating bindings for constant `core::f32::EPSILON` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/f32.rs;l=105:
// Unsupported use statement that refers to this type of the entity:
// core::f32::EPSILON of kind Const { is_type_const: false }

// Error generating bindings for constant `core::f32::INFINITY` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/f32.rs;l=294:
// Unsupported use statement that refers to this type of the entity:
// core::f32::INFINITY of kind Const { is_type_const: false }

// Error generating bindings for constant `core::f32::MANTISSA_DIGITS` defined
// at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/f32.rs;l=59:
// Unsupported use statement that refers to this type of the entity:
// core::f32::MANTISSA_DIGITS of kind Const { is_type_const: false }

// Error generating bindings for constant `core::f32::MAX` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/f32.rs;l=168:
// Unsupported use statement that refers to this type of the entity:
// core::f32::MAX of kind Const { is_type_const: false }

// Error generating bindings for constant `core::f32::MAX_10_EXP` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/f32.rs;l=252:
// Unsupported use statement that refers to this type of the entity:
// core::f32::MAX_10_EXP of kind Const { is_type_const: false }

// Error generating bindings for constant `core::f32::MAX_EXP` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/f32.rs;l=210:
// Unsupported use statement that refers to this type of the entity:
// core::f32::MAX_EXP of kind Const { is_type_const: false }

// Error generating bindings for constant `core::f32::MIN` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/f32.rs;l=126:
// Unsupported use statement that refers to this type of the entity:
// core::f32::MIN of kind Const { is_type_const: false }

// Error generating bindings for constant `core::f32::MIN_10_EXP` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/f32.rs;l=231:
// Unsupported use statement that refers to this type of the entity:
// core::f32::MIN_10_EXP of kind Const { is_type_const: false }

// Error generating bindings for constant `core::f32::MIN_EXP` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/f32.rs;l=189:
// Unsupported use statement that refers to this type of the entity:
// core::f32::MIN_EXP of kind Const { is_type_const: false }

// Error generating bindings for constant `core::f32::MIN_POSITIVE` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/f32.rs;l=147:
// Unsupported use statement that refers to this type of the entity:
// core::f32::MIN_POSITIVE of kind Const { is_type_const: false }

// Error generating bindings for constant `core::f32::NAN` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/f32.rs;l=273:
// Unsupported use statement that refers to this type of the entity:
// core::f32::NAN of kind Const { is_type_const: false }

// Error generating bindings for constant `core::f32::NEG_INFINITY` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/f32.rs;l=315:
// Unsupported use statement that refers to this type of the entity:
// core::f32::NEG_INFINITY of kind Const { is_type_const: false }

// Error generating bindings for constant `core::f32::RADIX` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/f32.rs;l=38:
// Unsupported use statement that refers to this type of the entity:
// core::f32::RADIX of kind Const { is_type_const: false }

// Error generating bindings for module `core::f32::consts` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/f32.rs;l=320:
// Unsupported use statement that refers to this type of the entity:
// core::f32::consts of kind Mod

}  // namespace rs::std::f32

namespace rs::std::f32::consts {

// Error generating bindings for constant `core::f32::consts::E` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/f32.rs;l=409:
// Unsupported use statement that refers to this type of the entity:
// core::f32::consts::E of kind Const { is_type_const: false }

// Error generating bindings for constant `core::f32::consts::EULER_GAMMA`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/f32.rs;l=340:
// Unsupported use statement that refers to this type of the entity:
// core::f32::consts::EULER_GAMMA of kind Const { is_type_const: false }

// Error generating bindings for constant `core::f32::consts::FRAC_1_PI` defined
// at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/f32.rs;l=364:
// Unsupported use statement that refers to this type of the entity:
// core::f32::consts::FRAC_1_PI of kind Const { is_type_const: false }

// Error generating bindings for constant `core::f32::consts::FRAC_1_SQRT_2`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/f32.rs;l=389:
// Unsupported use statement that refers to this type of the entity:
// core::f32::consts::FRAC_1_SQRT_2 of kind Const { is_type_const: false }

// Error generating bindings for constant `core::f32::consts::FRAC_2_PI` defined
// at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/f32.rs;l=377:
// Unsupported use statement that refers to this type of the entity:
// core::f32::consts::FRAC_2_PI of kind Const { is_type_const: false }

// Error generating bindings for constant `core::f32::consts::FRAC_2_SQRT_PI`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/f32.rs;l=381:
// Unsupported use statement that refers to this type of the entity:
// core::f32::consts::FRAC_2_SQRT_PI of kind Const { is_type_const: false }

// Error generating bindings for constant `core::f32::consts::FRAC_PI_2` defined
// at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/f32.rs;l=344:
// Unsupported use statement that refers to this type of the entity:
// core::f32::consts::FRAC_PI_2 of kind Const { is_type_const: false }

// Error generating bindings for constant `core::f32::consts::FRAC_PI_3` defined
// at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/f32.rs;l=348:
// Unsupported use statement that refers to this type of the entity:
// core::f32::consts::FRAC_PI_3 of kind Const { is_type_const: false }

// Error generating bindings for constant `core::f32::consts::FRAC_PI_4` defined
// at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/f32.rs;l=352:
// Unsupported use statement that refers to this type of the entity:
// core::f32::consts::FRAC_PI_4 of kind Const { is_type_const: false }

// Error generating bindings for constant `core::f32::consts::FRAC_PI_6` defined
// at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/f32.rs;l=356:
// Unsupported use statement that refers to this type of the entity:
// core::f32::consts::FRAC_PI_6 of kind Const { is_type_const: false }

// Error generating bindings for constant `core::f32::consts::FRAC_PI_8` defined
// at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/f32.rs;l=360:
// Unsupported use statement that refers to this type of the entity:
// core::f32::consts::FRAC_PI_8 of kind Const { is_type_const: false }

// Error generating bindings for constant `core::f32::consts::GOLDEN_RATIO`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/f32.rs;l=336:
// Unsupported use statement that refers to this type of the entity:
// core::f32::consts::GOLDEN_RATIO of kind Const { is_type_const: false }

// Error generating bindings for constant `core::f32::consts::LN_10` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/f32.rs;l=433:
// Unsupported use statement that refers to this type of the entity:
// core::f32::consts::LN_10 of kind Const { is_type_const: false }

// Error generating bindings for constant `core::f32::consts::LN_2` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/f32.rs;l=429:
// Unsupported use statement that refers to this type of the entity:
// core::f32::consts::LN_2 of kind Const { is_type_const: false }

// Error generating bindings for constant `core::f32::consts::LOG10_2` defined
// at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/f32.rs;l=425:
// Unsupported use statement that refers to this type of the entity:
// core::f32::consts::LOG10_2 of kind Const { is_type_const: false }

// Error generating bindings for constant `core::f32::consts::LOG10_E` defined
// at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/f32.rs;l=421:
// Unsupported use statement that refers to this type of the entity:
// core::f32::consts::LOG10_E of kind Const { is_type_const: false }

// Error generating bindings for constant `core::f32::consts::LOG2_10` defined
// at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/f32.rs;l=417:
// Unsupported use statement that refers to this type of the entity:
// core::f32::consts::LOG2_10 of kind Const { is_type_const: false }

// Error generating bindings for constant `core::f32::consts::LOG2_E` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/f32.rs;l=413:
// Unsupported use statement that refers to this type of the entity:
// core::f32::consts::LOG2_E of kind Const { is_type_const: false }

// Error generating bindings for constant `core::f32::consts::PI` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/f32.rs;l=325:
// Unsupported use statement that refers to this type of the entity:
// core::f32::consts::PI of kind Const { is_type_const: false }

// Error generating bindings for constant `core::f32::consts::SQRT_2` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/f32.rs;l=385:
// Unsupported use statement that refers to this type of the entity:
// core::f32::consts::SQRT_2 of kind Const { is_type_const: false }

// Error generating bindings for constant `core::f32::consts::TAU` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/f32.rs;l=331:
// Unsupported use statement that refers to this type of the entity:
// core::f32::consts::TAU of kind Const { is_type_const: false }

}  // namespace rs::std::f32::consts

namespace rs::std::f64 {

// Error generating bindings for constant `core::f64::DIGITS` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/f64.rs;l=80:
// Unsupported use statement that refers to this type of the entity:
// core::f64::DIGITS of kind Const { is_type_const: false }

// Error generating bindings for constant `core::f64::EPSILON` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/f64.rs;l=105:
// Unsupported use statement that refers to this type of the entity:
// core::f64::EPSILON of kind Const { is_type_const: false }

// Error generating bindings for constant `core::f64::INFINITY` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/f64.rs;l=294:
// Unsupported use statement that refers to this type of the entity:
// core::f64::INFINITY of kind Const { is_type_const: false }

// Error generating bindings for constant `core::f64::MANTISSA_DIGITS` defined
// at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/f64.rs;l=59:
// Unsupported use statement that refers to this type of the entity:
// core::f64::MANTISSA_DIGITS of kind Const { is_type_const: false }

// Error generating bindings for constant `core::f64::MAX` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/f64.rs;l=168:
// Unsupported use statement that refers to this type of the entity:
// core::f64::MAX of kind Const { is_type_const: false }

// Error generating bindings for constant `core::f64::MAX_10_EXP` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/f64.rs;l=252:
// Unsupported use statement that refers to this type of the entity:
// core::f64::MAX_10_EXP of kind Const { is_type_const: false }

// Error generating bindings for constant `core::f64::MAX_EXP` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/f64.rs;l=210:
// Unsupported use statement that refers to this type of the entity:
// core::f64::MAX_EXP of kind Const { is_type_const: false }

// Error generating bindings for constant `core::f64::MIN` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/f64.rs;l=126:
// Unsupported use statement that refers to this type of the entity:
// core::f64::MIN of kind Const { is_type_const: false }

// Error generating bindings for constant `core::f64::MIN_10_EXP` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/f64.rs;l=231:
// Unsupported use statement that refers to this type of the entity:
// core::f64::MIN_10_EXP of kind Const { is_type_const: false }

// Error generating bindings for constant `core::f64::MIN_EXP` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/f64.rs;l=189:
// Unsupported use statement that refers to this type of the entity:
// core::f64::MIN_EXP of kind Const { is_type_const: false }

// Error generating bindings for constant `core::f64::MIN_POSITIVE` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/f64.rs;l=147:
// Unsupported use statement that refers to this type of the entity:
// core::f64::MIN_POSITIVE of kind Const { is_type_const: false }

// Error generating bindings for constant `core::f64::NAN` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/f64.rs;l=273:
// Unsupported use statement that refers to this type of the entity:
// core::f64::NAN of kind Const { is_type_const: false }

// Error generating bindings for constant `core::f64::NEG_INFINITY` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/f64.rs;l=315:
// Unsupported use statement that refers to this type of the entity:
// core::f64::NEG_INFINITY of kind Const { is_type_const: false }

// Error generating bindings for constant `core::f64::RADIX` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/f64.rs;l=38:
// Unsupported use statement that refers to this type of the entity:
// core::f64::RADIX of kind Const { is_type_const: false }

// Error generating bindings for module `core::f64::consts` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/f64.rs;l=320:
// Unsupported use statement that refers to this type of the entity:
// core::f64::consts of kind Mod

}  // namespace rs::std::f64

namespace rs::std::f64::consts {

// Error generating bindings for constant `core::f64::consts::E` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/f64.rs;l=409:
// Unsupported use statement that refers to this type of the entity:
// core::f64::consts::E of kind Const { is_type_const: false }

// Error generating bindings for constant `core::f64::consts::EULER_GAMMA`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/f64.rs;l=340:
// Unsupported use statement that refers to this type of the entity:
// core::f64::consts::EULER_GAMMA of kind Const { is_type_const: false }

// Error generating bindings for constant `core::f64::consts::FRAC_1_PI` defined
// at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/f64.rs;l=364:
// Unsupported use statement that refers to this type of the entity:
// core::f64::consts::FRAC_1_PI of kind Const { is_type_const: false }

// Error generating bindings for constant `core::f64::consts::FRAC_1_SQRT_2`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/f64.rs;l=389:
// Unsupported use statement that refers to this type of the entity:
// core::f64::consts::FRAC_1_SQRT_2 of kind Const { is_type_const: false }

// Error generating bindings for constant `core::f64::consts::FRAC_2_PI` defined
// at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/f64.rs;l=377:
// Unsupported use statement that refers to this type of the entity:
// core::f64::consts::FRAC_2_PI of kind Const { is_type_const: false }

// Error generating bindings for constant `core::f64::consts::FRAC_2_SQRT_PI`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/f64.rs;l=381:
// Unsupported use statement that refers to this type of the entity:
// core::f64::consts::FRAC_2_SQRT_PI of kind Const { is_type_const: false }

// Error generating bindings for constant `core::f64::consts::FRAC_PI_2` defined
// at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/f64.rs;l=344:
// Unsupported use statement that refers to this type of the entity:
// core::f64::consts::FRAC_PI_2 of kind Const { is_type_const: false }

// Error generating bindings for constant `core::f64::consts::FRAC_PI_3` defined
// at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/f64.rs;l=348:
// Unsupported use statement that refers to this type of the entity:
// core::f64::consts::FRAC_PI_3 of kind Const { is_type_const: false }

// Error generating bindings for constant `core::f64::consts::FRAC_PI_4` defined
// at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/f64.rs;l=352:
// Unsupported use statement that refers to this type of the entity:
// core::f64::consts::FRAC_PI_4 of kind Const { is_type_const: false }

// Error generating bindings for constant `core::f64::consts::FRAC_PI_6` defined
// at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/f64.rs;l=356:
// Unsupported use statement that refers to this type of the entity:
// core::f64::consts::FRAC_PI_6 of kind Const { is_type_const: false }

// Error generating bindings for constant `core::f64::consts::FRAC_PI_8` defined
// at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/f64.rs;l=360:
// Unsupported use statement that refers to this type of the entity:
// core::f64::consts::FRAC_PI_8 of kind Const { is_type_const: false }

// Error generating bindings for constant `core::f64::consts::GOLDEN_RATIO`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/f64.rs;l=336:
// Unsupported use statement that refers to this type of the entity:
// core::f64::consts::GOLDEN_RATIO of kind Const { is_type_const: false }

// Error generating bindings for constant `core::f64::consts::LN_10` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/f64.rs;l=433:
// Unsupported use statement that refers to this type of the entity:
// core::f64::consts::LN_10 of kind Const { is_type_const: false }

// Error generating bindings for constant `core::f64::consts::LN_2` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/f64.rs;l=429:
// Unsupported use statement that refers to this type of the entity:
// core::f64::consts::LN_2 of kind Const { is_type_const: false }

// Error generating bindings for constant `core::f64::consts::LOG10_2` defined
// at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/f64.rs;l=421:
// Unsupported use statement that refers to this type of the entity:
// core::f64::consts::LOG10_2 of kind Const { is_type_const: false }

// Error generating bindings for constant `core::f64::consts::LOG10_E` defined
// at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/f64.rs;l=425:
// Unsupported use statement that refers to this type of the entity:
// core::f64::consts::LOG10_E of kind Const { is_type_const: false }

// Error generating bindings for constant `core::f64::consts::LOG2_10` defined
// at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/f64.rs;l=413:
// Unsupported use statement that refers to this type of the entity:
// core::f64::consts::LOG2_10 of kind Const { is_type_const: false }

// Error generating bindings for constant `core::f64::consts::LOG2_E` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/f64.rs;l=417:
// Unsupported use statement that refers to this type of the entity:
// core::f64::consts::LOG2_E of kind Const { is_type_const: false }

// Error generating bindings for constant `core::f64::consts::PI` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/f64.rs;l=325:
// Unsupported use statement that refers to this type of the entity:
// core::f64::consts::PI of kind Const { is_type_const: false }

// Error generating bindings for constant `core::f64::consts::SQRT_2` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/f64.rs;l=385:
// Unsupported use statement that refers to this type of the entity:
// core::f64::consts::SQRT_2 of kind Const { is_type_const: false }

// Error generating bindings for constant `core::f64::consts::TAU` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/f64.rs;l=331:
// Unsupported use statement that refers to this type of the entity:
// core::f64::consts::TAU of kind Const { is_type_const: false }

}  // namespace rs::std::f64::consts

namespace rs::std::ffi {

// Error generating bindings for struct `core::ffi::CStr` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ffi/c_str.rs;l=102:
// Failed to format type for the definition of `core::ffi::CStr`: Bindings for
// dynamically sized types are not supported.

}

namespace rs::std::ffi::c_str {

// Error generating bindings for struct `core::ffi::CStr` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ffi/c_str.rs;l=102:
// Failed to format type for the definition of `core::ffi::CStr`: Bindings for
// dynamically sized types are not supported.

}

namespace rs::std::ffi {

// Error generating bindings for struct `core::ffi::FromBytesUntilNulError`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ffi/c_str.rs;l=160:
// Failed to format type for the definition of
// `core::ffi::FromBytesUntilNulError`: Zero-sized types (ZSTs) are not
// supported (b/258259459)

}

namespace rs::std::ffi::c_str {

// Error generating bindings for struct `core::ffi::FromBytesUntilNulError`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ffi/c_str.rs;l=160:
// Failed to format type for the definition of
// `core::ffi::FromBytesUntilNulError`: Zero-sized types (ZSTs) are not
// supported (b/258259459)

}

namespace rs::std::ffi {

//  An error indicating that a nul byte was not in the expected position.
//
//  The slice used to create a [`CStr`] must have one and only one nul byte,
//  positioned at the end.
//
//  This error is created by the [`CStr::from_bytes_with_nul`] method.
//  See its documentation for more.
//
//  # Examples
//
//  ```
//  use std::ffi::{CStr, FromBytesWithNulError};
//
//  let _: FromBytesWithNulError =
//  CStr::from_bytes_with_nul(b"f\\0oo").unwrap_err();
//  ```
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ffi/c_str.rs;l=127
using FromBytesWithNulError CRUBIT_INTERNAL_RUST_TYPE(
    ":: core :: ffi :: FromBytesWithNulError") =
    ::rs::core::ffi::FromBytesWithNulError;
}  // namespace rs::std::ffi

namespace rs::std::ffi::c_str {

//  An error indicating that a nul byte was not in the expected position.
//
//  The slice used to create a [`CStr`] must have one and only one nul byte,
//  positioned at the end.
//
//  This error is created by the [`CStr::from_bytes_with_nul`] method.
//  See its documentation for more.
//
//  # Examples
//
//  ```
//  use std::ffi::{CStr, FromBytesWithNulError};
//
//  let _: FromBytesWithNulError =
//  CStr::from_bytes_with_nul(b"f\\0oo").unwrap_err();
//  ```
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ffi/c_str.rs;l=127
using FromBytesWithNulError CRUBIT_INTERNAL_RUST_TYPE(
    ":: core :: ffi :: FromBytesWithNulError") =
    ::rs::core::ffi::FromBytesWithNulError;
}  // namespace rs::std::ffi::c_str

namespace rs::std::ffi {
using ::rs::core::ffi::VaArgSafe;
//  A variable argument list, ABI-compatible with `va_list` in C.
//
//  This type is created in c-variadic functions when `...` is desugared. A
//  `VaList` is automatically initialized (equivalent to calling `va_start` in
//  C).
//
//  ```
//  use std::ffi::VaList;
//
//  /// # Safety
//  /// Must be passed at least `count` arguments of type `i32`.
//  unsafe extern "C" fn my_func(count: u32, ap: ...) -> i32 {
//      unsafe { vmy_func(count, ap) }
//  }
//
//  /// # Safety
//  /// Must be passed at least `count` arguments of type `i32`.
//  unsafe fn vmy_func(count: u32, mut ap: VaList<'_>) -> i32 {
//      let mut sum = 0;
//      for _ in 0..count {
//          sum += unsafe { ap.next_arg::<i32>() };
//      }
//      sum
//  }
//
//  assert_eq!(unsafe { my_func(1, 42i32) }, 42);
//  assert_eq!(unsafe { my_func(3, 42i32, -7i32, 20i32) }, 55);
//  ```
//
//  The [`VaList::next_arg`] method reads the next argument from the variable
//  argument list, and is equivalent to C `va_arg`.
//
//  Cloning a `VaList` performs the equivalent of C `va_copy`, producing an
//  independent cursor that arguments can be read from without affecting the
//  original. Dropping a `VaList` performs the equivalent of C `va_end`.
//
//  A `VaList` can be used across an FFI boundary, and fully matches the
//  platform's `va_list` in terms of layout and ABI.
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ffi/va_list.rs;l=226
using VaList CRUBIT_INTERNAL_RUST_TYPE(":: core :: ffi :: VaList") =
    ::rs::core::ffi::VaList;
}  // namespace rs::std::ffi

namespace rs::std {

// Error generating bindings for macro `core::file` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1261:
// Unsupported use statement that refers to this type of the entity: core::file
// of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2015 {

// Error generating bindings for macro `core::file` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1261:
// Unsupported use statement that refers to this type of the entity: core::file
// of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2018 {

// Error generating bindings for macro `core::file` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1261:
// Unsupported use statement that refers to this type of the entity: core::file
// of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for macro `core::file` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1261:
// Unsupported use statement that refers to this type of the entity: core::file
// of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for macro `core::file` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1261:
// Unsupported use statement that refers to this type of the entity: core::file
// of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::v1 {

// Error generating bindings for macro `core::file` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1261:
// Unsupported use statement that refers to this type of the entity: core::file
// of kind Macro(MacroKinds(1))

}

namespace rs::std::fmt {

//  Possible alignments returned by `Formatter::align`
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/fmt/mod.rs;l=27
using Alignment CRUBIT_INTERNAL_RUST_TYPE(":: core :: fmt :: Alignment") =
    ::rs::core::fmt::Alignment;
//  This structure represents a safely precompiled version of a format string
//  and its arguments. This cannot be generated at runtime because it cannot
//  safely be done, so no constructors are given and the fields are private
//  to prevent modification.
//
//  The [`format_args!`] macro will safely create an instance of this structure.
//  The macro validates the format string at compile-time so usage of the
//  [`write()`] and [`format()`] functions can be safely performed.
//
//  You can use the `Arguments<'a>` that [`format_args!`] returns in `Debug`
//  and `Display` contexts as seen below. The example also shows that `Debug`
//  and `Display` format to the same thing: the interpolated format string
//  in `format_args!`.
//
//  ```rust
//  let debug = format!("{:?}", format_args!("{} foo {:?}", 1, 2));
//  let display = format!("{}", format_args!("{} foo {:?}", 1, 2));
//  assert_eq!("1 foo 2", display);
//  assert_eq!(display, debug);
//  ```
//
//  [`format()`]: ../../std/fmt/fn.format.html
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/fmt/mod.rs;l=716
using Arguments CRUBIT_INTERNAL_RUST_TYPE(":: core :: fmt :: Arguments") =
    ::rs::core::fmt::Arguments;
using ::rs::core::fmt::Binary;
using ::rs::core::fmt::Debug;
}  // namespace rs::std::fmt

namespace rs::std::fmt {

// Error generating bindings for derive macro `core::fmt::Debug` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/fmt/mod.rs;l=1093:
// Unsupported use statement that refers to this type of the entity:
// core::fmt::Debug of kind Macro(MacroKinds(4))

}

namespace rs::std::prelude::rust_2015 {

// Error generating bindings for derive macro `core::fmt::Debug` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/fmt/mod.rs;l=1093:
// Unsupported use statement that refers to this type of the entity:
// core::fmt::Debug of kind Macro(MacroKinds(4))

}

namespace rs::std::prelude::rust_2018 {

// Error generating bindings for derive macro `core::fmt::Debug` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/fmt/mod.rs;l=1093:
// Unsupported use statement that refers to this type of the entity:
// core::fmt::Debug of kind Macro(MacroKinds(4))

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for derive macro `core::fmt::Debug` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/fmt/mod.rs;l=1093:
// Unsupported use statement that refers to this type of the entity:
// core::fmt::Debug of kind Macro(MacroKinds(4))

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for derive macro `core::fmt::Debug` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/fmt/mod.rs;l=1093:
// Unsupported use statement that refers to this type of the entity:
// core::fmt::Debug of kind Macro(MacroKinds(4))

}

namespace rs::std::prelude::v1 {

// Error generating bindings for derive macro `core::fmt::Debug` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/fmt/mod.rs;l=1093:
// Unsupported use statement that refers to this type of the entity:
// core::fmt::Debug of kind Macro(MacroKinds(4))

}

namespace rs::std::fmt {

//  A struct to help with [`fmt::Debug`](Debug) implementations.
//
//  This is useful when you wish to output a formatted list of items as a part
//  of your [`Debug::fmt`] implementation.
//
//  This can be constructed by the [`Formatter::debug_list`] method.
//
//  # Examples
//
//  ```
//  use std::fmt;
//
//  struct Foo(Vec<i32>);
//
//  impl fmt::Debug for Foo {
//      fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
//          fmt.debug_list().entries(self.0.iter()).finish()
//      }
//  }
//
//  assert_eq!(
//      format!("{:?}", Foo(vec![10, 11])),
//      "[10, 11]",
//  );
//  ```
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/fmt/builders.rs;l=734
using DebugList CRUBIT_INTERNAL_RUST_TYPE(":: core :: fmt :: DebugList") =
    ::rs::core::fmt::DebugList;
//  A struct to help with [`fmt::Debug`](Debug) implementations.
//
//  This is useful when you wish to output a formatted map as a part of your
//  [`Debug::fmt`] implementation.
//
//  This can be constructed by the [`Formatter::debug_map`] method.
//
//  # Examples
//
//  ```
//  use std::fmt;
//
//  struct Foo(Vec<(String, i32)>);
//
//  impl fmt::Debug for Foo {
//      fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
//          fmt.debug_map().entries(self.0.iter().map(|&(ref k, ref v)| (k,
//          v))).finish()
//      }
//  }
//
//  assert_eq!(
//      format!("{:?}", Foo(vec![("A".to_string(), 10), ("B".to_string(),
//      11)])), r#"{"A": 10, "B": 11}"#,
//  );
//  ```
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/fmt/builders.rs;l=925
using DebugMap CRUBIT_INTERNAL_RUST_TYPE(":: core :: fmt :: DebugMap") =
    ::rs::core::fmt::DebugMap;
//  A struct to help with [`fmt::Debug`](Debug) implementations.
//
//  This is useful when you wish to output a formatted set of items as a part
//  of your [`Debug::fmt`] implementation.
//
//  This can be constructed by the [`Formatter::debug_set`] method.
//
//  # Examples
//
//  ```
//  use std::fmt;
//
//  struct Foo(Vec<i32>);
//
//  impl fmt::Debug for Foo {
//      fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
//          fmt.debug_set().entries(self.0.iter()).finish()
//      }
//  }
//
//  assert_eq!(
//      format!("{:?}", Foo(vec![10, 11])),
//      "{10, 11}",
//  );
//  ```
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/fmt/builders.rs;l=542
using DebugSet CRUBIT_INTERNAL_RUST_TYPE(":: core :: fmt :: DebugSet") =
    ::rs::core::fmt::DebugSet;
//  A struct to help with [`fmt::Debug`](Debug) implementations.
//
//  This is useful when you wish to output a formatted struct as a part of your
//  [`Debug::fmt`] implementation.
//
//  This can be constructed by the [`Formatter::debug_struct`] method.
//
//  # Examples
//
//  ```
//  use std::fmt;
//
//  struct Foo {
//      bar: i32,
//      baz: String,
//  }
//
//  impl fmt::Debug for Foo {
//      fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
//          fmt.debug_struct("Foo")
//             .field("bar", &self.bar)
//             .field("baz", &self.baz)
//             .finish()
//      }
//  }
//
//  assert_eq!(
//      format!("{:?}", Foo { bar: 10, baz: "Hello World".to_string() }),
//      r#"Foo { bar: 10, baz: "Hello World" }"#,
//  );
//  ```
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/fmt/builders.rs;l=112
using DebugStruct CRUBIT_INTERNAL_RUST_TYPE(":: core :: fmt :: DebugStruct") =
    ::rs::core::fmt::DebugStruct;
//  A struct to help with [`fmt::Debug`](Debug) implementations.
//
//  This is useful when you wish to output a formatted tuple as a part of your
//  [`Debug::fmt`] implementation.
//
//  This can be constructed by the [`Formatter::debug_tuple`] method.
//
//  # Examples
//
//  ```
//  use std::fmt;
//
//  struct Foo(i32, String);
//
//  impl fmt::Debug for Foo {
//      fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
//          fmt.debug_tuple("Foo")
//             .field(&self.0)
//             .field(&self.1)
//             .finish()
//      }
//  }
//
//  assert_eq!(
//      format!("{:?}", Foo(10, "Hello World".to_string())),
//      r#"Foo(10, "Hello World")"#,
//  );
//  ```
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/fmt/builders.rs;l=313
using DebugTuple CRUBIT_INTERNAL_RUST_TYPE(":: core :: fmt :: DebugTuple") =
    ::rs::core::fmt::DebugTuple;
}  // namespace rs::std::fmt

namespace rs::std::fmt {
using ::rs::core::fmt::Display;

// Error generating bindings for struct `core::fmt::Error` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/fmt/mod.rs;l=111:
// Failed to format type for the definition of `core::fmt::Error`: Zero-sized
// types (ZSTs) are not supported (b/258259459)

//  Configuration for formatting.
//
//  A `Formatter` represents various options related to formatting. Users do not
//  construct `Formatter`s directly; a mutable reference to one is passed to
//  the `fmt` method of all formatting traits, like [`Debug`] and [`Display`].
//
//  To interact with a `Formatter`, you'll call various methods to change the
//  various options related to formatting. For examples, please see the
//  documentation of the methods defined on `Formatter` below.
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/fmt/mod.rs;l=561
using Formatter CRUBIT_INTERNAL_RUST_TYPE(":: core :: fmt :: Formatter") =
    ::rs::core::fmt::Formatter;
}  // namespace rs::std::fmt

namespace rs::std::fmt {

// Error generating bindings for struct `core::fmt::FromFn` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/fmt/builders.rs;l=1268:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::fmt {
using ::rs::core::fmt::LowerExp;
using ::rs::core::fmt::LowerHex;
using ::rs::core::fmt::Octal;
using ::rs::core::fmt::Pointer;

// Error generating bindings for type alias `core::fmt::Result` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/fmt/mod.rs;l=74:
// Tuple type `()` is not supported in this context

using ::rs::core::fmt::UpperExp;
using ::rs::core::fmt::UpperHex;
using ::rs::core::fmt::Write;
}  // namespace rs::std::fmt

namespace rs::std::fmt {

// Error generating bindings for function `core::fmt::from_fn` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/fmt/builders.rs;l=1260:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `F`

}

namespace rs::std::fmt {

// Error generating bindings for function `core::fmt::write` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/fmt/mod.rs;l=1631:
// Unable to `use` function whose bindings failed: Error formatting function
// return type `core::result::Result<(), core::fmt::Error>`
//
// Caused by:
//     Generic types are not supported yet (b/259749095)

}

namespace rs::std {

// Error generating bindings for macro `core::format_args` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1004:
// Unsupported use statement that refers to this type of the entity:
// core::format_args of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2015 {

// Error generating bindings for macro `core::format_args` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1004:
// Unsupported use statement that refers to this type of the entity:
// core::format_args of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2018 {

// Error generating bindings for macro `core::format_args` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1004:
// Unsupported use statement that refers to this type of the entity:
// core::format_args of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for macro `core::format_args` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1004:
// Unsupported use statement that refers to this type of the entity:
// core::format_args of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for macro `core::format_args` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1004:
// Unsupported use statement that refers to this type of the entity:
// core::format_args of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::v1 {

// Error generating bindings for macro `core::format_args` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1004:
// Unsupported use statement that refers to this type of the entity:
// core::format_args of kind Macro(MacroKinds(1))

}

namespace rs::std {

// Error generating bindings for module `core::future` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/lib.rs;l=329:
// Unsupported use statement that refers to this type of the entity:
// core::future of kind Mod

}

namespace rs::std::future {
using ::rs::core::future::Future;
}

namespace rs::std::prelude::rust_2024 {
using ::rs::core::future::Future;
}

namespace rs::std::future {
using ::rs::core::future::IntoFuture;
}

namespace rs::std::prelude::rust_2024 {
using ::rs::core::future::IntoFuture;
}

namespace rs::std::future {

// Error generating bindings for struct `core::future::Pending` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/future/pending.rs;l=14:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::future {

// Error generating bindings for struct `core::future::PollFn` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/future/poll_fn.rs;l=128:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::future {

// Error generating bindings for struct `core::future::Ready` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/future/ready.rs;l=12:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::future {

// Error generating bindings for function `core::future::pending` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/future/pending.rs;l=33:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

}

namespace rs::std::future {

// Error generating bindings for function `core::future::poll_fn` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/future/poll_fn.rs;l=115:
// Unable to `use` function whose bindings failed: No support for replacing an
// _unused_ generic type param: `T`

}

namespace rs::std::future {

// Error generating bindings for function `core::future::ready` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/future/ready.rs;l=67:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

}

namespace rs::std::hash {
using ::rs::core::hash::BuildHasher;

// Error generating bindings for struct `core::hash::BuildHasherDefault` defined
// at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/hash/mod.rs;l=751:
// Generic types are not supported yet (b/259749095)

using ::rs::core::hash::Hash;
}  // namespace rs::std::hash

namespace rs::std::hash {

// Error generating bindings for derive macro `core::hash::Hash` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/hash/mod.rs;l=250:
// Unsupported use statement that refers to this type of the entity:
// core::hash::Hash of kind Macro(MacroKinds(4))

}

namespace rs::std::prelude::rust_2015 {

// Error generating bindings for derive macro `core::hash::Hash` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/hash/mod.rs;l=250:
// Unsupported use statement that refers to this type of the entity:
// core::hash::Hash of kind Macro(MacroKinds(4))

}

namespace rs::std::prelude::rust_2018 {

// Error generating bindings for derive macro `core::hash::Hash` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/hash/mod.rs;l=250:
// Unsupported use statement that refers to this type of the entity:
// core::hash::Hash of kind Macro(MacroKinds(4))

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for derive macro `core::hash::Hash` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/hash/mod.rs;l=250:
// Unsupported use statement that refers to this type of the entity:
// core::hash::Hash of kind Macro(MacroKinds(4))

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for derive macro `core::hash::Hash` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/hash/mod.rs;l=250:
// Unsupported use statement that refers to this type of the entity:
// core::hash::Hash of kind Macro(MacroKinds(4))

}

namespace rs::std::prelude::v1 {

// Error generating bindings for derive macro `core::hash::Hash` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/hash/mod.rs;l=250:
// Unsupported use statement that refers to this type of the entity:
// core::hash::Hash of kind Macro(MacroKinds(4))

}

namespace rs::std::hash {
using ::rs::core::hash::Hasher;
}

namespace rs::std::hash {

//  An implementation of SipHash 2-4.
//
//  See: <https://github.com/veorq/SipHash>
//
//  SipHash is a general-purpose hashing function: it runs at a good
//  speed (competitive with Spooky and City) and permits strong _keyed_
//  hashing. This lets you key your hash tables from a strong RNG, such as
//  [`rand::os::OsRng`](https://docs.rs/rand/latest/rand/rngs/struct.OsRng.html).
//
//  Although the SipHash algorithm is considered to be generally strong,
//  it is not intended for cryptographic purposes. As such, all
//  cryptographic uses of this implementation are _strongly discouraged_.
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/hash/sip.rs;l=49
using SipHasher CRUBIT_INTERNAL_RUST_TYPE(":: core :: hash :: SipHasher")
    [[deprecated("use `std::hash::DefaultHasher` instead")]] =
        ::rs::core::hash::SipHasher;
}  // namespace rs::std::hash

namespace rs::std {

// Error generating bindings for module `core::hint` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/lib.rs;l=260:
// Unsupported use statement that refers to this type of the entity: core::hint
// of kind Mod

}

namespace rs::std::hint {
using ::rs::core::hint::assert_unchecked;

// Error generating bindings for function `core::hint::black_box` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/hint.rs;l=490:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

using ::rs::core::hint::cold_path;

// Error generating bindings for function `core::hint::select_unpredictable`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/hint.rs;l=832:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

using ::rs::core::hint::spin_loop;
using ::rs::core::hint::unreachable_unchecked;
}  // namespace rs::std::hint

namespace rs::std {

// Error generating bindings for module `core::i128` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/shells/legacy_int_modules.rs;l=12:
// Unsupported use statement that refers to this type of the entity: core::i128
// of kind Mod

}

namespace rs::std {

namespace
    [[deprecated("all constants in this module replaced by associated "
                 "constants on the type")]] i128 {

// Error generating bindings for constant `core::i128::MAX` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/shells/legacy_int_modules.rs;l=55:
// Unsupported use statement that refers to this type of the entity:
// core::i128::MAX of kind Const { is_type_const: false }

// Error generating bindings for constant `core::i128::MIN` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/shells/legacy_int_modules.rs;l=35:
// Unsupported use statement that refers to this type of the entity:
// core::i128::MIN of kind Const { is_type_const: false }

}  // namespace i128

}  // namespace rs::std

namespace rs::std {

// Error generating bindings for module `core::i16` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/shells/legacy_int_modules.rs;l=12:
// Unsupported use statement that refers to this type of the entity: core::i16
// of kind Mod

}

namespace rs::std {

namespace
    [[deprecated("all constants in this module replaced by associated "
                 "constants on the type")]] i16 {

// Error generating bindings for constant `core::i16::MAX` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/shells/legacy_int_modules.rs;l=55:
// Unsupported use statement that refers to this type of the entity:
// core::i16::MAX of kind Const { is_type_const: false }

// Error generating bindings for constant `core::i16::MIN` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/shells/legacy_int_modules.rs;l=35:
// Unsupported use statement that refers to this type of the entity:
// core::i16::MIN of kind Const { is_type_const: false }

}  // namespace i16

}  // namespace rs::std

namespace rs::std {

// Error generating bindings for module `core::i32` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/shells/legacy_int_modules.rs;l=12:
// Unsupported use statement that refers to this type of the entity: core::i32
// of kind Mod

}

namespace rs::std {

namespace
    [[deprecated("all constants in this module replaced by associated "
                 "constants on the type")]] i32 {

// Error generating bindings for constant `core::i32::MAX` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/shells/legacy_int_modules.rs;l=55:
// Unsupported use statement that refers to this type of the entity:
// core::i32::MAX of kind Const { is_type_const: false }

// Error generating bindings for constant `core::i32::MIN` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/shells/legacy_int_modules.rs;l=35:
// Unsupported use statement that refers to this type of the entity:
// core::i32::MIN of kind Const { is_type_const: false }

}  // namespace i32

}  // namespace rs::std

namespace rs::std {

// Error generating bindings for module `core::i64` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/shells/legacy_int_modules.rs;l=12:
// Unsupported use statement that refers to this type of the entity: core::i64
// of kind Mod

}

namespace rs::std {

namespace
    [[deprecated("all constants in this module replaced by associated "
                 "constants on the type")]] i64 {

// Error generating bindings for constant `core::i64::MAX` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/shells/legacy_int_modules.rs;l=55:
// Unsupported use statement that refers to this type of the entity:
// core::i64::MAX of kind Const { is_type_const: false }

// Error generating bindings for constant `core::i64::MIN` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/shells/legacy_int_modules.rs;l=35:
// Unsupported use statement that refers to this type of the entity:
// core::i64::MIN of kind Const { is_type_const: false }

}  // namespace i64

}  // namespace rs::std

namespace rs::std {

// Error generating bindings for module `core::i8` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/shells/legacy_int_modules.rs;l=12:
// Unsupported use statement that refers to this type of the entity: core::i8 of
// kind Mod

}

namespace rs::std {

namespace
    [[deprecated("all constants in this module replaced by associated "
                 "constants on the type")]] i8 {

// Error generating bindings for constant `core::i8::MAX` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/shells/legacy_int_modules.rs;l=55:
// Unsupported use statement that refers to this type of the entity:
// core::i8::MAX of kind Const { is_type_const: false }

// Error generating bindings for constant `core::i8::MIN` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/shells/legacy_int_modules.rs;l=35:
// Unsupported use statement that refers to this type of the entity:
// core::i8::MIN of kind Const { is_type_const: false }

}  // namespace i8

}  // namespace rs::std

namespace rs::std {

// Error generating bindings for macro `core::include` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1494:
// Unsupported use statement that refers to this type of the entity:
// core::include of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2015 {

// Error generating bindings for macro `core::include` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1494:
// Unsupported use statement that refers to this type of the entity:
// core::include of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2018 {

// Error generating bindings for macro `core::include` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1494:
// Unsupported use statement that refers to this type of the entity:
// core::include of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for macro `core::include` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1494:
// Unsupported use statement that refers to this type of the entity:
// core::include of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for macro `core::include` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1494:
// Unsupported use statement that refers to this type of the entity:
// core::include of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::v1 {

// Error generating bindings for macro `core::include` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1494:
// Unsupported use statement that refers to this type of the entity:
// core::include of kind Macro(MacroKinds(1))

}

namespace rs::std {

// Error generating bindings for macro `core::include_bytes` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1367:
// Unsupported use statement that refers to this type of the entity:
// core::include_bytes of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2015 {

// Error generating bindings for macro `core::include_bytes` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1367:
// Unsupported use statement that refers to this type of the entity:
// core::include_bytes of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2018 {

// Error generating bindings for macro `core::include_bytes` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1367:
// Unsupported use statement that refers to this type of the entity:
// core::include_bytes of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for macro `core::include_bytes` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1367:
// Unsupported use statement that refers to this type of the entity:
// core::include_bytes of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for macro `core::include_bytes` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1367:
// Unsupported use statement that refers to this type of the entity:
// core::include_bytes of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::v1 {

// Error generating bindings for macro `core::include_bytes` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1367:
// Unsupported use statement that refers to this type of the entity:
// core::include_bytes of kind Macro(MacroKinds(1))

}

namespace rs::std {

// Error generating bindings for macro `core::include_str` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1327:
// Unsupported use statement that refers to this type of the entity:
// core::include_str of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2015 {

// Error generating bindings for macro `core::include_str` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1327:
// Unsupported use statement that refers to this type of the entity:
// core::include_str of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2018 {

// Error generating bindings for macro `core::include_str` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1327:
// Unsupported use statement that refers to this type of the entity:
// core::include_str of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for macro `core::include_str` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1327:
// Unsupported use statement that refers to this type of the entity:
// core::include_str of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for macro `core::include_str` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1327:
// Unsupported use statement that refers to this type of the entity:
// core::include_str of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::v1 {

// Error generating bindings for macro `core::include_str` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1327:
// Unsupported use statement that refers to this type of the entity:
// core::include_str of kind Macro(MacroKinds(1))

}

namespace rs::std::mem {

// Error generating bindings for function `core::intrinsics::transmute` defined
// at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/intrinsics/mod.rs;l=862:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `Src`

}

namespace rs::std::io {

static_assert(
    sizeof(Error) == 8,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(Error) == 8,
    "Verify that ADT layout didn't change since this header got generated");
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtNtCs9kG8YiNG2f0_u4core2io5error5ErrorNtNtNtB8_u3ops4drop4Drop4dropCsb7ytMsthdgm_u3std(
    ::rs::std::io::Error&);
}
inline Error::~Error() {
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtNtCs9kG8YiNG2f0_u4core2io5error5ErrorNtNtNtB8_u3ops4drop4Drop4dropCsb7ytMsthdgm_u3std(
          *this);
}
inline ::rs::std::io::Error::Error(::crubit::UnsafeRelocateTag, Error&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMs1_uNtNtCs9kG8YiNG2f0_u4core2io5errorNtB5_u5Error12raw_uos_uerror(
    ::rs::std::io::Error const&, unsigned char* __ret_ptr);
}
inline ::std::optional<::std::int32_t> Error::raw_os_error() const {
  auto&& self = *this;
  unsigned char __return_value_storage
      [::crubit::OptionAbi<::crubit::TransmuteAbi<::std::int32_t>>::kSize];
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMs1_uNtNtCs9kG8YiNG2f0_u4core2io5errorNtB5_u5Error12raw_uos_uerror(
          self, __return_value_storage);
  return ::crubit::internal::Decode<
      ::crubit::OptionAbi<::crubit::TransmuteAbi<::std::int32_t>>>(
      ::crubit::OptionAbi<::crubit::TransmuteAbi<::std::int32_t>>(
          ::crubit::TransmuteAbi<::std::int32_t>()),
      __return_value_storage);
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMs1_uNtNtCs9kG8YiNG2f0_u4core2io5errorNtB5_u5Error4kind(
    ::rs::std::io::Error const&, ::rs::std::io::ErrorKind* __ret_ptr);
}
inline ::rs::std::io::ErrorKind Error::kind() const {
  auto&& self = *this;
  crubit::Slot<::rs::std::io::ErrorKind> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMs1_uNtNtCs9kG8YiNG2f0_u4core2io5errorNtB5_u5Error4kind(
          self, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtNtCs9kG8YiNG2f0_u4core2io5error5ErrorINtNtB8_u7convert4FromNtB4_u9ErrorKindE4fromCsb7ytMsthdgm_u3std(
    ::rs::std::io::ErrorKind*, ::rs::std::io::Error* __ret_ptr);
}
inline Error::Error(::rs::std::io::ErrorKind value) {
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtNtCs9kG8YiNG2f0_u4core2io5error5ErrorINtNtB8_u7convert4FromNtB4_u9ErrorKindE4fromCsb7ytMsthdgm_u3std(
          &value, this);
}
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtNtCs9kG8YiNG2f0_u4core2io5error5ErrorINtNtB8_u7convert4FromNtNtNtCsaddbpR6HRqH_u5alloc3ffi5c_ustr8NulErrorE4fromCsb7ytMsthdgm_u3std(
    ::rs::alloc::ffi::NulError*, ::rs::std::io::Error* __ret_ptr);
}
inline Error::Error(::rs::alloc::ffi::NulError value) {
  crubit::Slot value_slot((::std::move(value)));
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtNtCs9kG8YiNG2f0_u4core2io5error5ErrorINtNtB8_u7convert4FromNtNtNtCsaddbpR6HRqH_u5alloc3ffi5c_ustr8NulErrorE4fromCsb7ytMsthdgm_u3std(
          value_slot.Get(), this);
}
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtNtCs9kG8YiNG2f0_u4core2io5error5ErrorINtNtB8_u7convert4FromNtNtCsaddbpR6HRqH_u5alloc11collections15TryReserveErrorE4fromCsb7ytMsthdgm_u3std(
    ::rs::alloc::collections::TryReserveError*,
    ::rs::std::io::Error* __ret_ptr);
}
inline Error::Error(::rs::alloc::collections::TryReserveError value) {
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtNtCs9kG8YiNG2f0_u4core2io5error5ErrorINtNtB8_u7convert4FromNtNtCsaddbpR6HRqH_u5alloc11collections15TryReserveErrorE4fromCsb7ytMsthdgm_u3std(
          &value, this);
}
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtNtCs9kG8YiNG2f0_u4core2io5error5ErrorNtNtCsaddbpR6HRqH_u5alloc6string8ToString9to_ustringCsb7ytMsthdgm_u3std(
    ::rs::std::io::Error const&, ::rs::alloc::string::String* __ret_ptr);
inline void Error::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(Error, repr));
}
static_assert(
    sizeof(ErrorKind) == 1,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(ErrorKind) == 1,
    "Verify that ADT layout didn't change since this header got generated");

// `static` constructor
inline constexpr ErrorKind ErrorKind::MakeNotFound() {
  return ErrorKind(PrivateBytesTag{}, {0});
}

// `static` constructor
inline constexpr ErrorKind ErrorKind::MakePermissionDenied() {
  return ErrorKind(PrivateBytesTag{}, {1});
}

// `static` constructor
inline constexpr ErrorKind ErrorKind::MakeConnectionRefused() {
  return ErrorKind(PrivateBytesTag{}, {2});
}

// `static` constructor
inline constexpr ErrorKind ErrorKind::MakeConnectionReset() {
  return ErrorKind(PrivateBytesTag{}, {3});
}

// `static` constructor
inline constexpr ErrorKind ErrorKind::MakeHostUnreachable() {
  return ErrorKind(PrivateBytesTag{}, {4});
}

// `static` constructor
inline constexpr ErrorKind ErrorKind::MakeNetworkUnreachable() {
  return ErrorKind(PrivateBytesTag{}, {5});
}

// `static` constructor
inline constexpr ErrorKind ErrorKind::MakeConnectionAborted() {
  return ErrorKind(PrivateBytesTag{}, {6});
}

// `static` constructor
inline constexpr ErrorKind ErrorKind::MakeNotConnected() {
  return ErrorKind(PrivateBytesTag{}, {7});
}

// `static` constructor
inline constexpr ErrorKind ErrorKind::MakeAddrInUse() {
  return ErrorKind(PrivateBytesTag{}, {8});
}

// `static` constructor
inline constexpr ErrorKind ErrorKind::MakeAddrNotAvailable() {
  return ErrorKind(PrivateBytesTag{}, {9});
}

// `static` constructor
inline constexpr ErrorKind ErrorKind::MakeNetworkDown() {
  return ErrorKind(PrivateBytesTag{}, {10});
}

// `static` constructor
inline constexpr ErrorKind ErrorKind::MakeBrokenPipe() {
  return ErrorKind(PrivateBytesTag{}, {11});
}

// `static` constructor
inline constexpr ErrorKind ErrorKind::MakeAlreadyExists() {
  return ErrorKind(PrivateBytesTag{}, {12});
}

// `static` constructor
inline constexpr ErrorKind ErrorKind::MakeWouldBlock() {
  return ErrorKind(PrivateBytesTag{}, {13});
}

// `static` constructor
inline constexpr ErrorKind ErrorKind::MakeNotADirectory() {
  return ErrorKind(PrivateBytesTag{}, {14});
}

// `static` constructor
inline constexpr ErrorKind ErrorKind::MakeIsADirectory() {
  return ErrorKind(PrivateBytesTag{}, {15});
}

// `static` constructor
inline constexpr ErrorKind ErrorKind::MakeDirectoryNotEmpty() {
  return ErrorKind(PrivateBytesTag{}, {16});
}

// `static` constructor
inline constexpr ErrorKind ErrorKind::MakeReadOnlyFilesystem() {
  return ErrorKind(PrivateBytesTag{}, {17});
}

// `static` constructor
inline constexpr ErrorKind ErrorKind::MakeFilesystemLoop() {
  return ErrorKind(PrivateBytesTag{}, {18});
}

// `static` constructor
inline constexpr ErrorKind ErrorKind::MakeStaleNetworkFileHandle() {
  return ErrorKind(PrivateBytesTag{}, {19});
}

// `static` constructor
inline constexpr ErrorKind ErrorKind::MakeInvalidInput() {
  return ErrorKind(PrivateBytesTag{}, {20});
}

// `static` constructor
inline constexpr ErrorKind ErrorKind::MakeInvalidData() {
  return ErrorKind(PrivateBytesTag{}, {21});
}

// `static` constructor
inline constexpr ErrorKind ErrorKind::MakeTimedOut() {
  return ErrorKind(PrivateBytesTag{}, {22});
}

// `static` constructor
inline constexpr ErrorKind ErrorKind::MakeWriteZero() {
  return ErrorKind(PrivateBytesTag{}, {23});
}

// `static` constructor
inline constexpr ErrorKind ErrorKind::MakeStorageFull() {
  return ErrorKind(PrivateBytesTag{}, {24});
}

// `static` constructor
inline constexpr ErrorKind ErrorKind::MakeNotSeekable() {
  return ErrorKind(PrivateBytesTag{}, {25});
}

// `static` constructor
inline constexpr ErrorKind ErrorKind::MakeQuotaExceeded() {
  return ErrorKind(PrivateBytesTag{}, {26});
}

// `static` constructor
inline constexpr ErrorKind ErrorKind::MakeFileTooLarge() {
  return ErrorKind(PrivateBytesTag{}, {27});
}

// `static` constructor
inline constexpr ErrorKind ErrorKind::MakeResourceBusy() {
  return ErrorKind(PrivateBytesTag{}, {28});
}

// `static` constructor
inline constexpr ErrorKind ErrorKind::MakeExecutableFileBusy() {
  return ErrorKind(PrivateBytesTag{}, {29});
}

// `static` constructor
inline constexpr ErrorKind ErrorKind::MakeDeadlock() {
  return ErrorKind(PrivateBytesTag{}, {30});
}

// `static` constructor
inline constexpr ErrorKind ErrorKind::MakeCrossesDevices() {
  return ErrorKind(PrivateBytesTag{}, {31});
}

// `static` constructor
inline constexpr ErrorKind ErrorKind::MakeTooManyLinks() {
  return ErrorKind(PrivateBytesTag{}, {32});
}

// `static` constructor
inline constexpr ErrorKind ErrorKind::MakeInvalidFilename() {
  return ErrorKind(PrivateBytesTag{}, {33});
}

// `static` constructor
inline constexpr ErrorKind ErrorKind::MakeArgumentListTooLong() {
  return ErrorKind(PrivateBytesTag{}, {34});
}

// `static` constructor
inline constexpr ErrorKind ErrorKind::MakeInterrupted() {
  return ErrorKind(PrivateBytesTag{}, {35});
}

// `static` constructor
inline constexpr ErrorKind ErrorKind::MakeUnsupported() {
  return ErrorKind(PrivateBytesTag{}, {36});
}

// `static` constructor
inline constexpr ErrorKind ErrorKind::MakeUnexpectedEof() {
  return ErrorKind(PrivateBytesTag{}, {37});
}

// `static` constructor
inline constexpr ErrorKind ErrorKind::MakeOutOfMemory() {
  return ErrorKind(PrivateBytesTag{}, {38});
}

// `static` constructor
inline constexpr ErrorKind ErrorKind::MakeInProgress() {
  return ErrorKind(PrivateBytesTag{}, {39});
}

// `static` constructor
inline constexpr ErrorKind ErrorKind::MakeTooManyOpenFiles() {
  return ErrorKind(PrivateBytesTag{}, {40});
}

// `static` constructor
inline constexpr ErrorKind ErrorKind::MakeInputOutputError() {
  return ErrorKind(PrivateBytesTag{}, {41});
}

// `static` constructor
inline constexpr ErrorKind ErrorKind::MakeOther() {
  return ErrorKind(PrivateBytesTag{}, {42});
}

// `static` constructor
inline constexpr ErrorKind ErrorKind::MakeUncategorized() {
  return ErrorKind(PrivateBytesTag{}, {43});
}
static_assert(::std::is_trivially_destructible_v<ErrorKind>);
static_assert(
    ::std::is_trivially_move_constructible_v<::rs::std::io::ErrorKind>);
static_assert(::std::is_trivially_move_assignable_v<::rs::std::io::ErrorKind>);
static_assert(
    ::std::is_trivially_copy_constructible_v<::rs::std::io::ErrorKind>);
static_assert(::std::is_trivially_copy_assignable_v<::rs::std::io::ErrorKind>);
inline ::rs::std::io::ErrorKind::ErrorKind(::crubit::UnsafeRelocateTag,
                                           ErrorKind&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtNtCs9kG8YiNG2f0_u4core2io5error9ErrorKindINtNtB8_u7convert4IntoNtB4_u5ErrorE4intoCsb7ytMsthdgm_u3std(
    ::rs::std::io::ErrorKind*, ::rs::std::io::Error* __ret_ptr);
}
inline ErrorKind::operator ::rs::std::io::Error() {
  auto& self = const_cast<::std::remove_cvref_t<decltype(*this)>&>(*this);
  crubit::Slot<::rs::std::io::Error> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtNtCs9kG8YiNG2f0_u4core2io5error9ErrorKindINtNtB8_u7convert4IntoNtB4_u5ErrorE4intoCsb7ytMsthdgm_u3std(
          &self, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}
namespace __crubit_internal {
extern "C" bool
__crubit_thunk_818b180788380d74__uRNvXss_uNtNtCs9kG8YiNG2f0_u4core2io5errorNtB5_u9ErrorKindNtNtB9_u3cmp9PartialEq2eq(
    ::rs::std::io::ErrorKind const&, ::rs::std::io::ErrorKind const&);
}
inline bool ErrorKind::operator==(::rs::std::io::ErrorKind const& other) const {
  auto&& self = *this;
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXss_uNtNtCs9kG8YiNG2f0_u4core2io5errorNtB5_u9ErrorKindNtNtB9_u3cmp9PartialEq2eq(
          self, other);
}
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtNtCs9kG8YiNG2f0_u4core2io5error9ErrorKindNtNtCsaddbpR6HRqH_u5alloc6string8ToString9to_ustringCsb7ytMsthdgm_u3std(
    ::rs::std::io::ErrorKind const&, ::rs::alloc::string::String* __ret_ptr);
namespace __crubit_internal {
extern "C" ::std::int8_t
__crubit_thunk_818b180788380d74__uRNvYNtNtNtCs9kG8YiNG2f0_u4core2io5error9ErrorKindNtNtB8_u3cmp3Ord3cmpCsb7ytMsthdgm_u3std(
    ::rs::std::io::ErrorKind const&, ::rs::std::io::ErrorKind const&);
}
inline ::std::strong_ordering ErrorKind::operator<=>(
    const ErrorKind& other) const {
  auto val = __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtNtCs9kG8YiNG2f0_u4core2io5error9ErrorKindNtNtB8_u3cmp3Ord3cmpCsb7ytMsthdgm_u3std(
          *this, other);
  switch (val) {
    case -1:
      return ::std::strong_ordering::less;
    case 0:
      return ::std::strong_ordering::equal;
    case 1:
      return ::std::strong_ordering::greater;
    default:
      CRUBIT_UNREACHABLE();
  }
}
inline void ErrorKind::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(ErrorKind, __opaque_blob_of_bytes));
}
}  // namespace rs::std::io

namespace rs::std::io {

static_assert(
    sizeof(IoSlice) == 16,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(IoSlice) == 8,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(::std::is_trivially_destructible_v<IoSlice>);
static_assert(::std::is_trivially_move_constructible_v<::rs::std::io::IoSlice>);
static_assert(::std::is_trivially_move_assignable_v<::rs::std::io::IoSlice>);
static_assert(::std::is_trivially_copy_constructible_v<::rs::std::io::IoSlice>);
static_assert(::std::is_trivially_copy_assignable_v<::rs::std::io::IoSlice>);
inline ::rs::std::io::IoSlice::IoSlice(::crubit::UnsafeRelocateTag,
                                       IoSlice&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMs7_uNtNtCs9kG8YiNG2f0_u4core2io8io_usliceNtB5_u7IoSlice3new(
    rs_std::SliceRef<const ::std::uint8_t>*, ::rs::std::io::IoSlice* __ret_ptr);
}
inline ::rs::std::io::IoSlice IoSlice::new_(
    rs_std::SliceRef<const ::std::uint8_t> buf) {
  crubit::Slot<::rs::std::io::IoSlice> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMs7_uNtNtCs9kG8YiNG2f0_u4core2io8io_usliceNtB5_u7IoSlice3new(
          &buf, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMs7_uNtNtCs9kG8YiNG2f0_u4core2io8io_usliceNtB5_u7IoSlice7advance(
    ::rs::std::io::IoSlice&, ::std::uintptr_t);
}
inline void IoSlice::advance(::std::uintptr_t n) {
  auto&& self = *this;
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMs7_uNtNtCs9kG8YiNG2f0_u4core2io8io_usliceNtB5_u7IoSlice7advance(
          self, n);
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMs7_uNtNtCs9kG8YiNG2f0_u4core2io8io_usliceNtB5_u7IoSlice14advance_uslices(
    rs_std::SliceRef<::rs::std::io::IoSlice>&, ::std::uintptr_t);
}
inline void IoSlice::advance_slices(
    rs_std::SliceRef<::rs::std::io::IoSlice>& bufs, ::std::uintptr_t n) {
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMs7_uNtNtCs9kG8YiNG2f0_u4core2io8io_usliceNtB5_u7IoSlice14advance_uslices(
          bufs, n);
}
inline void IoSlice::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(IoSlice, __field0));
}
static_assert(
    sizeof(IoSliceMut) == 16,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(IoSliceMut) == 8,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(::std::is_trivially_destructible_v<IoSliceMut>);
static_assert(
    ::std::is_trivially_move_constructible_v<::rs::std::io::IoSliceMut>);
static_assert(::std::is_trivially_move_assignable_v<::rs::std::io::IoSliceMut>);
inline ::rs::std::io::IoSliceMut::IoSliceMut(::crubit::UnsafeRelocateTag,
                                             IoSliceMut&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMs1_uNtNtCs9kG8YiNG2f0_u4core2io8io_usliceNtB5_u10IoSliceMut3new(
    rs_std::SliceRef<::std::uint8_t>*, ::rs::std::io::IoSliceMut* __ret_ptr);
}
inline ::rs::std::io::IoSliceMut IoSliceMut::new_(
    rs_std::SliceRef<::std::uint8_t> buf) {
  crubit::Slot<::rs::std::io::IoSliceMut> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMs1_uNtNtCs9kG8YiNG2f0_u4core2io8io_usliceNtB5_u10IoSliceMut3new(
          &buf, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMs1_uNtNtCs9kG8YiNG2f0_u4core2io8io_usliceNtB5_u10IoSliceMut7advance(
    ::rs::std::io::IoSliceMut&, ::std::uintptr_t);
}
inline void IoSliceMut::advance(::std::uintptr_t n) {
  auto&& self = *this;
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMs1_uNtNtCs9kG8YiNG2f0_u4core2io8io_usliceNtB5_u10IoSliceMut7advance(
          self, n);
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMs1_uNtNtCs9kG8YiNG2f0_u4core2io8io_usliceNtB5_u10IoSliceMut14advance_uslices(
    rs_std::SliceRef<::rs::std::io::IoSliceMut>&, ::std::uintptr_t);
}
inline void IoSliceMut::advance_slices(
    rs_std::SliceRef<::rs::std::io::IoSliceMut>& bufs, ::std::uintptr_t n) {
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMs1_uNtNtCs9kG8YiNG2f0_u4core2io8io_usliceNtB5_u10IoSliceMut14advance_uslices(
          bufs, n);
}
inline void IoSliceMut::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(IoSliceMut, __field0));
}
}  // namespace rs::std::io

namespace rs::std::io {

static_assert(
    sizeof(Repeat) == 1,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(Repeat) == 1,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(::std::is_trivially_destructible_v<Repeat>);
static_assert(::std::is_trivially_move_constructible_v<::rs::std::io::Repeat>);
static_assert(::std::is_trivially_move_assignable_v<::rs::std::io::Repeat>);
inline ::rs::std::io::Repeat::Repeat(::crubit::UnsafeRelocateTag,
                                     Repeat&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}
inline void Repeat::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(Repeat, byte));
}
}  // namespace rs::std::io

namespace rs::std::io::prelude {
using ::rs::std::io::Seek;
}

namespace rs::std::io {

static_assert(
    sizeof(SeekFrom) == 16,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(SeekFrom) == 8,
    "Verify that ADT layout didn't change since this header got generated");

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNcNtNtNtNtCs9kG8YiNG2f0_u4core2io4seek8SeekFrom5Start0(
    ::std::uint64_t, ::rs::std::io::SeekFrom* __ret_ptr);
}
inline ::rs::std::io::SeekFrom SeekFrom::MakeStart(::std::uint64_t __param_0) {
  crubit::Slot<::rs::std::io::SeekFrom> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNcNtNtNtNtCs9kG8YiNG2f0_u4core2io4seek8SeekFrom5Start0(
          __param_0, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNcNtNtNtNtCs9kG8YiNG2f0_u4core2io4seek8SeekFrom3End0(
    ::std::int64_t, ::rs::std::io::SeekFrom* __ret_ptr);
}
inline ::rs::std::io::SeekFrom SeekFrom::MakeEnd(::std::int64_t __param_0) {
  crubit::Slot<::rs::std::io::SeekFrom> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNcNtNtNtNtCs9kG8YiNG2f0_u4core2io4seek8SeekFrom3End0(
          __param_0, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNcNtNtNtNtCs9kG8YiNG2f0_u4core2io4seek8SeekFrom7Current0(
    ::std::int64_t, ::rs::std::io::SeekFrom* __ret_ptr);
}
inline ::rs::std::io::SeekFrom SeekFrom::MakeCurrent(::std::int64_t __param_0) {
  crubit::Slot<::rs::std::io::SeekFrom> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNcNtNtNtNtCs9kG8YiNG2f0_u4core2io4seek8SeekFrom7Current0(
          __param_0, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}
static_assert(::std::is_trivially_destructible_v<SeekFrom>);
static_assert(
    ::std::is_trivially_move_constructible_v<::rs::std::io::SeekFrom>);
static_assert(::std::is_trivially_move_assignable_v<::rs::std::io::SeekFrom>);
static_assert(
    ::std::is_trivially_copy_constructible_v<::rs::std::io::SeekFrom>);
static_assert(::std::is_trivially_copy_assignable_v<::rs::std::io::SeekFrom>);
inline ::rs::std::io::SeekFrom::SeekFrom(::crubit::UnsafeRelocateTag,
                                         SeekFrom&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}

namespace __crubit_internal {
extern "C" bool
__crubit_thunk_818b180788380d74__uRNvXs0_uNtNtCs9kG8YiNG2f0_u4core2io4seekNtB5_u8SeekFromNtNtB9_u3cmp9PartialEq2eq(
    ::rs::std::io::SeekFrom const&, ::rs::std::io::SeekFrom const&);
}
inline bool SeekFrom::operator==(::rs::std::io::SeekFrom const& other) const {
  auto&& self = *this;
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXs0_uNtNtCs9kG8YiNG2f0_u4core2io4seekNtB5_u8SeekFromNtNtB9_u3cmp9PartialEq2eq(
          self, other);
}
inline void SeekFrom::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(SeekFrom, __opaque_blob_of_bytes));
}
}  // namespace rs::std::io

namespace rs::std::io::prelude {
using ::rs::std::io::Write;
}

namespace rs::std::io {

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvNtNtCs9kG8YiNG2f0_u4core2io4util6repeat(
    ::std::uint8_t, ::rs::std::io::Repeat* __ret_ptr);
}
inline ::rs::std::io::Repeat repeat(::std::uint8_t byte) {
  crubit::Slot<::rs::std::io::Repeat> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvNtNtCs9kG8YiNG2f0_u4core2io4util6repeat(
          byte, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

}  // namespace rs::std::io

namespace rs::std {

// Error generating bindings for module `core::isize` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/shells/legacy_int_modules.rs;l=12:
// Unsupported use statement that refers to this type of the entity: core::isize
// of kind Mod

}

namespace rs::std {

namespace
    [[deprecated("all constants in this module replaced by associated "
                 "constants on the type")]] isize {

// Error generating bindings for constant `core::isize::MAX` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/shells/legacy_int_modules.rs;l=55:
// Unsupported use statement that refers to this type of the entity:
// core::isize::MAX of kind Const { is_type_const: false }

// Error generating bindings for constant `core::isize::MIN` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/shells/legacy_int_modules.rs;l=35:
// Unsupported use statement that refers to this type of the entity:
// core::isize::MIN of kind Const { is_type_const: false }

}  // namespace isize

}  // namespace rs::std

namespace rs::std {

// Error generating bindings for module `core::iter` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/lib.rs;l=298:
// Unsupported use statement that refers to this type of the entity: core::iter
// of kind Mod

}

namespace rs::std::iter {

// Error generating bindings for struct `core::iter::Chain` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/adapters/chain.rs;l=23:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::iter {

// Error generating bindings for struct `core::iter::Cloned` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/adapters/cloned.rs;l=18:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::iter {

// Error generating bindings for struct `core::iter::Copied` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/adapters/copied.rs;l=19:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::iter {

// Error generating bindings for struct `core::iter::Cycle` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/adapters/cycle.rs;l=15:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::iter {
using ::rs::core::iter::DoubleEndedIterator;
}

namespace rs::std::prelude::rust_2015 {
using ::rs::core::iter::DoubleEndedIterator;
}

namespace rs::std::prelude::rust_2018 {
using ::rs::core::iter::DoubleEndedIterator;
}

namespace rs::std::prelude::rust_2021 {
using ::rs::core::iter::DoubleEndedIterator;
}

namespace rs::std::prelude::rust_2024 {
using ::rs::core::iter::DoubleEndedIterator;
}

namespace rs::std::prelude::v1 {
using ::rs::core::iter::DoubleEndedIterator;
}

namespace rs::std::iter {

// Error generating bindings for struct `core::iter::Empty` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/sources/empty.rs;l=30:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::iter {

// Error generating bindings for struct `core::iter::Enumerate` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/adapters/enumerate.rs;l=18:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::iter {
using ::rs::core::iter::ExactSizeIterator;
}

namespace rs::std::prelude::rust_2015 {
using ::rs::core::iter::ExactSizeIterator;
}

namespace rs::std::prelude::rust_2018 {
using ::rs::core::iter::ExactSizeIterator;
}

namespace rs::std::prelude::rust_2021 {
using ::rs::core::iter::ExactSizeIterator;
}

namespace rs::std::prelude::rust_2024 {
using ::rs::core::iter::ExactSizeIterator;
}

namespace rs::std::prelude::v1 {
using ::rs::core::iter::ExactSizeIterator;
}

namespace rs::std::iter {

// Error generating bindings for trait `core::iter::Extend` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/traits/collect.rs;l=397:
// Aliases to generic trait `core::iter::Extend` are not supported.

}

namespace rs::std::prelude::rust_2015 {

// Error generating bindings for trait `core::iter::Extend` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/traits/collect.rs;l=397:
// Aliases to generic trait `core::iter::Extend` are not supported.

}

namespace rs::std::prelude::rust_2018 {

// Error generating bindings for trait `core::iter::Extend` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/traits/collect.rs;l=397:
// Aliases to generic trait `core::iter::Extend` are not supported.

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for trait `core::iter::Extend` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/traits/collect.rs;l=397:
// Aliases to generic trait `core::iter::Extend` are not supported.

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for trait `core::iter::Extend` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/traits/collect.rs;l=397:
// Aliases to generic trait `core::iter::Extend` are not supported.

}

namespace rs::std::prelude::v1 {

// Error generating bindings for trait `core::iter::Extend` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/traits/collect.rs;l=397:
// Aliases to generic trait `core::iter::Extend` are not supported.

}

namespace rs::std::iter {

// Error generating bindings for struct `core::iter::Filter` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/adapters/filter.rs;l=21:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::iter {

// Error generating bindings for struct `core::iter::FilterMap` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/adapters/filter_map.rs;l=18:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::iter {

// Error generating bindings for struct `core::iter::FlatMap` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/adapters/flatten.rs;l=17:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for struct `core::iter::Flatten` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/adapters/flatten.rs;l=184:
// Generic types are not supported yet (b/259749095)

}  // namespace rs::std::iter

namespace rs::std::iter {

// Error generating bindings for struct `core::iter::FromFn` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/sources/from_fn.rs;l=60:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::iter {

// Error generating bindings for trait `core::iter::FromIterator` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/traits/collect.rs;l=134:
// Aliases to generic trait `core::iter::FromIterator` are not supported.

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for trait `core::iter::FromIterator` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/traits/collect.rs;l=134:
// Aliases to generic trait `core::iter::FromIterator` are not supported.

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for trait `core::iter::FromIterator` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/traits/collect.rs;l=134:
// Aliases to generic trait `core::iter::FromIterator` are not supported.

}

namespace rs::std::iter {

// Error generating bindings for struct `core::iter::Fuse` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/adapters/fuse.rs;l=18:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::iter {
using ::rs::core::iter::FusedIterator;
}

namespace rs::std::iter {

// Error generating bindings for struct `core::iter::Inspect` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/adapters/inspect.rs;l=18:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::iter {
using ::rs::core::iter::IntoIterator;
}

namespace rs::std::prelude::rust_2015 {
using ::rs::core::iter::IntoIterator;
}

namespace rs::std::prelude::rust_2018 {
using ::rs::core::iter::IntoIterator;
}

namespace rs::std::prelude::rust_2021 {
using ::rs::core::iter::IntoIterator;
}

namespace rs::std::prelude::rust_2024 {
using ::rs::core::iter::IntoIterator;
}

namespace rs::std::prelude::v1 {
using ::rs::core::iter::IntoIterator;
}

namespace rs::std::iter {
using ::rs::core::iter::Iterator;
}

namespace rs::std::prelude::rust_2015 {
using ::rs::core::iter::Iterator;
}

namespace rs::std::prelude::rust_2018 {
using ::rs::core::iter::Iterator;
}

namespace rs::std::prelude::rust_2021 {
using ::rs::core::iter::Iterator;
}

namespace rs::std::prelude::rust_2024 {
using ::rs::core::iter::Iterator;
}

namespace rs::std::prelude::v1 {
using ::rs::core::iter::Iterator;
}

namespace rs::std::iter {

// Error generating bindings for struct `core::iter::Map` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/adapters/map.rs;l=61:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::iter {

// Error generating bindings for struct `core::iter::MapWhile` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/adapters/map_while.rs;l=17:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::iter {

// Error generating bindings for struct `core::iter::Once` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/sources/once.rs;l=66:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::iter {

// Error generating bindings for struct `core::iter::OnceWith` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/sources/once_with.rs;l=72:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::iter {

// Error generating bindings for struct `core::iter::Peekable` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/adapters/peekable.rs;l=17:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::iter {

// Error generating bindings for trait `core::iter::Product` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/traits/accum.rs;l=40:
// Aliases to generic trait `core::iter::Product` are not supported.

}

namespace rs::std::iter {

// Error generating bindings for struct `core::iter::Repeat` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/sources/repeat.rs;l=73:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::iter {

// Error generating bindings for struct `core::iter::RepeatN` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/sources/repeat_n.rs;l=82:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::iter {

// Error generating bindings for struct `core::iter::RepeatWith` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/sources/repeat_with.rs;l=76:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::iter {

// Error generating bindings for struct `core::iter::Rev` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/adapters/rev.rs;l=15:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::iter {

// Error generating bindings for struct `core::iter::Scan` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/adapters/scan.rs;l=17:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::iter {

// Error generating bindings for struct `core::iter::Skip` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/adapters/skip.rs;l=21:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::iter {

// Error generating bindings for struct `core::iter::SkipWhile` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/adapters/skip_while.rs;l=17:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::iter {

// Error generating bindings for struct `core::iter::StepBy` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/adapters/step_by.rs;l=17:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::iter {

// Error generating bindings for struct `core::iter::Successors` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/sources/successors.rs;l=41:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::iter {

// Error generating bindings for trait `core::iter::Sum` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/traits/accum.rs;l=18:
// Aliases to generic trait `core::iter::Sum` are not supported.

}

namespace rs::std::iter {

// Error generating bindings for struct `core::iter::Take` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/adapters/take.rs;l=17:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::iter {

// Error generating bindings for struct `core::iter::TakeWhile` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/adapters/take_while.rs;l=17:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::iter {

// Error generating bindings for struct `core::iter::Zip` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/adapters/zip.rs;l=13:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::iter {

// Error generating bindings for function `core::iter::chain` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/adapters/chain.rs;l=64:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `A`

}

namespace rs::std::iter {

// Error generating bindings for function `core::iter::empty` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/sources/empty.rs;l=20:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

}

namespace rs::std::iter {

// Error generating bindings for function `core::iter::from_fn` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/sources/from_fn.rs;l=45:
// Unable to `use` function whose bindings failed: No support for replacing an
// _unused_ generic type param: `T`

}

namespace rs::std::iter {

// Error generating bindings for function `core::iter::once` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/sources/once.rs;l=56:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

}

namespace rs::std::iter {

// Error generating bindings for function `core::iter::once_with` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/sources/once_with.rs;l=61:
// Unable to `use` function whose bindings failed: No support for replacing an
// _unused_ generic type param: `A`

}

namespace rs::std::iter {

// Error generating bindings for function `core::iter::repeat` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/sources/repeat.rs;l=64:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

}

namespace rs::std::iter {

// Error generating bindings for function `core::iter::repeat_n` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/sources/repeat_n.rs;l=59:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

}

namespace rs::std::iter {

// Error generating bindings for function `core::iter::repeat_with` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/sources/repeat_with.rs;l=65:
// Unable to `use` function whose bindings failed: No support for replacing an
// _unused_ generic type param: `A`

}

namespace rs::std::iter {

// Error generating bindings for function `core::iter::successors` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/sources/successors.rs;l=22:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

}

namespace rs::std::iter {

// Error generating bindings for function `core::iter::zip` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/adapters/zip.rs;l=65:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `A`

}

namespace rs::std {

// Error generating bindings for macro `core::line` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1184:
// Unsupported use statement that refers to this type of the entity: core::line
// of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2015 {

// Error generating bindings for macro `core::line` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1184:
// Unsupported use statement that refers to this type of the entity: core::line
// of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2018 {

// Error generating bindings for macro `core::line` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1184:
// Unsupported use statement that refers to this type of the entity: core::line
// of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for macro `core::line` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1184:
// Unsupported use statement that refers to this type of the entity: core::line
// of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for macro `core::line` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1184:
// Unsupported use statement that refers to this type of the entity: core::line
// of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::v1 {

// Error generating bindings for macro `core::line` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1184:
// Unsupported use statement that refers to this type of the entity: core::line
// of kind Macro(MacroKinds(1))

}

namespace rs::std {

// Error generating bindings for module `core::marker` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/lib.rs;l=280:
// Unsupported use statement that refers to this type of the entity:
// core::marker of kind Mod

}

namespace rs::std::marker {

// Error generating bindings for derive macro `core::marker::Copy` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/marker.rs;l=462:
// Unsupported use statement that refers to this type of the entity:
// core::marker::Copy of kind Macro(MacroKinds(4))

}

namespace rs::std::prelude::rust_2015 {

// Error generating bindings for derive macro `core::marker::Copy` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/marker.rs;l=462:
// Unsupported use statement that refers to this type of the entity:
// core::marker::Copy of kind Macro(MacroKinds(4))

}

namespace rs::std::prelude::rust_2018 {

// Error generating bindings for derive macro `core::marker::Copy` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/marker.rs;l=462:
// Unsupported use statement that refers to this type of the entity:
// core::marker::Copy of kind Macro(MacroKinds(4))

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for derive macro `core::marker::Copy` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/marker.rs;l=462:
// Unsupported use statement that refers to this type of the entity:
// core::marker::Copy of kind Macro(MacroKinds(4))

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for derive macro `core::marker::Copy` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/marker.rs;l=462:
// Unsupported use statement that refers to this type of the entity:
// core::marker::Copy of kind Macro(MacroKinds(4))

}

namespace rs::std::prelude::v1 {

// Error generating bindings for derive macro `core::marker::Copy` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/marker.rs;l=462:
// Unsupported use statement that refers to this type of the entity:
// core::marker::Copy of kind Macro(MacroKinds(4))

}

namespace rs::std::marker {

// Error generating bindings for trait `core::marker::Copy` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/marker.rs;l=454:
// Trait core::marker::Copy is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::prelude::rust_2015 {

// Error generating bindings for trait `core::marker::Copy` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/marker.rs;l=454:
// Trait core::marker::Copy is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::prelude::rust_2018 {

// Error generating bindings for trait `core::marker::Copy` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/marker.rs;l=454:
// Trait core::marker::Copy is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for trait `core::marker::Copy` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/marker.rs;l=454:
// Trait core::marker::Copy is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for trait `core::marker::Copy` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/marker.rs;l=454:
// Trait core::marker::Copy is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::prelude::v1 {

// Error generating bindings for trait `core::marker::Copy` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/marker.rs;l=454:
// Trait core::marker::Copy is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::marker {

// Error generating bindings for struct `core::marker::PhantomData` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/marker.rs;l=811:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for struct `core::marker::PhantomPinned` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/marker.rs;l=1027:
// Failed to format type for the definition of `core::marker::PhantomPinned`:
// Zero-sized types (ZSTs) are not supported (b/258259459)

// Error generating bindings for trait `core::marker::Send` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/marker.rs;l=92:
// Trait core::marker::Send is not yet supported, so we're not generating a
// using for it.

}  // namespace rs::std::marker

namespace rs::std::prelude::rust_2015 {

// Error generating bindings for trait `core::marker::Send` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/marker.rs;l=92:
// Trait core::marker::Send is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::prelude::rust_2018 {

// Error generating bindings for trait `core::marker::Send` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/marker.rs;l=92:
// Trait core::marker::Send is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for trait `core::marker::Send` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/marker.rs;l=92:
// Trait core::marker::Send is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for trait `core::marker::Send` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/marker.rs;l=92:
// Trait core::marker::Send is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::prelude::v1 {

// Error generating bindings for trait `core::marker::Send` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/marker.rs;l=92:
// Trait core::marker::Send is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::marker {

// Error generating bindings for trait `core::marker::Sized` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/marker.rs;l=158:
// Trait core::marker::Sized is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::prelude::rust_2015 {

// Error generating bindings for trait `core::marker::Sized` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/marker.rs;l=158:
// Trait core::marker::Sized is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::prelude::rust_2018 {

// Error generating bindings for trait `core::marker::Sized` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/marker.rs;l=158:
// Trait core::marker::Sized is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for trait `core::marker::Sized` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/marker.rs;l=158:
// Trait core::marker::Sized is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for trait `core::marker::Sized` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/marker.rs;l=158:
// Trait core::marker::Sized is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::prelude::v1 {

// Error generating bindings for trait `core::marker::Sized` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/marker.rs;l=158:
// Trait core::marker::Sized is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::marker {

// Error generating bindings for trait `core::marker::Sync` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/marker.rs;l=657:
// Trait core::marker::Sync is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::prelude::rust_2015 {

// Error generating bindings for trait `core::marker::Sync` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/marker.rs;l=657:
// Trait core::marker::Sync is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::prelude::rust_2018 {

// Error generating bindings for trait `core::marker::Sync` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/marker.rs;l=657:
// Trait core::marker::Sync is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for trait `core::marker::Sync` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/marker.rs;l=657:
// Trait core::marker::Sync is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for trait `core::marker::Sync` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/marker.rs;l=657:
// Trait core::marker::Sync is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::prelude::v1 {

// Error generating bindings for trait `core::marker::Sync` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/marker.rs;l=657:
// Trait core::marker::Sync is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::marker {
using ::rs::core::marker::Unpin;
}

namespace rs::std::prelude::rust_2015 {
using ::rs::core::marker::Unpin;
}

namespace rs::std::prelude::rust_2018 {
using ::rs::core::marker::Unpin;
}

namespace rs::std::prelude::rust_2021 {
using ::rs::core::marker::Unpin;
}

namespace rs::std::prelude::rust_2024 {
using ::rs::core::marker::Unpin;
}

namespace rs::std::prelude::v1 {
using ::rs::core::marker::Unpin;
}

namespace rs::std {

// Error generating bindings for macro `core::matches` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=431:
// Unsupported use statement that refers to this type of the entity:
// core::matches of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2015 {

// Error generating bindings for macro `core::matches` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=431:
// Unsupported use statement that refers to this type of the entity:
// core::matches of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2018 {

// Error generating bindings for macro `core::matches` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=431:
// Unsupported use statement that refers to this type of the entity:
// core::matches of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for macro `core::matches` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=431:
// Unsupported use statement that refers to this type of the entity:
// core::matches of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for macro `core::matches` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=431:
// Unsupported use statement that refers to this type of the entity:
// core::matches of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::v1 {

// Error generating bindings for macro `core::matches` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=431:
// Unsupported use statement that refers to this type of the entity:
// core::matches of kind Macro(MacroKinds(1))

}

namespace rs::std {

// Error generating bindings for module `core::mem` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/lib.rs;l=262:
// Unsupported use statement that refers to this type of the entity: core::mem
// of kind Mod

}

namespace rs::std::mem {

// Error generating bindings for struct `core::mem::Discriminant` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/mem/mod.rs;l=1277:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::mem {

// Error generating bindings for struct `core::mem::ManuallyDrop` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/mem/manually_drop.rs;l=158:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::mem {

// Error generating bindings for union `core::mem::MaybeUninit` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/mem/maybe_uninit.rs;l=355:
// Unsupported use statement that refers to this type of the entity:
// core::mem::MaybeUninit of kind Union

}

namespace rs::std::mem {

// Error generating bindings for function `core::mem::align_of` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/mem/mod.rs;l=543:
// Unable to `use` function whose bindings failed: No support for replacing an
// _unused_ generic type param: `T`

}

namespace rs::std::prelude::rust_2015 {

// Error generating bindings for function `core::mem::align_of` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/mem/mod.rs;l=543:
// Unable to `use` function whose bindings failed: No support for replacing an
// _unused_ generic type param: `T`

}

namespace rs::std::prelude::rust_2018 {

// Error generating bindings for function `core::mem::align_of` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/mem/mod.rs;l=543:
// Unable to `use` function whose bindings failed: No support for replacing an
// _unused_ generic type param: `T`

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for function `core::mem::align_of` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/mem/mod.rs;l=543:
// Unable to `use` function whose bindings failed: No support for replacing an
// _unused_ generic type param: `T`

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for function `core::mem::align_of` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/mem/mod.rs;l=543:
// Unable to `use` function whose bindings failed: No support for replacing an
// _unused_ generic type param: `T`

}

namespace rs::std::prelude::v1 {

// Error generating bindings for function `core::mem::align_of` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/mem/mod.rs;l=543:
// Unable to `use` function whose bindings failed: No support for replacing an
// _unused_ generic type param: `T`

}

namespace rs::std::mem {

// Error generating bindings for function `core::mem::align_of_val` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/mem/mod.rs;l=581:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

}

namespace rs::std::prelude::rust_2015 {

// Error generating bindings for function `core::mem::align_of_val` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/mem/mod.rs;l=581:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

}

namespace rs::std::prelude::rust_2018 {

// Error generating bindings for function `core::mem::align_of_val` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/mem/mod.rs;l=581:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for function `core::mem::align_of_val` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/mem/mod.rs;l=581:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for function `core::mem::align_of_val` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/mem/mod.rs;l=581:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

}

namespace rs::std::prelude::v1 {

// Error generating bindings for function `core::mem::align_of_val` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/mem/mod.rs;l=581:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

}

namespace rs::std::mem {

// Error generating bindings for function `core::mem::align_of_val_raw` defined
// at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/mem/mod.rs;l=640:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

// Error generating bindings for function `core::mem::discriminant` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/mem/mod.rs;l=1413:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

// Error generating bindings for function `core::mem::drop` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/mem/mod.rs;l=1045:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

}  // namespace rs::std::mem

namespace rs::std::prelude::rust_2015 {

// Error generating bindings for function `core::mem::drop` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/mem/mod.rs;l=1045:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

}

namespace rs::std::prelude::rust_2018 {

// Error generating bindings for function `core::mem::drop` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/mem/mod.rs;l=1045:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for function `core::mem::drop` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/mem/mod.rs;l=1045:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for function `core::mem::drop` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/mem/mod.rs;l=1045:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

}

namespace rs::std::prelude::v1 {

// Error generating bindings for function `core::mem::drop` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/mem/mod.rs;l=1045:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

}

namespace rs::std::mem {

// Error generating bindings for function `core::mem::forget` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/mem/mod.rs;l=191:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

// Error generating bindings for function `core::mem::min_align_of` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/mem/mod.rs;l=491:
// Unable to `use` function whose bindings failed: No support for replacing an
// _unused_ generic type param: `T`

// Error generating bindings for function `core::mem::min_align_of_val` defined
// at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/mem/mod.rs;l=514:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

// Error generating bindings for function `core::mem::needs_drop` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/mem/mod.rs;l=706:
// Unable to `use` function whose bindings failed: No support for replacing an
// _unused_ generic type param: `T`

// Error generating bindings for macro `core::mem::offset_of` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/mem/mod.rs;l=1661:
// Unsupported use statement that refers to this type of the entity:
// core::mem::offset_of of kind Macro(MacroKinds(1))

// Error generating bindings for function `core::mem::replace` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/mem/mod.rs;l=961:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

// Error generating bindings for function `core::mem::size_of` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/mem/mod.rs;l=375:
// Unable to `use` function whose bindings failed: No support for replacing an
// _unused_ generic type param: `T`

}  // namespace rs::std::mem

namespace rs::std::prelude::rust_2015 {

// Error generating bindings for function `core::mem::size_of` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/mem/mod.rs;l=375:
// Unable to `use` function whose bindings failed: No support for replacing an
// _unused_ generic type param: `T`

}

namespace rs::std::prelude::rust_2018 {

// Error generating bindings for function `core::mem::size_of` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/mem/mod.rs;l=375:
// Unable to `use` function whose bindings failed: No support for replacing an
// _unused_ generic type param: `T`

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for function `core::mem::size_of` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/mem/mod.rs;l=375:
// Unable to `use` function whose bindings failed: No support for replacing an
// _unused_ generic type param: `T`

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for function `core::mem::size_of` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/mem/mod.rs;l=375:
// Unable to `use` function whose bindings failed: No support for replacing an
// _unused_ generic type param: `T`

}

namespace rs::std::prelude::v1 {

// Error generating bindings for function `core::mem::size_of` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/mem/mod.rs;l=375:
// Unable to `use` function whose bindings failed: No support for replacing an
// _unused_ generic type param: `T`

}

namespace rs::std::mem {

// Error generating bindings for function `core::mem::size_of_val` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/mem/mod.rs;l=410:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

}

namespace rs::std::prelude::rust_2015 {

// Error generating bindings for function `core::mem::size_of_val` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/mem/mod.rs;l=410:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

}

namespace rs::std::prelude::rust_2018 {

// Error generating bindings for function `core::mem::size_of_val` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/mem/mod.rs;l=410:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for function `core::mem::size_of_val` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/mem/mod.rs;l=410:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for function `core::mem::size_of_val` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/mem/mod.rs;l=410:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

}

namespace rs::std::prelude::v1 {

// Error generating bindings for function `core::mem::size_of_val` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/mem/mod.rs;l=410:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

}

namespace rs::std::mem {

// Error generating bindings for function `core::mem::size_of_val_raw` defined
// at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/mem/mod.rs;l=466:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

// Error generating bindings for function `core::mem::swap` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/mem/mod.rs;l=830:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

// Error generating bindings for function `core::mem::take` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/mem/mod.rs;l=894:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

// Error generating bindings for function `core::mem::transmute_copy` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/mem/mod.rs;l=1145:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `Src`

// Error generating bindings for function `core::mem::uninitialized` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/mem/mod.rs;l=792:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

// Error generating bindings for function `core::mem::zeroed` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/mem/mod.rs;l=755:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

}  // namespace rs::std::mem

namespace rs::std {

// Error generating bindings for macro `core::module_path` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1391:
// Unsupported use statement that refers to this type of the entity:
// core::module_path of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2015 {

// Error generating bindings for macro `core::module_path` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1391:
// Unsupported use statement that refers to this type of the entity:
// core::module_path of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2018 {

// Error generating bindings for macro `core::module_path` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1391:
// Unsupported use statement that refers to this type of the entity:
// core::module_path of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for macro `core::module_path` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1391:
// Unsupported use statement that refers to this type of the entity:
// core::module_path of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for macro `core::module_path` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1391:
// Unsupported use statement that refers to this type of the entity:
// core::module_path of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::v1 {

// Error generating bindings for macro `core::module_path` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1391:
// Unsupported use statement that refers to this type of the entity:
// core::module_path of kind Macro(MacroKinds(1))

}

namespace rs::std::net {

//  An error which can be returned when parsing an IP address or a socket
//  address.
//
//  This error is used as the error type for the [`FromStr`] implementation for
//  [`IpAddr`], [`Ipv4Addr`], [`Ipv6Addr`], [`SocketAddr`], [`SocketAddrV4`],
//  and
//  [`SocketAddrV6`].
//
//  # Potential causes
//
//  `AddrParseError` may be thrown because the provided string does not parse as
//  the given type, often because it includes information only handled by a
//  different address type.
//
//  ```should_panic
//  use std::net::IpAddr;
//  let _foo: IpAddr = "127.0.0.1:8080".parse().expect("Cannot handle the socket
//  port");
//  ```
//
//  [`IpAddr`] doesn't handle the port. Use [`SocketAddr`] instead.
//
//  ```
//  use std::net::SocketAddr;
//
//  // No problem, the `panic!` message has disappeared.
//  let _foo: SocketAddr = "127.0.0.1:8080".parse().expect("`parse` should
//  succeed");
//  ```
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/net/parser.rs;l=487
using AddrParseError CRUBIT_INTERNAL_RUST_TYPE(
    ":: core :: net :: AddrParseError") = ::rs::core::net::AddrParseError;
}  // namespace rs::std::net

namespace rs::std::net {

//  An IP address, either IPv4 or IPv6.
//
//  This enum can contain either an [`Ipv4Addr`] or an [`Ipv6Addr`], see their
//  respective documentation for more details.
//
//  # Examples
//
//  ```
//  use std::net::{IpAddr, Ipv4Addr, Ipv6Addr};
//
//  let localhost_v4 = IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1));
//  let localhost_v6 = IpAddr::V6(Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 1));
//
//  assert_eq!("127.0.0.1".parse(), Ok(localhost_v4));
//  assert_eq!("::1".parse(), Ok(localhost_v6));
//
//  assert_eq!(localhost_v4.is_ipv6(), false);
//  assert_eq!(localhost_v4.is_ipv4(), true);
//  ```
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/net/ip_addr.rs;l=30
using IpAddr CRUBIT_INTERNAL_RUST_TYPE(":: core :: net :: IpAddr") =
    ::rs::core::net::IpAddr;
//  An IPv4 address.
//
//  IPv4 addresses are defined as 32-bit integers in [IETF RFC 791].
//  They are usually represented as four octets.
//
//  See [`IpAddr`] for a type encompassing both IPv4 and IPv6 addresses.
//
//  [IETF RFC 791]: https://tools.ietf.org/html/rfc791
//
//  # Textual representation
//
//  `Ipv4Addr` provides a [`FromStr`] implementation. The four octets are in
//  decimal notation, divided by `.` (this is called "dot-decimal notation").
//  Notably, octal numbers (which are indicated with a leading `0`) and
//  hexadecimal numbers (which are indicated with a leading `0x`) are not
//  allowed per [IETF RFC 6943].
//
//  [IETF RFC 6943]: https://tools.ietf.org/html/rfc6943#section-3.1.1
//  [`FromStr`]: crate::str::FromStr
//
//  # Examples
//
//  ```
//  use std::net::Ipv4Addr;
//
//  let localhost = Ipv4Addr::new(127, 0, 0, 1);
//  assert_eq!("127.0.0.1".parse(), Ok(localhost));
//  assert_eq!(localhost.is_loopback(), true);
//  assert!("012.004.002.000".parse::<Ipv4Addr>().is_err()); // all octets are
//  in octal assert!("0000000.0.0.0".parse::<Ipv4Addr>().is_err()); // first
//  octet is a zero in octal
//  assert!("0xcb.0x0.0x71.0x00".parse::<Ipv4Addr>().is_err()); // all octets
//  are in hex
//  ```
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/net/ip_addr.rs;l=74
using Ipv4Addr CRUBIT_INTERNAL_RUST_TYPE(":: core :: net :: Ipv4Addr") =
    ::rs::core::net::Ipv4Addr;
//  An IPv6 address.
//
//  IPv6 addresses are defined as 128-bit integers in [IETF RFC 4291].
//  They are usually represented as eight 16-bit segments.
//
//  [IETF RFC 4291]: https://tools.ietf.org/html/rfc4291
//
//  # Embedding IPv4 Addresses
//
//  See [`IpAddr`] for a type encompassing both IPv4 and IPv6 addresses.
//
//  To assist in the transition from IPv4 to IPv6 two types of IPv6 addresses
//  that embed an IPv4 address were defined: IPv4-compatible and IPv4-mapped
//  addresses. Of these IPv4-compatible addresses have been officially
//  deprecated.
//
//  Both types of addresses are not assigned any special meaning by this
//  implementation, other than what the relevant standards prescribe. This means
//  that an address like `::ffff:127.0.0.1`, while representing an IPv4 loopback
//  address, is not itself an IPv6 loopback address; only `::1` is. To handle
//  these so called "IPv4-in-IPv6" addresses, they have to first be converted to
//  their canonical IPv4 address.
//
//  ### IPv4-Compatible IPv6 Addresses
//
//  IPv4-compatible IPv6 addresses are defined in [IETF RFC 4291
//  Section 2.5.5.1], and have been officially deprecated. The RFC describes the
//  format of an "IPv4-Compatible IPv6 address" as follows:
//
//  ```text
//  |                80 bits               | 16 |      32 bits        |
//  +--------------------------------------+--------------------------+
//  |0000..............................0000|0000|    IPv4 address     |
//  +--------------------------------------+----+---------------------+
//  ```
//  So `::a.b.c.d` would be an IPv4-compatible IPv6 address representing the
//  IPv4 address `a.b.c.d`.
//
//  To convert from an IPv4 address to an IPv4-compatible IPv6 address, use
//  [`Ipv4Addr::to_ipv6_compatible`]. Use [`Ipv6Addr::to_ipv4`] to convert an
//  IPv4-compatible IPv6 address to the canonical IPv4 address.
//
//  [IETF RFC 4291 Section 2.5.5.1]:
//  https://datatracker.ietf.org/doc/html/rfc4291#section-2.5.5.1
//
//  ### IPv4-Mapped IPv6 Addresses
//
//  IPv4-mapped IPv6 addresses are defined in [IETF RFC 4291 Section 2.5.5.2].
//  The RFC describes the format of an "IPv4-Mapped IPv6 address" as follows:
//
//  ```text
//  |                80 bits               | 16 |      32 bits        |
//  +--------------------------------------+--------------------------+
//  |0000..............................0000|FFFF|    IPv4 address     |
//  +--------------------------------------+----+---------------------+
//  ```
//  So `::ffff:a.b.c.d` would be an IPv4-mapped IPv6 address representing the
//  IPv4 address `a.b.c.d`.
//
//  To convert from an IPv4 address to an IPv4-mapped IPv6 address, use
//  [`Ipv4Addr::to_ipv6_mapped`]. Use [`Ipv6Addr::to_ipv4`] to convert an
//  IPv4-mapped IPv6 address to the canonical IPv4 address. Note that this will
//  also convert the IPv6 loopback address `::1` to `0.0.0.1`. Use
//  [`Ipv6Addr::to_ipv4_mapped`] to avoid this.
//
//  [IETF RFC 4291 Section 2.5.5.2]:
//  https://datatracker.ietf.org/doc/html/rfc4291#section-2.5.5.2
//
//  # Textual representation
//
//  `Ipv6Addr` provides a [`FromStr`] implementation. There are many ways to
//  represent an IPv6 address in text, but in general, each segments is written
//  in hexadecimal notation, and segments are separated by `:`. For more
//  information, see [IETF RFC 5952].
//
//  [`FromStr`]: crate::str::FromStr
//  [IETF RFC 5952]: https://tools.ietf.org/html/rfc5952
//
//  # Examples
//
//  ```
//  use std::net::Ipv6Addr;
//
//  let localhost = Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 1);
//  assert_eq!("::1".parse(), Ok(localhost));
//  assert_eq!(localhost.is_loopback(), true);
//  ```
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/net/ip_addr.rs;l=168
using Ipv6Addr CRUBIT_INTERNAL_RUST_TYPE(":: core :: net :: Ipv6Addr") =
    ::rs::core::net::Ipv6Addr;
}  // namespace rs::std::net

namespace rs::std::net {

//  An internet socket address, either IPv4 or IPv6.
//
//  Internet socket addresses consist of an [IP address], a 16-bit port number,
//  as well as possibly some version-dependent additional information. See
//  [`SocketAddrV4`]'s and
//  [`SocketAddrV6`]'s respective documentation for more details.
//
//  [IP address]: IpAddr
//
//  # Portability
//
//  `SocketAddr` is intended to be a portable representation of socket addresses
//  and is likely not the same as the internal socket address type used by the
//  target operating system's API. Like all `repr(Rust)` structs, however, its
//  exact layout remains undefined and should not be relied upon between builds.
//
//  # Examples
//
//  ```
//  use std::net::{IpAddr, Ipv4Addr, SocketAddr};
//
//  let socket = SocketAddr::new(IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)), 8080);
//
//  assert_eq!("127.0.0.1:8080".parse(), Ok(socket));
//  assert_eq!(socket.port(), 8080);
//  assert_eq!(socket.is_ipv4(), true);
//  ```
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/net/socket_addr.rs;l=33
using SocketAddr CRUBIT_INTERNAL_RUST_TYPE(":: core :: net :: SocketAddr") =
    ::rs::core::net::SocketAddr;
//  An IPv4 socket address.
//
//  IPv4 socket addresses consist of an [`IPv4` address] and a 16-bit port
//  number, as stated in [IETF RFC 793].
//
//  See [`SocketAddr`] for a type encompassing both IPv4 and IPv6 socket
//  addresses.
//
//  [IETF RFC 793]: https://tools.ietf.org/html/rfc793
//  [`IPv4` address]: Ipv4Addr
//
//  # Portability
//
//  `SocketAddrV4` is intended to be a portable representation of socket
//  addresses and is likely not the same as the internal socket address type
//  used by the target operating system's API. Like all `repr(Rust)` structs,
//  however, its exact layout remains undefined and should not be relied upon
//  between builds.
//
//  # Textual representation
//
//  `SocketAddrV4` provides a [`FromStr`](crate::str::FromStr) implementation.
//  It accepts an IPv4 address in its [textual representation], followed by a
//  single `:`, followed by the port encoded as a decimal integer.  Other
//  formats are not accepted.
//
//  [textual representation]: Ipv4Addr#textual-representation
//
//  # Examples
//
//  ```
//  use std::net::{Ipv4Addr, SocketAddrV4};
//
//  let socket = SocketAddrV4::new(Ipv4Addr::new(127, 0, 0, 1), 8080);
//
//  assert_eq!("127.0.0.1:8080".parse(), Ok(socket));
//  assert_eq!(socket.ip(), &Ipv4Addr::new(127, 0, 0, 1));
//  assert_eq!(socket.port(), 8080);
//  ```
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/net/socket_addr.rs;l=81
using SocketAddrV4 CRUBIT_INTERNAL_RUST_TYPE(":: core :: net :: SocketAddrV4") =
    ::rs::core::net::SocketAddrV4;
//  An IPv6 socket address.
//
//  IPv6 socket addresses consist of an [`IPv6` address], a 16-bit port number,
//  as well as fields containing the traffic class, the flow label, and a scope
//  identifier (see [IETF RFC 2553, Section 3.3] for more details).
//
//  See [`SocketAddr`] for a type encompassing both IPv4 and IPv6 socket
//  addresses.
//
//  [IETF RFC 2553, Section 3.3]:
//  https://tools.ietf.org/html/rfc2553#section-3.3
//  [`IPv6` address]: Ipv6Addr
//
//  # Portability
//
//  `SocketAddrV6` is intended to be a portable representation of socket
//  addresses and is likely not the same as the internal socket address type
//  used by the target operating system's API. Like all `repr(Rust)` structs,
//  however, its exact layout remains undefined and should not be relied upon
//  between builds.
//
//  # Textual representation
//
//  `SocketAddrV6` provides a [`FromStr`](crate::str::FromStr) implementation,
//  based on the bracketed format recommended by [IETF RFC 5952],
//  with scope identifiers based on those specified in [IETF RFC 4007].
//
//  It accepts addresses consisting of the following elements, in order:
//    - A left square bracket (`[`)
//    - The [textual representation] of an IPv6 address
//    - _Optionally_, a percent sign (`%`) followed by the scope identifier
//      encoded as a decimal integer
//    - A right square bracket (`]`)
//    - A colon (`:`)
//    - The port, encoded as a decimal integer.
//
//  For example, the string `[2001:db8::413]:443` represents a `SocketAddrV6`
//  with the address `2001:db8::413` and port `443`.  The string
//  `[2001:db8::413%612]:443` represents the same address and port, with a
//  scope identifier of `612`.
//
//  Other formats are not accepted.
//
//  [IETF RFC 5952]: https://tools.ietf.org/html/rfc5952#section-6
//  [IETF RFC 4007]: https://tools.ietf.org/html/rfc4007#section-11
//  [textual representation]: Ipv6Addr#textual-representation
//
//  # Examples
//
//  ```
//  use std::net::{Ipv6Addr, SocketAddrV6};
//
//  let socket = SocketAddrV6::new(Ipv6Addr::new(0x2001, 0xdb8, 0, 0, 0, 0, 0,
//  1), 8080, 0, 0);
//
//  assert_eq!("[2001:db8::1]:8080".parse(), Ok(socket));
//  assert_eq!(socket.ip(), &Ipv6Addr::new(0x2001, 0xdb8, 0, 0, 0, 0, 0, 1));
//  assert_eq!(socket.port(), 8080);
//
//  let mut with_scope = socket.clone();
//  with_scope.set_scope_id(3);
//  assert_eq!("[2001:db8::1%3]:8080".parse(), Ok(with_scope));
//  ```
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/net/socket_addr.rs;l=147
using SocketAddrV6 CRUBIT_INTERNAL_RUST_TYPE(":: core :: net :: SocketAddrV6") =
    ::rs::core::net::SocketAddrV6;
}  // namespace rs::std::net

namespace rs::std::num {

//  A classification of floating point numbers.
//
//  This `enum` is used as the return type for [`f32::classify`] and
//  [`f64::classify`]. See their documentation for more.
//
//  # Examples
//
//  ```
//  use std::num::FpCategory;
//
//  let num = 12.4_f32;
//  let inf = f32::INFINITY;
//  let zero = 0f32;
//  let sub: f32 = 1.1754942e-38;
//  let nan = f32::NAN;
//
//  assert_eq!(num.classify(), FpCategory::Normal);
//  assert_eq!(inf.classify(), FpCategory::Infinite);
//  assert_eq!(zero.classify(), FpCategory::Zero);
//  assert_eq!(sub.classify(), FpCategory::Subnormal);
//  assert_eq!(nan.classify(), FpCategory::Nan);
//  ```
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/mod.rs;l=1523
using FpCategory CRUBIT_INTERNAL_RUST_TYPE(":: core :: num :: FpCategory") =
    ::rs::core::num::FpCategory;
}  // namespace rs::std::num

namespace rs::std::num {

//  Enum to store the various types of errors that can cause parsing or
//  converting an integer to fail.
//
//  # Example
//
//  ```
//  # fn main() {
//  if let Err(e) = i32::from_str_radix("a12", 10) {
//      println!("Failed conversion to i32: {:?}", e.kind());
//  }
//  # }
//  ```
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/error.rs;l=100
using IntErrorKind CRUBIT_INTERNAL_RUST_TYPE(":: core :: num :: IntErrorKind") =
    ::rs::core::num::IntErrorKind;
}  // namespace rs::std::num

namespace rs::std::num {

// Error generating bindings for struct `core::num::NonZero` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/nonzero.rs;l=112:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for type alias `core::num::NonZeroI128` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/nonzero.rs;l=556:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for type alias `core::num::NonZeroI16` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/nonzero.rs;l=556:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for type alias `core::num::NonZeroI32` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/nonzero.rs;l=556:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for type alias `core::num::NonZeroI64` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/nonzero.rs;l=556:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for type alias `core::num::NonZeroI8` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/nonzero.rs;l=556:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for type alias `core::num::NonZeroIsize` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/nonzero.rs;l=556:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for type alias `core::num::NonZeroU128` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/nonzero.rs;l=556:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for type alias `core::num::NonZeroU16` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/nonzero.rs;l=556:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for type alias `core::num::NonZeroU32` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/nonzero.rs;l=556:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for type alias `core::num::NonZeroU64` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/nonzero.rs;l=556:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for type alias `core::num::NonZeroU8` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/nonzero.rs;l=556:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for type alias `core::num::NonZeroUsize` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/nonzero.rs;l=556:
// Generic types are not supported yet (b/259749095)

}  // namespace rs::std::num

namespace rs::std::num {

//  An error which can be returned when parsing a float.
//
//  This error is used as the error type for the [`FromStr`] implementation
//  for [`f32`] and [`f64`].
//
//  # Example
//
//  ```
//  use std::str::FromStr;
//
//  if let Err(e) = f64::from_str("a.12") {
//      println!("Failed conversion to f64: {e}");
//  }
//  ```
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/float_parse.rs;l=111
using ParseFloatError CRUBIT_INTERNAL_RUST_TYPE(
    ":: core :: num :: ParseFloatError") = ::rs::core::num::ParseFloatError;
}  // namespace rs::std::num

namespace rs::std::num {

//  An error which can be returned when parsing an integer.
//
//  For example, this error is returned by the `from_str_radix()` functions
//  on the primitive integer types (such as [`i8::from_str_radix`])
//  and is used as the error type in their [`FromStr`] implementations.
//
//  [`FromStr`]: crate::str::FromStr
//
//  # Potential causes
//
//  Among other causes, `ParseIntError` can be thrown because of leading or
//  trailing whitespace in the string e.g., when it is obtained from the
//  standard input. Using the [`str::trim()`] method ensures that no whitespace
//  remains before parsing.
//
//  # Example
//
//  ```
//  if let Err(e) = i32::from_str_radix("a12", 10) {
//      println!("Failed conversion to i32: {e}");
//  }
//  ```
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/error.rs;l=81
using ParseIntError CRUBIT_INTERNAL_RUST_TYPE(
    ":: core :: num :: ParseIntError") = ::rs::core::num::ParseIntError;
}  // namespace rs::std::num

namespace rs::std::num {

// Error generating bindings for struct `core::num::Saturating` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/saturating.rs;l=38:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::num {

//  The error type returned when a checked integral type conversion fails.
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/error.rs;l=10
using TryFromIntError CRUBIT_INTERNAL_RUST_TYPE(
    ":: core :: num :: TryFromIntError") = ::rs::core::num::TryFromIntError;
}  // namespace rs::std::num

namespace rs::std::num {

// Error generating bindings for struct `core::num::Wrapping` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/wrapping.rs;l=43:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std {

// Error generating bindings for module `core::ops` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/lib.rs;l=281:
// Unsupported use statement that refers to this type of the entity: core::ops
// of kind Mod

}

namespace rs::std::ops {

// Error generating bindings for trait `core::ops::Add` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/arith.rs;l=76:
// Trait core::ops::Add is not yet supported, so we're not generating a using
// for it.

// Error generating bindings for trait `core::ops::AddAssign` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/arith.rs;l=768:
// Trait core::ops::AddAssign is not yet supported, so we're not generating a
// using for it.

}  // namespace rs::std::ops

namespace rs::std::ops {

// Error generating bindings for trait `core::ops::AsyncFn` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/async_function.rs;l=11:
// Trait core::ops::AsyncFn is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::prelude::rust_2015 {

// Error generating bindings for trait `core::ops::AsyncFn` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/async_function.rs;l=11:
// Trait core::ops::AsyncFn is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::prelude::rust_2018 {

// Error generating bindings for trait `core::ops::AsyncFn` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/async_function.rs;l=11:
// Trait core::ops::AsyncFn is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for trait `core::ops::AsyncFn` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/async_function.rs;l=11:
// Trait core::ops::AsyncFn is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for trait `core::ops::AsyncFn` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/async_function.rs;l=11:
// Trait core::ops::AsyncFn is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::prelude::v1 {

// Error generating bindings for trait `core::ops::AsyncFn` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/async_function.rs;l=11:
// Trait core::ops::AsyncFn is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::ops {

// Error generating bindings for trait `core::ops::AsyncFnMut` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/async_function.rs;l=24:
// Trait core::ops::AsyncFnMut is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::prelude::rust_2015 {

// Error generating bindings for trait `core::ops::AsyncFnMut` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/async_function.rs;l=24:
// Trait core::ops::AsyncFnMut is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::prelude::rust_2018 {

// Error generating bindings for trait `core::ops::AsyncFnMut` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/async_function.rs;l=24:
// Trait core::ops::AsyncFnMut is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for trait `core::ops::AsyncFnMut` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/async_function.rs;l=24:
// Trait core::ops::AsyncFnMut is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for trait `core::ops::AsyncFnMut` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/async_function.rs;l=24:
// Trait core::ops::AsyncFnMut is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::prelude::v1 {

// Error generating bindings for trait `core::ops::AsyncFnMut` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/async_function.rs;l=24:
// Trait core::ops::AsyncFnMut is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::ops {

// Error generating bindings for trait `core::ops::AsyncFnOnce` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/async_function.rs;l=44:
// Trait core::ops::AsyncFnOnce is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::prelude::rust_2015 {

// Error generating bindings for trait `core::ops::AsyncFnOnce` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/async_function.rs;l=44:
// Trait core::ops::AsyncFnOnce is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::prelude::rust_2018 {

// Error generating bindings for trait `core::ops::AsyncFnOnce` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/async_function.rs;l=44:
// Trait core::ops::AsyncFnOnce is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for trait `core::ops::AsyncFnOnce` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/async_function.rs;l=44:
// Trait core::ops::AsyncFnOnce is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for trait `core::ops::AsyncFnOnce` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/async_function.rs;l=44:
// Trait core::ops::AsyncFnOnce is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::prelude::v1 {

// Error generating bindings for trait `core::ops::AsyncFnOnce` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/async_function.rs;l=44:
// Trait core::ops::AsyncFnOnce is not yet supported, so we're not generating a
// using for it.

}

namespace rs::std::ops {

// Error generating bindings for trait `core::ops::BitAnd` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/bit.rs;l=150:
// Trait core::ops::BitAnd is not yet supported, so we're not generating a using
// for it.

// Error generating bindings for trait `core::ops::BitAndAssign` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/bit.rs;l=716:
// Trait core::ops::BitAndAssign is not yet supported, so we're not generating a
// using for it.

// Error generating bindings for trait `core::ops::BitOr` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/bit.rs;l=254:
// Trait core::ops::BitOr is not yet supported, so we're not generating a using
// for it.

// Error generating bindings for trait `core::ops::BitOrAssign` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/bit.rs;l=791:
// Trait core::ops::BitOrAssign is not yet supported, so we're not generating a
// using for it.

// Error generating bindings for trait `core::ops::BitXor` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/bit.rs;l=358:
// Trait core::ops::BitXor is not yet supported, so we're not generating a using
// for it.

// Error generating bindings for trait `core::ops::BitXorAssign` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/bit.rs;l=866:
// Trait core::ops::BitXorAssign is not yet supported, so we're not generating a
// using for it.

}  // namespace rs::std::ops

namespace rs::std::ops {

// Error generating bindings for enum `core::ops::Bound` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/range.rs;l=704:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::collections {

// Error generating bindings for enum `core::ops::Bound` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/range.rs;l=704:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::ops {

// Error generating bindings for enum `core::ops::ControlFlow` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/control_flow.rs;l=89:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::ops {

// Error generating bindings for trait `core::ops::Deref` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/deref.rs;l=139:
// Trait core::ops::Deref is not yet supported, so we're not generating a using
// for it.

// Error generating bindings for trait `core::ops::DerefMut` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/deref.rs;l=270:
// Trait core::ops::DerefMut is not yet supported, so we're not generating a
// using for it.

}  // namespace rs::std::ops

namespace rs::std::ops {

// Error generating bindings for trait `core::ops::Div` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/arith.rs;l=460:
// Trait core::ops::Div is not yet supported, so we're not generating a using
// for it.

// Error generating bindings for trait `core::ops::DivAssign` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/arith.rs;l=963:
// Trait core::ops::DivAssign is not yet supported, so we're not generating a
// using for it.

}  // namespace rs::std::ops

namespace rs::std::ops {

// Error generating bindings for trait `core::ops::Drop` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/drop.rs;l=209:
// Trait core::ops::Drop is not yet supported, so we're not generating a using
// for it.

}

namespace rs::std::prelude::rust_2015 {

// Error generating bindings for trait `core::ops::Drop` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/drop.rs;l=209:
// Trait core::ops::Drop is not yet supported, so we're not generating a using
// for it.

}

namespace rs::std::prelude::rust_2018 {

// Error generating bindings for trait `core::ops::Drop` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/drop.rs;l=209:
// Trait core::ops::Drop is not yet supported, so we're not generating a using
// for it.

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for trait `core::ops::Drop` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/drop.rs;l=209:
// Trait core::ops::Drop is not yet supported, so we're not generating a using
// for it.

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for trait `core::ops::Drop` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/drop.rs;l=209:
// Trait core::ops::Drop is not yet supported, so we're not generating a using
// for it.

}

namespace rs::std::prelude::v1 {

// Error generating bindings for trait `core::ops::Drop` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/drop.rs;l=209:
// Trait core::ops::Drop is not yet supported, so we're not generating a using
// for it.

}

namespace rs::std::ops {

// Error generating bindings for trait `core::ops::Fn` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/function.rs;l=76:
// Trait core::ops::Fn is not yet supported, so we're not generating a using for
// it.

}

namespace rs::std::prelude::rust_2015 {

// Error generating bindings for trait `core::ops::Fn` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/function.rs;l=76:
// Trait core::ops::Fn is not yet supported, so we're not generating a using for
// it.

}

namespace rs::std::prelude::rust_2018 {

// Error generating bindings for trait `core::ops::Fn` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/function.rs;l=76:
// Trait core::ops::Fn is not yet supported, so we're not generating a using for
// it.

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for trait `core::ops::Fn` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/function.rs;l=76:
// Trait core::ops::Fn is not yet supported, so we're not generating a using for
// it.

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for trait `core::ops::Fn` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/function.rs;l=76:
// Trait core::ops::Fn is not yet supported, so we're not generating a using for
// it.

}

namespace rs::std::prelude::v1 {

// Error generating bindings for trait `core::ops::Fn` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/function.rs;l=76:
// Trait core::ops::Fn is not yet supported, so we're not generating a using for
// it.

}

namespace rs::std::ops {

// Error generating bindings for trait `core::ops::FnMut` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/function.rs;l=163:
// Trait core::ops::FnMut is not yet supported, so we're not generating a using
// for it.

}

namespace rs::std::prelude::rust_2015 {

// Error generating bindings for trait `core::ops::FnMut` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/function.rs;l=163:
// Trait core::ops::FnMut is not yet supported, so we're not generating a using
// for it.

}

namespace rs::std::prelude::rust_2018 {

// Error generating bindings for trait `core::ops::FnMut` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/function.rs;l=163:
// Trait core::ops::FnMut is not yet supported, so we're not generating a using
// for it.

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for trait `core::ops::FnMut` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/function.rs;l=163:
// Trait core::ops::FnMut is not yet supported, so we're not generating a using
// for it.

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for trait `core::ops::FnMut` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/function.rs;l=163:
// Trait core::ops::FnMut is not yet supported, so we're not generating a using
// for it.

}

namespace rs::std::prelude::v1 {

// Error generating bindings for trait `core::ops::FnMut` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/function.rs;l=163:
// Trait core::ops::FnMut is not yet supported, so we're not generating a using
// for it.

}

namespace rs::std::ops {

// Error generating bindings for trait `core::ops::FnOnce` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/function.rs;l=242:
// Trait core::ops::FnOnce is not yet supported, so we're not generating a using
// for it.

}

namespace rs::std::prelude::rust_2015 {

// Error generating bindings for trait `core::ops::FnOnce` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/function.rs;l=242:
// Trait core::ops::FnOnce is not yet supported, so we're not generating a using
// for it.

}

namespace rs::std::prelude::rust_2018 {

// Error generating bindings for trait `core::ops::FnOnce` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/function.rs;l=242:
// Trait core::ops::FnOnce is not yet supported, so we're not generating a using
// for it.

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for trait `core::ops::FnOnce` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/function.rs;l=242:
// Trait core::ops::FnOnce is not yet supported, so we're not generating a using
// for it.

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for trait `core::ops::FnOnce` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/function.rs;l=242:
// Trait core::ops::FnOnce is not yet supported, so we're not generating a using
// for it.

}

namespace rs::std::prelude::v1 {

// Error generating bindings for trait `core::ops::FnOnce` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/function.rs;l=242:
// Trait core::ops::FnOnce is not yet supported, so we're not generating a using
// for it.

}

namespace rs::std::ops {

// Error generating bindings for trait `core::ops::Index` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/index.rs;l=59:
// Trait core::ops::Index is not yet supported, so we're not generating a using
// for it.

// Error generating bindings for trait `core::ops::IndexMut` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/index.rs;l=170:
// Trait core::ops::IndexMut is not yet supported, so we're not generating a
// using for it.

}  // namespace rs::std::ops

namespace rs::std::ops {

// Error generating bindings for trait `core::ops::Mul` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/arith.rs;l=322:
// Trait core::ops::Mul is not yet supported, so we're not generating a using
// for it.

// Error generating bindings for trait `core::ops::MulAssign` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/arith.rs;l=901:
// Trait core::ops::MulAssign is not yet supported, so we're not generating a
// using for it.

// Error generating bindings for trait `core::ops::Neg` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/arith.rs;l=690:
// Trait core::ops::Neg is not yet supported, so we're not generating a using
// for it.

}  // namespace rs::std::ops

namespace rs::std::ops {

// Error generating bindings for trait `core::ops::Not` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/bit.rs;l=35:
// Trait core::ops::Not is not yet supported, so we're not generating a using
// for it.

}

namespace rs::std::ops {

// Error generating bindings for struct `core::ops::Range` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/range.rs;l=82:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::range::legacy {

// Error generating bindings for struct `core::ops::Range` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/range.rs;l=82:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::ops {

// Error generating bindings for trait `core::ops::RangeBounds` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/range.rs;l=832:
// Aliases to generic trait `core::ops::RangeBounds` are not supported.

// Error generating bindings for struct `core::ops::RangeFrom` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/range.rs;l=197:
// Generic types are not supported yet (b/259749095)

}  // namespace rs::std::ops

namespace rs::std::range::legacy {

// Error generating bindings for struct `core::ops::RangeFrom` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/range.rs;l=197:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::ops {

// Error generating bindings for struct `core::ops::RangeFull` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/range.rs;l=44:
// Failed to format type for the definition of `core::ops::RangeFull`:
// Zero-sized types (ZSTs) are not supported (b/258259459)

}

namespace rs::std::range {

// Error generating bindings for struct `core::ops::RangeFull` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/range.rs;l=44:
// Failed to format type for the definition of `core::ops::RangeFull`:
// Zero-sized types (ZSTs) are not supported (b/258259459)

}

namespace rs::std::ops {

// Error generating bindings for struct `core::ops::RangeInclusive` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/range.rs;l=357:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::range::legacy {

// Error generating bindings for struct `core::ops::RangeInclusive` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/range.rs;l=357:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::ops {

// Error generating bindings for struct `core::ops::RangeTo` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/range.rs;l=281:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::range {

// Error generating bindings for struct `core::ops::RangeTo` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/range.rs;l=281:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::ops {

// Error generating bindings for struct `core::ops::RangeToInclusive` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/range.rs;l=622:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::range::legacy {

// Error generating bindings for struct `core::ops::RangeToInclusive` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/range.rs;l=622:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::ops {

// Error generating bindings for trait `core::ops::Rem` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/arith.rs;l=569:
// Trait core::ops::Rem is not yet supported, so we're not generating a using
// for it.

// Error generating bindings for trait `core::ops::RemAssign` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/arith.rs;l=1028:
// Trait core::ops::RemAssign is not yet supported, so we're not generating a
// using for it.

}  // namespace rs::std::ops

namespace rs::std::ops {

// Error generating bindings for trait `core::ops::Shl` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/bit.rs;l=461:
// Trait core::ops::Shl is not yet supported, so we're not generating a using
// for it.

// Error generating bindings for trait `core::ops::ShlAssign` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/bit.rs;l=939:
// Trait core::ops::ShlAssign is not yet supported, so we're not generating a
// using for it.

// Error generating bindings for trait `core::ops::Shr` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/bit.rs;l=584:
// Trait core::ops::Shr is not yet supported, so we're not generating a using
// for it.

// Error generating bindings for trait `core::ops::ShrAssign` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/bit.rs;l=1026:
// Trait core::ops::ShrAssign is not yet supported, so we're not generating a
// using for it.

}  // namespace rs::std::ops

namespace rs::std::ops {

// Error generating bindings for trait `core::ops::Sub` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/arith.rs;l=188:
// Trait core::ops::Sub is not yet supported, so we're not generating a using
// for it.

// Error generating bindings for trait `core::ops::SubAssign` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/arith.rs;l=839:
// Trait core::ops::SubAssign is not yet supported, so we're not generating a
// using for it.

}  // namespace rs::std::ops

namespace rs::std {

// Error generating bindings for module `core::option` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/lib.rs;l=300:
// Unsupported use statement that refers to this type of the entity:
// core::option of kind Mod

}

namespace rs::std::option {

// Error generating bindings for struct `core::option::IntoIter` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/option.rs;l=2618:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for struct `core::option::Iter` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/option.rs;l=2527:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for struct `core::option::IterMut` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/option.rs;l=2577:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for enum `core::option::Option` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/option.rs;l=598:
// crubit.rs/errors/unsupported_type: Generic type parameter `T` is not
// supported without monomorphization

}  // namespace rs::std::option

namespace rs::std::prelude::rust_2015 {

// Error generating bindings for enum `core::option::Option` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/option.rs;l=598:
// crubit.rs/errors/unsupported_type: Generic type parameter `T` is not
// supported without monomorphization

}

namespace rs::std::prelude::rust_2018 {

// Error generating bindings for enum `core::option::Option` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/option.rs;l=598:
// crubit.rs/errors/unsupported_type: Generic type parameter `T` is not
// supported without monomorphization

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for enum `core::option::Option` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/option.rs;l=598:
// crubit.rs/errors/unsupported_type: Generic type parameter `T` is not
// supported without monomorphization

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for enum `core::option::Option` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/option.rs;l=598:
// crubit.rs/errors/unsupported_type: Generic type parameter `T` is not
// supported without monomorphization

}

namespace rs::std::prelude::v1 {

// Error generating bindings for enum `core::option::Option` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/option.rs;l=598:
// crubit.rs/errors/unsupported_type: Generic type parameter `T` is not
// supported without monomorphization

}

namespace rs::std {

// Error generating bindings for macro `core::option_env` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1109:
// Unsupported use statement that refers to this type of the entity:
// core::option_env of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2015 {

// Error generating bindings for macro `core::option_env` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1109:
// Unsupported use statement that refers to this type of the entity:
// core::option_env of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2018 {

// Error generating bindings for macro `core::option_env` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1109:
// Unsupported use statement that refers to this type of the entity:
// core::option_env of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for macro `core::option_env` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1109:
// Unsupported use statement that refers to this type of the entity:
// core::option_env of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for macro `core::option_env` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1109:
// Unsupported use statement that refers to this type of the entity:
// core::option_env of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::v1 {

// Error generating bindings for macro `core::option_env` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1109:
// Unsupported use statement that refers to this type of the entity:
// core::option_env of kind Macro(MacroKinds(1))

}

namespace rs::std::panic {

// Error generating bindings for struct `core::panic::AssertUnwindSafe` defined
// at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/panic/unwind_safe.rs;l=171:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::panic {

//  A struct containing information about the location of a panic.
//
//  This structure is created by [`PanicHookInfo::location()`] and
//  [`PanicInfo::location()`].
//
//  [`PanicInfo::location()`]: crate::panic::PanicInfo::location
//  [`PanicHookInfo::location()`]:
//  ../../std/panic/struct.PanicHookInfo.html#method.location
//
//  # Examples
//
//  ```should_panic
//  use std::panic;
//
//  panic::set_hook(Box::new(|panic_info| {
//      if let Some(location) = panic_info.location() {
//          println!("panic occurred in file '{}' at line {}", location.file(),
//          location.line());
//      } else {
//          println!("panic occurred but can't get location information...");
//      }
//  }));
//
//  panic!("Normal panic");
//  ```
//
//  # Comparisons
//
//  Comparisons for equality and ordering are made in file, line, then column
//  priority. Files are compared as strings, not `Path`, which could be
//  unexpected. See [`Location::file`]'s documentation for more discussion.
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/panic/location.rs;l=39
using Location CRUBIT_INTERNAL_RUST_TYPE(":: core :: panic :: Location") =
    ::rs::core::panic::Location;
}  // namespace rs::std::panic

namespace rs::std::panic {

// Error generating bindings for trait `core::panic::RefUnwindSafe` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/panic/unwind_safe.rs;l=109:
// Trait core::panic::RefUnwindSafe is not yet supported, so we're not
// generating a using for it.

// Error generating bindings for trait `core::panic::UnwindSafe` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/panic/unwind_safe.rs;l=91:
// Trait core::panic::UnwindSafe is not yet supported, so we're not generating a
// using for it.

}  // namespace rs::std::panic

namespace rs::std {

// Error generating bindings for module `core::pin` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/lib.rs;l=306:
// Unsupported use statement that refers to this type of the entity: core::pin
// of kind Mod

}

namespace rs::std::pin {

// Error generating bindings for struct `core::pin::Pin` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/pin.rs;l=1091:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for macro `core::pin::pin` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/pin.rs;l=2145:
// Unsupported use statement that refers to this type of the entity:
// core::pin::pin of kind Macro(MacroKinds(1))

}  // namespace rs::std::pin

namespace rs::std::prelude::rust_2015 {

// Error generating bindings for variant `core::prelude::v1::Err` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/result.rs;l=567:
// Unsupported use statement that refers to this type of the entity:
// core::prelude::v1::Err of kind Variant

}

namespace rs::std::prelude::rust_2018 {

// Error generating bindings for variant `core::prelude::v1::Err` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/result.rs;l=567:
// Unsupported use statement that refers to this type of the entity:
// core::prelude::v1::Err of kind Variant

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for variant `core::prelude::v1::Err` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/result.rs;l=567:
// Unsupported use statement that refers to this type of the entity:
// core::prelude::v1::Err of kind Variant

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for variant `core::prelude::v1::Err` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/result.rs;l=567:
// Unsupported use statement that refers to this type of the entity:
// core::prelude::v1::Err of kind Variant

}

namespace rs::std::prelude::v1 {

// Error generating bindings for variant `core::prelude::v1::Err` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/result.rs;l=567:
// Unsupported use statement that refers to this type of the entity:
// core::prelude::v1::Err of kind Variant

}

namespace rs::std::prelude::rust_2015 {

// Error generating bindings for variant `core::prelude::v1::None` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/option.rs;l=602:
// Unsupported use statement that refers to this type of the entity:
// core::prelude::v1::None of kind Variant

}

namespace rs::std::prelude::rust_2018 {

// Error generating bindings for variant `core::prelude::v1::None` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/option.rs;l=602:
// Unsupported use statement that refers to this type of the entity:
// core::prelude::v1::None of kind Variant

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for variant `core::prelude::v1::None` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/option.rs;l=602:
// Unsupported use statement that refers to this type of the entity:
// core::prelude::v1::None of kind Variant

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for variant `core::prelude::v1::None` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/option.rs;l=602:
// Unsupported use statement that refers to this type of the entity:
// core::prelude::v1::None of kind Variant

}

namespace rs::std::prelude::v1 {

// Error generating bindings for variant `core::prelude::v1::None` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/option.rs;l=602:
// Unsupported use statement that refers to this type of the entity:
// core::prelude::v1::None of kind Variant

}

namespace rs::std::prelude::rust_2015 {

// Error generating bindings for variant `core::prelude::v1::Ok` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/result.rs;l=562:
// Unsupported use statement that refers to this type of the entity:
// core::prelude::v1::Ok of kind Variant

}

namespace rs::std::prelude::rust_2018 {

// Error generating bindings for variant `core::prelude::v1::Ok` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/result.rs;l=562:
// Unsupported use statement that refers to this type of the entity:
// core::prelude::v1::Ok of kind Variant

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for variant `core::prelude::v1::Ok` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/result.rs;l=562:
// Unsupported use statement that refers to this type of the entity:
// core::prelude::v1::Ok of kind Variant

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for variant `core::prelude::v1::Ok` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/result.rs;l=562:
// Unsupported use statement that refers to this type of the entity:
// core::prelude::v1::Ok of kind Variant

}

namespace rs::std::prelude::v1 {

// Error generating bindings for variant `core::prelude::v1::Ok` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/result.rs;l=562:
// Unsupported use statement that refers to this type of the entity:
// core::prelude::v1::Ok of kind Variant

}

namespace rs::std::prelude::rust_2015 {

// Error generating bindings for variant `core::prelude::v1::Some` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/option.rs;l=606:
// Unsupported use statement that refers to this type of the entity:
// core::prelude::v1::Some of kind Variant

}

namespace rs::std::prelude::rust_2018 {

// Error generating bindings for variant `core::prelude::v1::Some` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/option.rs;l=606:
// Unsupported use statement that refers to this type of the entity:
// core::prelude::v1::Some of kind Variant

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for variant `core::prelude::v1::Some` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/option.rs;l=606:
// Unsupported use statement that refers to this type of the entity:
// core::prelude::v1::Some of kind Variant

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for variant `core::prelude::v1::Some` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/option.rs;l=606:
// Unsupported use statement that refers to this type of the entity:
// core::prelude::v1::Some of kind Variant

}

namespace rs::std::prelude::v1 {

// Error generating bindings for variant `core::prelude::v1::Some` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/option.rs;l=606:
// Unsupported use statement that refers to this type of the entity:
// core::prelude::v1::Some of kind Variant

}

namespace rs::std::prelude::rust_2015 {

// Error generating bindings for attribute macro
// `core::prelude::v1::global_allocator` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1835:
// Unsupported use statement that refers to this type of the entity:
// core::prelude::v1::global_allocator of kind Macro(MacroKinds(2))

}

namespace rs::std::prelude::rust_2018 {

// Error generating bindings for attribute macro
// `core::prelude::v1::global_allocator` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1835:
// Unsupported use statement that refers to this type of the entity:
// core::prelude::v1::global_allocator of kind Macro(MacroKinds(2))

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for attribute macro
// `core::prelude::v1::global_allocator` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1835:
// Unsupported use statement that refers to this type of the entity:
// core::prelude::v1::global_allocator of kind Macro(MacroKinds(2))

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for attribute macro
// `core::prelude::v1::global_allocator` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1835:
// Unsupported use statement that refers to this type of the entity:
// core::prelude::v1::global_allocator of kind Macro(MacroKinds(2))

}

namespace rs::std::prelude::v1 {

// Error generating bindings for attribute macro
// `core::prelude::v1::global_allocator` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1835:
// Unsupported use statement that refers to this type of the entity:
// core::prelude::v1::global_allocator of kind Macro(MacroKinds(2))

}

namespace rs::std::prelude::rust_2015 {

// Error generating bindings for attribute macro `core::prelude::v1::test`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1801:
// Unsupported use statement that refers to this type of the entity:
// core::prelude::v1::test of kind Macro(MacroKinds(2))

}

namespace rs::std::prelude::rust_2018 {

// Error generating bindings for attribute macro `core::prelude::v1::test`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1801:
// Unsupported use statement that refers to this type of the entity:
// core::prelude::v1::test of kind Macro(MacroKinds(2))

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for attribute macro `core::prelude::v1::test`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1801:
// Unsupported use statement that refers to this type of the entity:
// core::prelude::v1::test of kind Macro(MacroKinds(2))

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for attribute macro `core::prelude::v1::test`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1801:
// Unsupported use statement that refers to this type of the entity:
// core::prelude::v1::test of kind Macro(MacroKinds(2))

}

namespace rs::std::prelude::v1 {

// Error generating bindings for attribute macro `core::prelude::v1::test`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1801:
// Unsupported use statement that refers to this type of the entity:
// core::prelude::v1::test of kind Macro(MacroKinds(2))

}

namespace rs::std {

// Error generating bindings for module `core::primitive` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/lib.rs;l=346:
// Unsupported use statement that refers to this type of the entity:
// core::primitive of kind Mod

// Error generating bindings for module `core::ptr` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/lib.rs;l=265:
// Unsupported use statement that refers to this type of the entity: core::ptr
// of kind Mod

}  // namespace rs::std

namespace rs::std::ptr {

// Error generating bindings for struct `core::ptr::NonNull` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ptr/non_null.rs;l=79:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::ptr {

// Error generating bindings for function `core::ptr::addr_eq` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ptr/mod.rs;l=2531:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

// Error generating bindings for macro `core::ptr::addr_of` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ptr/mod.rs;l=2761:
// Unsupported use statement that refers to this type of the entity:
// core::ptr::addr_of of kind Macro(MacroKinds(1))

// Error generating bindings for macro `core::ptr::addr_of_mut` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ptr/mod.rs;l=2851:
// Unsupported use statement that refers to this type of the entity:
// core::ptr::addr_of_mut of kind Macro(MacroKinds(1))

// Error generating bindings for function `core::ptr::copy` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ptr/mod.rs;l=649:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

// Error generating bindings for function `core::ptr::copy_nonoverlapping`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ptr/mod.rs;l=552:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

// Error generating bindings for function `core::ptr::dangling` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ptr/mod.rs;l=940:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

// Error generating bindings for function `core::ptr::dangling_mut` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ptr/mod.rs;l=985:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

// Error generating bindings for function `core::ptr::drop_in_place` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ptr/mod.rs;l=830:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

// Error generating bindings for function `core::ptr::eq` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ptr/mod.rs;l=2507:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

// Error generating bindings for function `core::ptr::fn_addr_eq` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ptr/mod.rs;l=2584:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

// Error generating bindings for function `core::ptr::from_mut` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ptr/mod.rs;l=1174:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

// Error generating bindings for function `core::ptr::from_ref` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ptr/mod.rs;l=1124:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

// Error generating bindings for function `core::ptr::hash` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ptr/mod.rs;l=2614:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

// Error generating bindings for function `core::ptr::null` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ptr/mod.rs;l=876:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

// Error generating bindings for function `core::ptr::null_mut` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ptr/mod.rs;l=901:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

// Error generating bindings for function `core::ptr::read` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ptr/mod.rs;l=1716:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

// Error generating bindings for function `core::ptr::read_unaligned` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ptr/mod.rs;l=1834:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

// Error generating bindings for function `core::ptr::read_volatile` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ptr/mod.rs;l=2149:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

// Error generating bindings for function `core::ptr::replace` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ptr/mod.rs;l=1581:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

// Error generating bindings for function `core::ptr::slice_from_raw_parts`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ptr/mod.rs;l=1213:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

// Error generating bindings for function `core::ptr::slice_from_raw_parts_mut`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ptr/mod.rs;l=1259:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

// Error generating bindings for function `core::ptr::swap` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ptr/mod.rs;l=1338:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

// Error generating bindings for function `core::ptr::swap_nonoverlapping`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ptr/mod.rs;l=1402:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

// Error generating bindings for function `core::ptr::with_exposed_provenance`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ptr/mod.rs;l=1026:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

// Error generating bindings for function
// `core::ptr::with_exposed_provenance_mut` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ptr/mod.rs;l=1067:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

// Error generating bindings for function `core::ptr::without_provenance`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ptr/mod.rs;l=923:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

// Error generating bindings for function `core::ptr::without_provenance_mut`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ptr/mod.rs;l=963:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

// Error generating bindings for function `core::ptr::write` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ptr/mod.rs;l=1940:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

// Error generating bindings for function `core::ptr::write_bytes` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ptr/mod.rs;l=723:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

// Error generating bindings for function `core::ptr::write_unaligned` defined
// at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ptr/mod.rs;l=2044:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

// Error generating bindings for function `core::ptr::write_volatile` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ptr/mod.rs;l=2255:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

}  // namespace rs::std::ptr

namespace rs::std {

// Error generating bindings for macro `core::r#try` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=507:
// Unsupported use statement that refers to this type of the entity: core::r#try
// of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2015 {

// Error generating bindings for macro `core::r#try` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=507:
// Unsupported use statement that refers to this type of the entity: core::r#try
// of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2018 {

// Error generating bindings for macro `core::r#try` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=507:
// Unsupported use statement that refers to this type of the entity: core::r#try
// of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for macro `core::r#try` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=507:
// Unsupported use statement that refers to this type of the entity: core::r#try
// of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for macro `core::r#try` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=507:
// Unsupported use statement that refers to this type of the entity: core::r#try
// of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::v1 {

// Error generating bindings for macro `core::r#try` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=507:
// Unsupported use statement that refers to this type of the entity: core::r#try
// of kind Macro(MacroKinds(1))

}

namespace rs::std {

// Error generating bindings for module `core::range` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/lib.rs;l=312:
// Unsupported use statement that refers to this type of the entity: core::range
// of kind Mod

}

namespace rs::std::range {

// Error generating bindings for struct `core::range::Range` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/range.rs;l=68:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for struct `core::range::RangeFrom` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/range.rs;l=484:
// Generic types are not supported yet (b/259749095)

}  // namespace rs::std::range

namespace rs::std::range {

// Error generating bindings for struct `core::range::RangeFromIter` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/range/iter.rs;l=327:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::range {

// Error generating bindings for struct `core::range::RangeInclusive` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/range.rs;l=247:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::range {

// Error generating bindings for struct `core::range::RangeInclusiveIter`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/range/iter.rs;l=172:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for struct `core::range::RangeIter` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/range/iter.rs;l=11:
// Generic types are not supported yet (b/259749095)

}  // namespace rs::std::range

namespace rs::std::range {

// Error generating bindings for struct `core::range::RangeToInclusive` defined
// at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/range.rs;l=659:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for module `core::range::legacy` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/range.rs;l=24:
// Unsupported use statement that refers to this type of the entity:
// core::range::legacy of kind Mod

}  // namespace rs::std::range

namespace rs::std {

// Error generating bindings for module `core::result` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/lib.rs;l=313:
// Unsupported use statement that refers to this type of the entity:
// core::result of kind Mod

}

namespace rs::std::result {

// Error generating bindings for struct `core::result::IntoIter` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/result.rs;l=2074:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for struct `core::result::Iter` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/result.rs;l=1979:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for struct `core::result::IterMut` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/result.rs;l=2028:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for enum `core::result::Result` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/result.rs;l=558:
// crubit.rs/errors/unsupported_type: Generic type parameter `T` is not
// supported without monomorphization

}  // namespace rs::std::result

namespace rs::std::prelude::rust_2015 {

// Error generating bindings for enum `core::result::Result` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/result.rs;l=558:
// crubit.rs/errors/unsupported_type: Generic type parameter `T` is not
// supported without monomorphization

}

namespace rs::std::prelude::rust_2018 {

// Error generating bindings for enum `core::result::Result` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/result.rs;l=558:
// crubit.rs/errors/unsupported_type: Generic type parameter `T` is not
// supported without monomorphization

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for enum `core::result::Result` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/result.rs;l=558:
// crubit.rs/errors/unsupported_type: Generic type parameter `T` is not
// supported without monomorphization

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for enum `core::result::Result` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/result.rs;l=558:
// crubit.rs/errors/unsupported_type: Generic type parameter `T` is not
// supported without monomorphization

}

namespace rs::std::prelude::v1 {

// Error generating bindings for enum `core::result::Result` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/result.rs;l=558:
// crubit.rs/errors/unsupported_type: Generic type parameter `T` is not
// supported without monomorphization

}

namespace rs::std::slice {

// Error generating bindings for struct `core::slice::ArrayWindows` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/slice/iter.rs;l=2179:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for struct `core::slice::ChunkBy` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/slice/iter.rs;l=3013:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for struct `core::slice::ChunkByMut` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/slice/iter.rs;l=3121:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for struct `core::slice::Chunks` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/slice/iter.rs;l=1478:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for struct `core::slice::ChunksExact` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/slice/iter.rs;l=1841:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for struct `core::slice::ChunksExactMut` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/slice/iter.rs;l=2011:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for struct `core::slice::ChunksMut` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/slice/iter.rs;l=1654:
// Generic types are not supported yet (b/259749095)

}  // namespace rs::std::slice

namespace rs::std::slice {

//  An iterator over the escaped version of a byte slice.
//
//  This `struct` is created by the [`slice::escape_ascii`] method. See its
//  documentation for more information.
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/slice/ascii.rs;l=333
using EscapeAscii CRUBIT_INTERNAL_RUST_TYPE(":: core :: slice :: EscapeAscii") =
    ::rs::core::slice::EscapeAscii;
}  // namespace rs::std::slice

namespace rs::std::slice {

//  The error type returned by [`get_disjoint_mut`][`slice::get_disjoint_mut`].
//
//  It indicates one of two possible errors:
//  - An index is out-of-bounds.
//  - The same index appeared multiple times in the array
//    (or different but overlapping indices when ranges are provided).
//
//  # Examples
//
//  ```
//  use std::slice::GetDisjointMutError;
//
//  let v = &mut [1, 2, 3];
//  assert_eq!(v.get_disjoint_mut([0, 999]),
//  Err(GetDisjointMutError::IndexOutOfBounds));
//  assert_eq!(v.get_disjoint_mut([1, 1]),
//  Err(GetDisjointMutError::OverlappingIndices));
//  ```
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/slice/mod.rs;l=5744
using GetDisjointMutError CRUBIT_INTERNAL_RUST_TYPE(
    ":: core :: slice :: GetDisjointMutError") =
    ::rs::core::slice::GetDisjointMutError;
}  // namespace rs::std::slice

namespace rs::std::slice {

// Error generating bindings for struct `core::slice::Iter` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/slice/iter.rs;l=67:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for struct `core::slice::IterMut` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/slice/iter.rs;l=192:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for struct `core::slice::RChunks` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/slice/iter.rs;l=2309:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for struct `core::slice::RChunksExact` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/slice/iter.rs;l=2651:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for struct `core::slice::RChunksExactMut` defined
// at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/slice/iter.rs;l=2828:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for struct `core::slice::RChunksMut` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/slice/iter.rs;l=2469:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for struct `core::slice::RSplit` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/slice/iter.rs;l=932:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for struct `core::slice::RSplitMut` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/slice/iter.rs;l=1029:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for struct `core::slice::RSplitN` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/slice/iter.rs;l=1199:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for struct `core::slice::RSplitNMut` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/slice/iter.rs;l=1280:
// Generic types are not supported yet (b/259749095)

}  // namespace rs::std::slice

namespace rs::std::slice {

// Error generating bindings for trait `core::slice::SliceIndex` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/slice/index.rs;l=124:
// Aliases to generic trait `core::slice::SliceIndex` are not supported.

}

namespace rs::std::slice {

// Error generating bindings for struct `core::slice::Split` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/slice/iter.rs;l=399:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for struct `core::slice::SplitInclusive` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/slice/iter.rs;l=555:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for struct `core::slice::SplitInclusiveMut` defined
// at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/slice/iter.rs;l=805:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for struct `core::slice::SplitMut` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/slice/iter.rs;l=676:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for struct `core::slice::SplitN` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/slice/iter.rs;l=1155:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for struct `core::slice::SplitNMut` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/slice/iter.rs;l=1239:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for struct `core::slice::Windows` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/slice/iter.rs;l=1329:
// Generic types are not supported yet (b/259749095)

}  // namespace rs::std::slice

namespace rs::std::slice {

// Error generating bindings for function `core::slice::from_mut` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/slice/raw.rs;l=211:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

// Error generating bindings for function `core::slice::from_raw_parts` defined
// at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/slice/raw.rs;l=124:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

// Error generating bindings for function `core::slice::from_raw_parts_mut`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/slice/raw.rs;l=179:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

// Error generating bindings for function `core::slice::from_ref` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/slice/raw.rs;l=203:
// Unable to `use` function whose bindings failed: No valid non-generic
// replacement for generic type param `T`

}  // namespace rs::std::slice

namespace rs::std::str {

//  An iterator over the bytes of a string slice.
//
//  This struct is created by the [`bytes`] method on [`str`].
//  See its documentation for more.
//
//  [`bytes`]: str::bytes
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/str/iter.rs;l=284
using Bytes CRUBIT_INTERNAL_RUST_TYPE(":: core :: str :: Bytes") =
    ::rs::core::str::Bytes;
//  An iterator over the [`char`]s of a string slice, and their positions.
//
//  This struct is created by the [`char_indices`] method on [`str`].
//  See its documentation for more.
//
//  [`char`]: prim@char
//  [`char_indices`]: str::char_indices
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/str/iter.rs;l=172
using CharIndices CRUBIT_INTERNAL_RUST_TYPE(":: core :: str :: CharIndices") =
    ::rs::core::str::CharIndices;
//  An iterator over the [`char`]s of a string slice.
//
//
//  This struct is created by the [`chars`] method on [`str`].
//  See its documentation for more.
//
//  [`char`]: prim@char
//  [`chars`]: str::chars
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/str/iter.rs;l=30
using Chars CRUBIT_INTERNAL_RUST_TYPE(":: core :: str :: Chars") =
    ::rs::core::str::Chars;
//  An iterator of [`u16`] over the string encoded as UTF-16.
//
//  This struct is created by the [`encode_utf16`] method on [`str`].
//  See its documentation for more.
//
//  [`encode_utf16`]: str::encode_utf16
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/str/iter.rs;l=1486
using EncodeUtf16 CRUBIT_INTERNAL_RUST_TYPE(":: core :: str :: EncodeUtf16") =
    ::rs::core::str::EncodeUtf16;
//  The return type of [`str::escape_debug`].
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/str/iter.rs;l=1581
using EscapeDebug CRUBIT_INTERNAL_RUST_TYPE(":: core :: str :: EscapeDebug") =
    ::rs::core::str::EscapeDebug;
//  The return type of [`str::escape_default`].
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/str/iter.rs;l=1591
using EscapeDefault CRUBIT_INTERNAL_RUST_TYPE(
    ":: core :: str :: EscapeDefault") = ::rs::core::str::EscapeDefault;
//  The return type of [`str::escape_unicode`].
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/str/iter.rs;l=1598
using EscapeUnicode CRUBIT_INTERNAL_RUST_TYPE(
    ":: core :: str :: EscapeUnicode") = ::rs::core::str::EscapeUnicode;
}  // namespace rs::std::str

namespace rs::std::str {
using ::rs::core::str::FromStr;
}

namespace rs::std::str {

//  An iterator over the lines of a string, as string slices.
//
//  This struct is created with the [`lines`] method on [`str`].
//  See its documentation for more.
//
//  [`lines`]: str::lines
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/str/iter.rs;l=1162
using Lines CRUBIT_INTERNAL_RUST_TYPE(":: core :: str :: Lines") =
    ::rs::core::str::Lines;
//  Created with the method [`lines_any`].
//
//  [`lines_any`]: str::lines_any
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/str/iter.rs;l=1228
using LinesAny CRUBIT_INTERNAL_RUST_TYPE(":: core :: str :: LinesAny")
    [[deprecated("use lines()/Lines instead now")]] = ::rs::core::str::LinesAny;

// Error generating bindings for struct `core::str::MatchIndices` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/str/iter.rs;l=492:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for struct `core::str::Matches` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/str/iter.rs;l=492:
// Generic types are not supported yet (b/259749095)

}  // namespace rs::std::str

namespace rs::std::str {

// Error generating bindings for struct `core::str::ParseBoolError` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/str/error.rs;l=135:
// Failed to format type for the definition of `core::str::ParseBoolError`:
// Zero-sized types (ZSTs) are not supported (b/258259459)

}

namespace rs::std::str {

// Error generating bindings for struct `core::str::RMatchIndices` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/str/iter.rs;l=528:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for struct `core::str::RMatches` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/str/iter.rs;l=528:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for struct `core::str::RSplit` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/str/iter.rs;l=528:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for struct `core::str::RSplitN` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/str/iter.rs;l=528:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for struct `core::str::RSplitTerminator` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/str/iter.rs;l=528:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for struct `core::str::Split` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/str/iter.rs;l=492:
// Generic types are not supported yet (b/259749095)

//  An iterator over the non-ASCII-whitespace substrings of a string,
//  separated by any amount of ASCII whitespace.
//
//  This struct is created by the [`split_ascii_whitespace`] method on [`str`].
//  See its documentation for more.
//
//  [`split_ascii_whitespace`]: str::split_ascii_whitespace
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/str/iter.rs;l=1281
using SplitAsciiWhitespace CRUBIT_INTERNAL_RUST_TYPE(
    ":: core :: str :: SplitAsciiWhitespace") =
    ::rs::core::str::SplitAsciiWhitespace;

// Error generating bindings for struct `core::str::SplitInclusive` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/str/iter.rs;l=1296:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for struct `core::str::SplitN` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/str/iter.rs;l=492:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for struct `core::str::SplitTerminator` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/str/iter.rs;l=492:
// Generic types are not supported yet (b/259749095)

//  An iterator over the non-whitespace substrings of a string,
//  separated by any amount of whitespace.
//
//  This struct is created by the [`split_whitespace`] method on [`str`].
//  See its documentation for more.
//
//  [`split_whitespace`]: str::split_whitespace
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/str/iter.rs;l=1268
using SplitWhitespace CRUBIT_INTERNAL_RUST_TYPE(
    ":: core :: str :: SplitWhitespace") = ::rs::core::str::SplitWhitespace;
}  // namespace rs::std::str

namespace rs::std::str {

//  An item returned by the [`Utf8Chunks`] iterator.
//
//  A `Utf8Chunk` stores a sequence of [`u8`] up to the first broken character
//  when decoding a UTF-8 string.
//
//  # Examples
//
//  ```
//  // An invalid UTF-8 string
//  let bytes = b"foo\\xF1\\x80bar";
//
//  // Decode the first `Utf8Chunk`
//  let chunk = bytes.utf8_chunks().next().unwrap();
//
//  // The first three characters are valid UTF-8
//  assert_eq!("foo", chunk.valid());
//
//  // The fourth character is broken
//  assert_eq!(b"\\xF1\\x80", chunk.invalid());
//  ```
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/str/lossy.rs;l=72
using Utf8Chunk CRUBIT_INTERNAL_RUST_TYPE(":: core :: str :: Utf8Chunk") =
    ::rs::core::str::Utf8Chunk;
//  An iterator used to decode a slice of mostly UTF-8 bytes to string slices
//  ([`&str`]) and byte slices ([`&[u8]`][byteslice]).
//
//  This struct is created by the [`utf8_chunks`] method on bytes slices.
//  If you want a simple conversion from UTF-8 byte slices to string slices,
//  [`from_utf8`] is easier to use.
//
//  See the [`Utf8Chunk`] type for documentation of the items yielded by this
//  iterator.
//
//  [byteslice]: slice
//  [`utf8_chunks`]: slice::utf8_chunks
//  [`from_utf8`]: super::from_utf8
//
//  # Examples
//
//  This can be used to create functionality similar to
//  [`String::from_utf8_lossy`] without allocating heap memory:
//
//  ```
//  fn from_utf8_lossy<F>(input: &[u8], mut push: F) where F: FnMut(&str) {
//      for chunk in input.utf8_chunks() {
//          push(chunk.valid());
//
//          if !chunk.invalid().is_empty() {
//              push("\\u{FFFD}");
//          }
//      }
//  }
//  ```
//
//  [`String::from_utf8_lossy`]:
//  ../../std/string/struct.String.html#method.from_utf8_lossy
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/str/lossy.rs;l=186
using Utf8Chunks CRUBIT_INTERNAL_RUST_TYPE(":: core :: str :: Utf8Chunks") =
    ::rs::core::str::Utf8Chunks;
}  // namespace rs::std::str

namespace rs::std::str {

//  Errors which can occur when attempting to interpret a sequence of [`u8`]
//  as a string.
//
//  As such, the `from_utf8` family of functions and methods for both
//  [`String`]s and [`&str`]s make use of this error, for example.
//
//  [`String`]: ../../std/string/struct.String.html#method.from_utf8
//  [`&str`]: super::from_utf8
//
//  # Examples
//
//  This error type’s methods can be used to create functionality
//  similar to `String::from_utf8_lossy` without allocating heap memory:
//
//  ```
//  fn from_utf8_lossy<F>(mut input: &[u8], mut push: F) where F: FnMut(&str) {
//      loop {
//          match std::str::from_utf8(input) {
//              Ok(valid) => {
//                  push(valid);
//                  break
//              }
//              Err(error) => {
//                  let (valid, after_valid) =
//                  input.split_at(error.valid_up_to()); unsafe {
//                      push(std::str::from_utf8_unchecked(valid))
//                  }
//                  push("\\u{FFFD}");
//
//                  if let Some(invalid_sequence_length) = error.error_len() {
//                      input = &after_valid[invalid_sequence_length..]
//                  } else {
//                      break
//                  }
//              }
//          }
//      }
//  }
//  ```
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/str/error.rs;l=47
using Utf8Error CRUBIT_INTERNAL_RUST_TYPE(":: core :: str :: Utf8Error") =
    ::rs::core::str::Utf8Error;
}  // namespace rs::std::str

namespace rs::std::str {
using ::rs::core::str::from_utf8;

// Error generating bindings for function `core::str::from_utf8_mut` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/str/converts.rs;l=135:
// Unable to `use` function whose bindings failed: Error formatting function
// return type `core::result::Result<&'__anon1 mut str, core::str::Utf8Error>`
//
// Caused by:
//     Generic types are not supported yet (b/259749095)

using ::rs::core::str::from_utf8_unchecked;

// Error generating bindings for function `core::str::from_utf8_unchecked_mut`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/str/converts.rs;l=208:
// Unable to `use` function whose bindings failed: Error formatting function
// return type `&'__anon1 mut str`
//
// Caused by:
//     Mutable references to `str` are not yet supported.

}  // namespace rs::std::str

namespace rs::std {

// Error generating bindings for macro `core::stringify` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1285:
// Unsupported use statement that refers to this type of the entity:
// core::stringify of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2015 {

// Error generating bindings for macro `core::stringify` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1285:
// Unsupported use statement that refers to this type of the entity:
// core::stringify of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2018 {

// Error generating bindings for macro `core::stringify` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1285:
// Unsupported use statement that refers to this type of the entity:
// core::stringify of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for macro `core::stringify` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1285:
// Unsupported use statement that refers to this type of the entity:
// core::stringify of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for macro `core::stringify` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1285:
// Unsupported use statement that refers to this type of the entity:
// core::stringify of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::v1 {

// Error generating bindings for macro `core::stringify` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=1285:
// Unsupported use statement that refers to this type of the entity:
// core::stringify of kind Macro(MacroKinds(1))

}

namespace rs::std::sync {

// Error generating bindings for module `core::sync::atomic` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/sync/mod.rs;l=5:
// Unsupported use statement that refers to this type of the entity:
// core::sync::atomic of kind Mod

}

namespace rs::std::sync::atomic {

// Error generating bindings for constant `core::sync::atomic::ATOMIC_BOOL_INIT`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/sync/atomic.rs;l=537:
// Unsupported use statement that refers to this type of the entity:
// core::sync::atomic::ATOMIC_BOOL_INIT of kind Const { is_type_const: false }

// Error generating bindings for constant
// `core::sync::atomic::ATOMIC_ISIZE_INIT` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/sync/atomic.rs;l=3938:
// Unsupported use statement that refers to this type of the entity:
// core::sync::atomic::ATOMIC_ISIZE_INIT of kind Const { is_type_const: false }

// Error generating bindings for constant
// `core::sync::atomic::ATOMIC_USIZE_INIT` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/sync/atomic.rs;l=3948:
// Unsupported use statement that refers to this type of the entity:
// core::sync::atomic::ATOMIC_USIZE_INIT of kind Const { is_type_const: false }

// Error generating bindings for struct `core::sync::atomic::Atomic` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/sync/atomic.rs;l=385:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for type alias `core::sync::atomic::AtomicBool`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/sync/atomic.rs;l=417:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for type alias `core::sync::atomic::AtomicI16`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/sync/atomic.rs;l=2625:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for type alias `core::sync::atomic::AtomicI32`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/sync/atomic.rs;l=2625:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for type alias `core::sync::atomic::AtomicI64`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/sync/atomic.rs;l=2625:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for type alias `core::sync::atomic::AtomicI8`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/sync/atomic.rs;l=2625:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for type alias `core::sync::atomic::AtomicIsize`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/sync/atomic.rs;l=2625:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for type alias `core::sync::atomic::AtomicU16`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/sync/atomic.rs;l=2625:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for type alias `core::sync::atomic::AtomicU32`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/sync/atomic.rs;l=2625:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for type alias `core::sync::atomic::AtomicU64`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/sync/atomic.rs;l=2625:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for type alias `core::sync::atomic::AtomicU8`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/sync/atomic.rs;l=2625:
// Generic types are not supported yet (b/259749095)

// Error generating bindings for type alias `core::sync::atomic::AtomicUsize`
// defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/sync/atomic.rs;l=2625:
// Generic types are not supported yet (b/259749095)

//  Atomic memory orderings
//
//  Memory orderings specify the way atomic operations synchronize memory.
//  In its weakest [`Ordering::Relaxed`], only the memory directly touched by
//  the operation is synchronized. On the other hand, a store-load pair of
//  [`Ordering::SeqCst`] operations synchronize other memory while additionally
//  preserving a total order of such operations across all threads.
//
//  Rust's memory orderings are [the same as those of
//  C++20](https://en.cppreference.com/w/cpp/atomic/memory_order).
//
//  For more information see the [nomicon].
//
//  [nomicon]: ../../../nomicon/atomics.html
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/sync/atomic.rs;l=466
using Ordering CRUBIT_INTERNAL_RUST_TYPE(
    ":: core :: sync :: atomic :: Ordering") =
    ::rs::core::sync::atomic::Ordering;
using ::rs::core::sync::atomic::compiler_fence;
using ::rs::core::sync::atomic::fence;
using ::rs::core::sync::atomic::spin_loop_hint;
}  // namespace rs::std::sync::atomic

namespace rs::std::task {

//  The context of an asynchronous task.
//
//  Currently, `Context` only serves to provide access to a [`&Waker`](Waker)
//  which can be used to wake the current task.
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/task/wake.rs;l=218
using Context CRUBIT_INTERNAL_RUST_TYPE(":: core :: task :: Context") =
    ::rs::core::task::Context;
}  // namespace rs::std::task

namespace rs::std::task {

// Error generating bindings for enum `core::task::Poll` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/task/poll.rs;l=14:
// Generic types are not supported yet (b/259749095)

}

namespace rs::std::task {

//  A `RawWaker` allows the implementor of a task executor to create a [`Waker`]
//  or a [`LocalWaker`] which provides customized wakeup behavior.
//
//  It consists of a data pointer and a [virtual function pointer table
//  (vtable)][vtable] that customizes the behavior of the `RawWaker`.
//
//  `RawWaker`s are unsafe to use.
//  Implementing the [`Wake`] trait is a safe alternative that requires memory
//  allocation.
//
//  [vtable]: https://en.wikipedia.org/wiki/Virtual_method_table
//  [`Wake`]: ../../alloc/task/trait.Wake.html
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/task/wake.rs;l=22
using RawWaker CRUBIT_INTERNAL_RUST_TYPE(":: core :: task :: RawWaker") =
    ::rs::core::task::RawWaker;
//  A virtual function pointer table (vtable) that specifies the behavior
//  of a [`RawWaker`].
//
//  The pointer passed to all functions inside the vtable is the `data` pointer
//  from the enclosing [`RawWaker`] object.
//
//  The functions inside this struct are only intended to be called on the
//  `data` pointer of a properly constructed [`RawWaker`] object from inside the
//  [`RawWaker`] implementation. Calling one of the contained functions using
//  any other `data` pointer will cause undefined behavior.
//
//  Note that while this type implements `PartialEq`, comparing function
//  pointers, and hence comparing structs like this that contain function
//  pointers, is unreliable: pointers to the same function can compare inequal
//  (because functions are duplicated in multiple codegen units), and pointers
//  to *different* functions can compare equal (since identical functions can be
//  deduplicated within a codegen unit).
//
//  # Thread safety
//  If the [`RawWaker`] will be used to construct a [`Waker`] then
//  these functions must all be thread-safe (even though [`RawWaker`] is
//  <code>\\![Send] + \\![Sync]</code>). This is because [`Waker`] is
//  <code>[Send] + [Sync]</code>, and it may be moved to arbitrary threads or
//  invoked by `&` reference. For example, this means that if the `clone` and
//  `drop` functions manage a reference count, they must do so atomically.
//
//  However, if the [`RawWaker`] will be used to construct a [`LocalWaker`]
//  instead, then these functions don't need to be thread safe. This means that
//  <code>\\![Send] + \\![Sync]</code>
//   data can be stored in the data pointer, and reference counting does not
//   need any atomic
//  synchronization. This is because [`LocalWaker`] is not thread safe itself,
//  so it cannot be sent across threads.
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/task/wake.rs;l=109
using RawWakerVTable CRUBIT_INTERNAL_RUST_TYPE(
    ":: core :: task :: RawWakerVTable") = ::rs::core::task::RawWakerVTable;
//  A `Waker` is a handle for waking up a task by notifying its executor that it
//  is ready to be run.
//
//  This handle encapsulates a [`RawWaker`] instance, which defines the
//  executor-specific wakeup behavior.
//
//  The typical life of a `Waker` is that it is constructed by an executor,
//  wrapped in a
//  [`Context`], then passed to [`Future::poll()`]. Then, if the future chooses
//  to return
//  [`Poll::Pending`], it must also store the waker somehow and call
//  [`Waker::wake()`] when the future should be polled again.
//
//  Implements [`Clone`], [`Send`], and [`Sync`]; therefore, a waker may be
//  invoked from any thread, including ones not in any way managed by the
//  executor. For example, this might be done to wake a future when a blocking
//  function call completes on another thread.
//
//  Note that it is preferable to use `waker.clone_from(&new_waker)` instead
//  of `*waker = new_waker.clone()`, as the former will avoid cloning the waker
//  unnecessarily if the two wakers [wake the same task](Self::will_wake).
//
//  Constructing a `Waker` from a [`RawWaker`] is unsafe.
//  Implementing the [`Wake`] trait is a safe alternative that requires memory
//  allocation.
//
//  [`Future::poll()`]: core::future::Future::poll
//  [`Poll::Pending`]: core::task::Poll::Pending
//  [`Wake`]: ../../alloc/task/trait.Wake.html
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/task/wake.rs;l=407
using Waker CRUBIT_INTERNAL_RUST_TYPE(":: core :: task :: Waker") =
    ::rs::core::task::Waker;
}  // namespace rs::std::task

namespace rs::std::task {

// Error generating bindings for macro `core::task::ready` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/task/ready.rs;l=50:
// Unsupported use statement that refers to this type of the entity:
// core::task::ready of kind Macro(MacroKinds(1))

}

namespace rs::std::time {

//  A `Duration` type to represent a span of time, typically used for system
//  timeouts.
//
//  Each `Duration` is composed of a whole number of seconds and a fractional
//  part represented in nanoseconds. If the underlying system does not support
//  nanosecond-level precision, APIs binding a system timeout will typically
//  round up the number of nanoseconds.
//
//  [`Duration`]s implement many common traits, including [`Add`], [`Sub`], and
//  other
//  [`ops`] traits. It implements [`Default`] by returning a zero-length
//  `Duration`.
//
//  [`ops`]: crate::ops
//
//  # Examples
//
//  ```
//  use std::time::Duration;
//
//  let five_seconds = Duration::new(5, 0);
//  let five_seconds_and_five_nanos = five_seconds + Duration::new(0, 5);
//
//  assert_eq!(five_seconds_and_five_nanos.as_secs(), 5);
//  assert_eq!(five_seconds_and_five_nanos.subsec_nanos(), 5);
//
//  let ten_millis = Duration::from_millis(10);
//  ```
//
//  # Formatting `Duration` values
//
//  `Duration` intentionally does not have a `Display` impl, as there are a
//  variety of ways to format spans of time for human readability. `Duration`
//  provides a `Debug` impl that shows the full precision of the value.
//
//  The `Debug` output uses the non-ASCII "µs" suffix for microseconds. If your
//  program output may appear in contexts that cannot rely on full Unicode
//  compatibility, you may wish to format `Duration` objects yourself or use a
//  crate to do so.
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/time.rs;l=81
using Duration CRUBIT_INTERNAL_RUST_TYPE(":: core :: time :: Duration") =
    ::rs::core::time::Duration;
//  An error which can be returned when converting a floating-point value of
//  seconds into a [`Duration`].
//
//  This error is used as the error type for [`Duration::try_from_secs_f32`] and
//  [`Duration::try_from_secs_f64`].
//
//  # Example
//
//  ```
//  use std::time::Duration;
//
//  if let Err(e) = Duration::try_from_secs_f32(-1.0) {
//      println!("Failed conversion to Duration: {e}");
//  }
//  ```
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/time.rs;l=1607
using TryFromFloatSecsError CRUBIT_INTERNAL_RUST_TYPE(
    ":: core :: time :: TryFromFloatSecsError") =
    ::rs::core::time::TryFromFloatSecsError;
}  // namespace rs::std::time

namespace rs::std {

// Error generating bindings for macro `core::todo` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=884:
// Unsupported use statement that refers to this type of the entity: core::todo
// of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2015 {

// Error generating bindings for macro `core::todo` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=884:
// Unsupported use statement that refers to this type of the entity: core::todo
// of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2018 {

// Error generating bindings for macro `core::todo` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=884:
// Unsupported use statement that refers to this type of the entity: core::todo
// of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for macro `core::todo` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=884:
// Unsupported use statement that refers to this type of the entity: core::todo
// of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for macro `core::todo` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=884:
// Unsupported use statement that refers to this type of the entity: core::todo
// of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::v1 {

// Error generating bindings for macro `core::todo` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=884:
// Unsupported use statement that refers to this type of the entity: core::todo
// of kind Macro(MacroKinds(1))

}

namespace rs::std {

// Error generating bindings for module `core::u128` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/shells/legacy_int_modules.rs;l=12:
// Unsupported use statement that refers to this type of the entity: core::u128
// of kind Mod

}

namespace rs::std {

namespace
    [[deprecated("all constants in this module replaced by associated "
                 "constants on the type")]] u128 {

// Error generating bindings for constant `core::u128::MAX` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/shells/legacy_int_modules.rs;l=55:
// Unsupported use statement that refers to this type of the entity:
// core::u128::MAX of kind Const { is_type_const: false }

// Error generating bindings for constant `core::u128::MIN` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/shells/legacy_int_modules.rs;l=35:
// Unsupported use statement that refers to this type of the entity:
// core::u128::MIN of kind Const { is_type_const: false }

}  // namespace u128

}  // namespace rs::std

namespace rs::std {

// Error generating bindings for module `core::u16` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/shells/legacy_int_modules.rs;l=12:
// Unsupported use statement that refers to this type of the entity: core::u16
// of kind Mod

}

namespace rs::std {

namespace
    [[deprecated("all constants in this module replaced by associated "
                 "constants on the type")]] u16 {

// Error generating bindings for constant `core::u16::MAX` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/shells/legacy_int_modules.rs;l=55:
// Unsupported use statement that refers to this type of the entity:
// core::u16::MAX of kind Const { is_type_const: false }

// Error generating bindings for constant `core::u16::MIN` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/shells/legacy_int_modules.rs;l=35:
// Unsupported use statement that refers to this type of the entity:
// core::u16::MIN of kind Const { is_type_const: false }

}  // namespace u16

}  // namespace rs::std

namespace rs::std {

// Error generating bindings for module `core::u32` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/shells/legacy_int_modules.rs;l=12:
// Unsupported use statement that refers to this type of the entity: core::u32
// of kind Mod

}

namespace rs::std {

namespace
    [[deprecated("all constants in this module replaced by associated "
                 "constants on the type")]] u32 {

// Error generating bindings for constant `core::u32::MAX` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/shells/legacy_int_modules.rs;l=55:
// Unsupported use statement that refers to this type of the entity:
// core::u32::MAX of kind Const { is_type_const: false }

// Error generating bindings for constant `core::u32::MIN` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/shells/legacy_int_modules.rs;l=35:
// Unsupported use statement that refers to this type of the entity:
// core::u32::MIN of kind Const { is_type_const: false }

}  // namespace u32

}  // namespace rs::std

namespace rs::std {

// Error generating bindings for module `core::u64` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/shells/legacy_int_modules.rs;l=12:
// Unsupported use statement that refers to this type of the entity: core::u64
// of kind Mod

}

namespace rs::std {

namespace
    [[deprecated("all constants in this module replaced by associated "
                 "constants on the type")]] u64 {

// Error generating bindings for constant `core::u64::MAX` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/shells/legacy_int_modules.rs;l=55:
// Unsupported use statement that refers to this type of the entity:
// core::u64::MAX of kind Const { is_type_const: false }

// Error generating bindings for constant `core::u64::MIN` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/shells/legacy_int_modules.rs;l=35:
// Unsupported use statement that refers to this type of the entity:
// core::u64::MIN of kind Const { is_type_const: false }

}  // namespace u64

}  // namespace rs::std

namespace rs::std {

// Error generating bindings for module `core::u8` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/shells/legacy_int_modules.rs;l=12:
// Unsupported use statement that refers to this type of the entity: core::u8 of
// kind Mod

}

namespace rs::std {

namespace
    [[deprecated("all constants in this module replaced by associated "
                 "constants on the type")]] u8 {

// Error generating bindings for constant `core::u8::MAX` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/shells/legacy_int_modules.rs;l=55:
// Unsupported use statement that refers to this type of the entity:
// core::u8::MAX of kind Const { is_type_const: false }

// Error generating bindings for constant `core::u8::MIN` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/shells/legacy_int_modules.rs;l=35:
// Unsupported use statement that refers to this type of the entity:
// core::u8::MIN of kind Const { is_type_const: false }

}  // namespace u8

}  // namespace rs::std

namespace rs::std {

// Error generating bindings for macro `core::unimplemented` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=803:
// Unsupported use statement that refers to this type of the entity:
// core::unimplemented of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2015 {

// Error generating bindings for macro `core::unimplemented` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=803:
// Unsupported use statement that refers to this type of the entity:
// core::unimplemented of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2018 {

// Error generating bindings for macro `core::unimplemented` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=803:
// Unsupported use statement that refers to this type of the entity:
// core::unimplemented of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for macro `core::unimplemented` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=803:
// Unsupported use statement that refers to this type of the entity:
// core::unimplemented of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for macro `core::unimplemented` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=803:
// Unsupported use statement that refers to this type of the entity:
// core::unimplemented of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::v1 {

// Error generating bindings for macro `core::unimplemented` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=803:
// Unsupported use statement that refers to this type of the entity:
// core::unimplemented of kind Macro(MacroKinds(1))

}

namespace rs::std {

// Error generating bindings for macro `core::unreachable` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=716:
// Unsupported use statement that refers to this type of the entity:
// core::unreachable of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2015 {

// Error generating bindings for macro `core::unreachable` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=716:
// Unsupported use statement that refers to this type of the entity:
// core::unreachable of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2018 {

// Error generating bindings for macro `core::unreachable` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=716:
// Unsupported use statement that refers to this type of the entity:
// core::unreachable of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for macro `core::unreachable` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=716:
// Unsupported use statement that refers to this type of the entity:
// core::unreachable of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for macro `core::unreachable` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=716:
// Unsupported use statement that refers to this type of the entity:
// core::unreachable of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::v1 {

// Error generating bindings for macro `core::unreachable` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=716:
// Unsupported use statement that refers to this type of the entity:
// core::unreachable of kind Macro(MacroKinds(1))

}

namespace rs::std {

// Error generating bindings for module `core::usize` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/shells/legacy_int_modules.rs;l=12:
// Unsupported use statement that refers to this type of the entity: core::usize
// of kind Mod

}

namespace rs::std {

namespace
    [[deprecated("all constants in this module replaced by associated "
                 "constants on the type")]] usize {

// Error generating bindings for constant `core::usize::MAX` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/shells/legacy_int_modules.rs;l=55:
// Unsupported use statement that refers to this type of the entity:
// core::usize::MAX of kind Const { is_type_const: false }

// Error generating bindings for constant `core::usize::MIN` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/shells/legacy_int_modules.rs;l=35:
// Unsupported use statement that refers to this type of the entity:
// core::usize::MIN of kind Const { is_type_const: false }

}  // namespace usize

}  // namespace rs::std

namespace rs::std {

// Error generating bindings for macro `core::write` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=608:
// Unsupported use statement that refers to this type of the entity: core::write
// of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2015 {

// Error generating bindings for macro `core::write` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=608:
// Unsupported use statement that refers to this type of the entity: core::write
// of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2018 {

// Error generating bindings for macro `core::write` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=608:
// Unsupported use statement that refers to this type of the entity: core::write
// of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for macro `core::write` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=608:
// Unsupported use statement that refers to this type of the entity: core::write
// of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for macro `core::write` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=608:
// Unsupported use statement that refers to this type of the entity: core::write
// of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::v1 {

// Error generating bindings for macro `core::write` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=608:
// Unsupported use statement that refers to this type of the entity: core::write
// of kind Macro(MacroKinds(1))

}

namespace rs::std {

// Error generating bindings for macro `core::writeln` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=647:
// Unsupported use statement that refers to this type of the entity:
// core::writeln of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2015 {

// Error generating bindings for macro `core::writeln` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=647:
// Unsupported use statement that refers to this type of the entity:
// core::writeln of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2018 {

// Error generating bindings for macro `core::writeln` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=647:
// Unsupported use statement that refers to this type of the entity:
// core::writeln of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2021 {

// Error generating bindings for macro `core::writeln` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=647:
// Unsupported use statement that refers to this type of the entity:
// core::writeln of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::rust_2024 {

// Error generating bindings for macro `core::writeln` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=647:
// Unsupported use statement that refers to this type of the entity:
// core::writeln of kind Macro(MacroKinds(1))

}

namespace rs::std::prelude::v1 {

// Error generating bindings for macro `core::writeln` defined at
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs;l=647:
// Unsupported use statement that refers to this type of the entity:
// core::writeln of kind Macro(MacroKinds(1))

}

namespace rs::std::env {

static_assert(
    sizeof(Args) == 32,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(Args) == 8,
    "Verify that ADT layout didn't change since this header got generated");
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std3env4ArgsNtNtNtCs9kG8YiNG2f0_u4core3ops4drop4Drop4dropB6_u(
    ::rs::std::env::Args&);
}
inline Args::~Args() {
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std3env4ArgsNtNtNtCs9kG8YiNG2f0_u4core3ops4drop4Drop4dropB6_u(
          *this);
}
inline ::rs::std::env::Args::Args(::crubit::UnsafeRelocateTag, Args&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}
inline void Args::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(Args, inner));
}
static_assert(
    sizeof(ArgsOs) == 32,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(ArgsOs) == 8,
    "Verify that ADT layout didn't change since this header got generated");
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std3env6ArgsOsNtNtNtCs9kG8YiNG2f0_u4core3ops4drop4Drop4dropB6_u(
    ::rs::std::env::ArgsOs&);
}
inline ArgsOs::~ArgsOs() {
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std3env6ArgsOsNtNtNtCs9kG8YiNG2f0_u4core3ops4drop4Drop4dropB6_u(
          *this);
}
inline ::rs::std::env::ArgsOs::ArgsOs(::crubit::UnsafeRelocateTag,
                                      ArgsOs&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}
inline void ArgsOs::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(ArgsOs, inner));
}
static_assert(
    sizeof(SplitPaths) == 24,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(SplitPaths) == 8,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(::std::is_trivially_destructible_v<SplitPaths>);
static_assert(
    ::std::is_trivially_move_constructible_v<::rs::std::env::SplitPaths>);
static_assert(
    ::std::is_trivially_move_assignable_v<::rs::std::env::SplitPaths>);
inline ::rs::std::env::SplitPaths::SplitPaths(::crubit::UnsafeRelocateTag,
                                              SplitPaths&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}
inline void SplitPaths::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(SplitPaths, inner));
}
static_assert(
    sizeof(VarError) == 24,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(VarError) == 8,
    "Verify that ADT layout didn't change since this header got generated");

// `static` constructor
inline VarError VarError::MakeNotPresent() {
  return VarError(PrivateBytesTag{},
                  {255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0,
                   0,   0,   0,   0,   0,   0,   0,   0,   0, 0, 0, 0});
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNcNtNtNtCsb7ytMsthdgm_u3std3env8VarError10NotUnicode0(
    ::rs::std::ffi::OsString*, ::rs::std::env::VarError* __ret_ptr);
}
inline ::rs::std::env::VarError VarError::MakeNotUnicode(
    ::rs::std::ffi::OsString __param_0) {
  crubit::Slot __param_0_slot((::std::move(__param_0)));
  crubit::Slot<::rs::std::env::VarError> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNcNtNtNtCsb7ytMsthdgm_u3std3env8VarError10NotUnicode0(
          __param_0_slot.Get(), __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std3env8VarErrorNtNtNtCs9kG8YiNG2f0_u4core3ops4drop4Drop4dropB6_u(
    ::rs::std::env::VarError&);
}
inline VarError::~VarError() {
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std3env8VarErrorNtNtNtCs9kG8YiNG2f0_u4core3ops4drop4Drop4dropB6_u(
          *this);
}
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std3env8VarErrorNtNtCs9kG8YiNG2f0_u4core5clone5Clone5cloneB6_u(
    ::rs::std::env::VarError const&, ::rs::std::env::VarError* __ret_ptr);
}
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std3env8VarErrorNtNtCs9kG8YiNG2f0_u4core5clone5Clone10clone_ufromB6_u(
    ::rs::std::env::VarError&, ::rs::std::env::VarError const&);
}
inline ::rs::std::env::VarError::VarError(const VarError& other) {
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std3env8VarErrorNtNtCs9kG8YiNG2f0_u4core5clone5Clone5cloneB6_u(
          other, this);
}
inline ::rs::std::env::VarError& ::rs::std::env::VarError::operator=(
    const VarError& other) {
  if (this != &other) {
    __crubit_internal::
        __crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std3env8VarErrorNtNtCs9kG8YiNG2f0_u4core5clone5Clone10clone_ufromB6_u(
            *this, other);
  }
  return *this;
}
inline ::rs::std::env::VarError::VarError(::crubit::UnsafeRelocateTag,
                                          VarError&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}

namespace __crubit_internal {
extern "C" bool
__crubit_thunk_818b180788380d74__uRNvXso_uNtCsb7ytMsthdgm_u3std3envNtB5_u8VarErrorNtNtCs9kG8YiNG2f0_u4core3cmp9PartialEq2eq(
    ::rs::std::env::VarError const&, ::rs::std::env::VarError const&);
}
inline bool VarError::operator==(::rs::std::env::VarError const& other) const {
  auto&& self = *this;
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXso_uNtCsb7ytMsthdgm_u3std3envNtB5_u8VarErrorNtNtCs9kG8YiNG2f0_u4core3cmp9PartialEq2eq(
          self, other);
}
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std3env8VarErrorNtNtCsaddbpR6HRqH_u5alloc6string8ToString9to_ustringB6_u(
    ::rs::std::env::VarError const&, ::rs::alloc::string::String* __ret_ptr);
inline void VarError::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(VarError, __opaque_blob_of_bytes));
}
static_assert(
    sizeof(Vars) == 32,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(Vars) == 8,
    "Verify that ADT layout didn't change since this header got generated");
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std3env4VarsNtNtNtCs9kG8YiNG2f0_u4core3ops4drop4Drop4dropB6_u(
    ::rs::std::env::Vars&);
}
inline Vars::~Vars() {
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std3env4VarsNtNtNtCs9kG8YiNG2f0_u4core3ops4drop4Drop4dropB6_u(
          *this);
}
inline ::rs::std::env::Vars::Vars(::crubit::UnsafeRelocateTag, Vars&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}
inline void Vars::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(Vars, inner));
}
static_assert(
    sizeof(VarsOs) == 32,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(VarsOs) == 8,
    "Verify that ADT layout didn't change since this header got generated");
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std3env6VarsOsNtNtNtCs9kG8YiNG2f0_u4core3ops4drop4Drop4dropB6_u(
    ::rs::std::env::VarsOs&);
}
inline VarsOs::~VarsOs() {
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std3env6VarsOsNtNtNtCs9kG8YiNG2f0_u4core3ops4drop4Drop4dropB6_u(
          *this);
}
inline ::rs::std::env::VarsOs::VarsOs(::crubit::UnsafeRelocateTag,
                                      VarsOs&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}
inline void VarsOs::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(VarsOs, inner));
}
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvNtCsb7ytMsthdgm_u3std3env4args(
    ::rs::std::env::Args* __ret_ptr);
}
inline ::rs::std::env::Args args() {
  crubit::Slot<::rs::std::env::Args> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvNtCsb7ytMsthdgm_u3std3env4args(
          __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvNtCsb7ytMsthdgm_u3std3env7args_uos(
    ::rs::std::env::ArgsOs* __ret_ptr);
}
inline ::rs::std::env::ArgsOs args_os() {
  crubit::Slot<::rs::std::env::ArgsOs> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvNtCsb7ytMsthdgm_u3std3env7args_uos(
          __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

}  // namespace rs::std::env

namespace rs::std::env {

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvNtCsb7ytMsthdgm_u3std3env11current_udir(
    rs_std::Result<::rs::std::path::PathBuf, ::rs::std::io::Error>* __ret_ptr);
}
inline rs_std::Result<::rs::std::path::PathBuf, ::rs::std::io::Error>
current_dir() {
  crubit::Slot<rs_std::Result<::rs::std::path::PathBuf, ::rs::std::io::Error>>
      __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvNtCsb7ytMsthdgm_u3std3env11current_udir(
          __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvNtCsb7ytMsthdgm_u3std3env11current_uexe(
    rs_std::Result<::rs::std::path::PathBuf, ::rs::std::io::Error>* __ret_ptr);
}
inline rs_std::Result<::rs::std::path::PathBuf, ::rs::std::io::Error>
current_exe() {
  crubit::Slot<rs_std::Result<::rs::std::path::PathBuf, ::rs::std::io::Error>>
      __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvNtCsb7ytMsthdgm_u3std3env11current_uexe(
          __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvNtCsb7ytMsthdgm_u3std3env8home_udir(
    unsigned char* __ret_ptr);
}
inline ::std::optional<::rs::std::path::PathBuf> home_dir() {
  unsigned char __return_value_storage[::crubit::OptionAbi<
      ::crubit::TransmuteAbi<::rs::std::path::PathBuf>>::kSize];
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvNtCsb7ytMsthdgm_u3std3env8home_udir(
          __return_value_storage);
  return ::crubit::internal::Decode<
      ::crubit::OptionAbi<::crubit::TransmuteAbi<::rs::std::path::PathBuf>>>(
      ::crubit::OptionAbi<::crubit::TransmuteAbi<::rs::std::path::PathBuf>>(
          ::crubit::TransmuteAbi<::rs::std::path::PathBuf>()),
      __return_value_storage);
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvNtCsb7ytMsthdgm_u3std3env8temp_udir(
    ::rs::std::path::PathBuf* __ret_ptr);
}
inline ::rs::std::path::PathBuf temp_dir() {
  crubit::Slot<::rs::std::path::PathBuf> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvNtCsb7ytMsthdgm_u3std3env8temp_udir(
          __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvNtCsb7ytMsthdgm_u3std3env4vars(
    ::rs::std::env::Vars* __ret_ptr);
}
inline ::rs::std::env::Vars vars() {
  crubit::Slot<::rs::std::env::Vars> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvNtCsb7ytMsthdgm_u3std3env4vars(
          __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvNtCsb7ytMsthdgm_u3std3env7vars_uos(
    ::rs::std::env::VarsOs* __ret_ptr);
}
inline ::rs::std::env::VarsOs vars_os() {
  crubit::Slot<::rs::std::env::VarsOs> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvNtCsb7ytMsthdgm_u3std3env7vars_uos(
          __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

}  // namespace rs::std::env

namespace rs::std::ffi::os_str {

static_assert(
    sizeof(Display) == 16,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(Display) == 8,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(::std::is_trivially_destructible_v<Display>);
static_assert(
    ::std::is_trivially_move_constructible_v<::rs::std::ffi::os_str::Display>);
static_assert(
    ::std::is_trivially_move_assignable_v<::rs::std::ffi::os_str::Display>);
inline ::rs::std::ffi::os_str::Display::Display(::crubit::UnsafeRelocateTag,
                                                Display&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtNtCsb7ytMsthdgm_u3std3ffi6os_ustr7DisplayNtNtCsaddbpR6HRqH_u5alloc6string8ToString9to_ustringB8_u(
    ::rs::std::ffi::os_str::Display const&,
    ::rs::alloc::string::String* __ret_ptr);
inline void Display::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(Display, os_str));
}
}  // namespace rs::std::ffi::os_str

namespace rs::std::ffi::os_str {

//  A type that can represent owned, mutable platform-native strings, but is
//  cheaply inter-convertible with Rust strings.
//
//  The need for this type arises from the fact that:
//
//  * On Unix systems, strings are often arbitrary sequences of non-zero
//    bytes, in many cases interpreted as UTF-8.
//
//  * On Windows, strings are often arbitrary sequences of non-zero 16-bit
//    values, interpreted as UTF-16 when it is valid to do so.
//
//  * In Rust, strings are always valid UTF-8, which may contain zeros.
//
//  `OsString` and [`OsStr`] bridge this gap by simultaneously representing Rust
//  and platform-native string values, and in particular allowing a Rust string
//  to be converted into an "OS" string with no cost if possible. A consequence
//  of this is that `OsString` instances are *not* `NUL` terminated; in order
//  to pass to e.g., Unix system call, you should create a [`CStr`].
//
//  `OsString` is to <code>&[OsStr]</code> as [`String`] is to
//  <code>&[str]</code>: the former in each pair are owned strings; the latter
//  are borrowed references.
//
//  Note, `OsString` and [`OsStr`] internally do not necessarily hold strings in
//  the form native to the platform; While on Unix, strings are stored as a
//  sequence of 8-bit values, on Windows, where strings are 16-bit value based
//  as just discussed, strings are also actually stored as a sequence of 8-bit
//  values, encoded in a less-strict variant of UTF-8. This is useful to
//  understand when handling capacity and length values.
//
//  # Capacity of `OsString`
//
//  Capacity uses units of UTF-8 bytes for OS strings which were created from
//  valid unicode, and uses units of bytes in an unspecified encoding for other
//  contents. On a given target, all `OsString` and `OsStr` values use the same
//  units for capacity, so the following will work:
//  ```
//  use std::ffi::{OsStr, OsString};
//
//  fn concat_os_strings(a: &OsStr, b: &OsStr) -> OsString {
//      let mut ret = OsString::with_capacity(a.len() + b.len()); // This will
//      allocate ret.push(a); // This will not allocate further ret.push(b); //
//      This will not allocate further ret
//  }
//  ```
//
//  # Creating an `OsString`
//
//  **From a Rust string**: `OsString` implements
//  <code>[From]<[String]></code>, so you can use
//  <code>my_string.[into]\\()</code> to create an `OsString` from a normal Rust
//  string.
//
//  **From slices:** Just like you can start with an empty Rust
//  [`String`] and then [`String::push_str`] some <code>&[str]</code>
//  sub-string slices into it, you can create an empty `OsString` with
//  the [`OsString::new`] method and then push string slices into it with the
//  [`OsString::push`] method.
//
//  # Extracting a borrowed reference to the whole OS string
//
//  You can use the [`OsString::as_os_str`] method to get an
//  <code>&[OsStr]</code> from an `OsString`; this is effectively a borrowed
//  reference to the whole string.
//
//  # Conversions
//
//  See the [module's toplevel documentation about conversions][conversions] for
//  a discussion on the traits which `OsString` implements for [conversions]
//  from/to native representations.
//
//  [`CStr`]: crate::ffi::CStr
//  [conversions]: super#conversions
//  [into]: Into::into
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/ffi/os_str.rs;l=93
using OsString CRUBIT_INTERNAL_RUST_TYPE(":: std :: ffi :: OsString") =
    ::rs::std::ffi::OsString;
}  // namespace rs::std::ffi::os_str

namespace rs::std::ffi {

static_assert(
    sizeof(OsString) == 24,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(OsString) == 8,
    "Verify that ADT layout didn't change since this header got generated");
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtNtCsb7ytMsthdgm_u3std3ffi6os_ustr8OsStringNtNtCs9kG8YiNG2f0_u4core7default7Default7defaultB8_u(
    ::rs::std::ffi::OsString* __ret_ptr);
}
inline ::rs::std::ffi::OsString::OsString() {
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtNtCsb7ytMsthdgm_u3std3ffi6os_ustr8OsStringNtNtCs9kG8YiNG2f0_u4core7default7Default7defaultB8_u(
          this);
}
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtNtCsb7ytMsthdgm_u3std3ffi6os_ustr8OsStringNtNtNtCs9kG8YiNG2f0_u4core3ops4drop4Drop4dropB8_u(
    ::rs::std::ffi::OsString&);
}
inline OsString::~OsString() {
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtNtCsb7ytMsthdgm_u3std3ffi6os_ustr8OsStringNtNtNtCs9kG8YiNG2f0_u4core3ops4drop4Drop4dropB8_u(
          *this);
}
inline ::rs::std::ffi::OsString::OsString(OsString&& other) : OsString() {
  *this = ::std::move(other);
}
inline ::rs::std::ffi::OsString& ::rs::std::ffi::OsString::operator=(
    OsString&& other) {
  crubit::MemSwap(*this, other);
  return *this;
}
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtNtCsb7ytMsthdgm_u3std3ffi6os_ustr8OsStringNtNtCs9kG8YiNG2f0_u4core5clone5Clone5cloneB8_u(
    ::rs::std::ffi::OsString const&, ::rs::std::ffi::OsString* __ret_ptr);
}
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtNtCsb7ytMsthdgm_u3std3ffi6os_ustr8OsStringNtNtCs9kG8YiNG2f0_u4core5clone5Clone10clone_ufromB8_u(
    ::rs::std::ffi::OsString&, ::rs::std::ffi::OsString const&);
}
inline ::rs::std::ffi::OsString::OsString(const OsString& other) {
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtNtCsb7ytMsthdgm_u3std3ffi6os_ustr8OsStringNtNtCs9kG8YiNG2f0_u4core5clone5Clone5cloneB8_u(
          other, this);
}
inline ::rs::std::ffi::OsString& ::rs::std::ffi::OsString::operator=(
    const OsString& other) {
  if (this != &other) {
    __crubit_internal::
        __crubit_thunk_818b180788380d74__uRNvYNtNtNtCsb7ytMsthdgm_u3std3ffi6os_ustr8OsStringNtNtCs9kG8YiNG2f0_u4core5clone5Clone10clone_ufromB8_u(
            *this, other);
  }
  return *this;
}
inline ::rs::std::ffi::OsString::OsString(::crubit::UnsafeRelocateTag,
                                          OsString&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMNtNtCsb7ytMsthdgm_u3std3ffi6os_ustrNtB2_u8OsString3new(
    ::rs::std::ffi::OsString* __ret_ptr);
}
inline ::rs::std::ffi::OsString OsString::new_() {
  crubit::Slot<::rs::std::ffi::OsString> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMNtNtCsb7ytMsthdgm_u3std3ffi6os_ustrNtB2_u8OsString3new(
          __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMNtNtCsb7ytMsthdgm_u3std3ffi6os_ustrNtB2_u8OsString28from_uencoded_ubytes_uunchecked(
    rs_std::Vec<::std::uint8_t>*, ::rs::std::ffi::OsString* __ret_ptr);
}
inline ::rs::std::ffi::OsString OsString::from_encoded_bytes_unchecked(
    rs_std::Vec<::std::uint8_t> bytes) {
  crubit::Slot bytes_slot((::std::move(bytes)));
  crubit::Slot<::rs::std::ffi::OsString> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMNtNtCsb7ytMsthdgm_u3std3ffi6os_ustrNtB2_u8OsString28from_uencoded_ubytes_uunchecked(
          bytes_slot.Get(), __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMNtNtCsb7ytMsthdgm_u3std3ffi6os_ustrNtB2_u8OsString18into_uencoded_ubytes(
    ::rs::std::ffi::OsString*, rs_std::Vec<::std::uint8_t>* __ret_ptr);
}
inline rs_std::Vec<::std::uint8_t> OsString::into_encoded_bytes() && {
  auto&& self = *this;
  crubit::Slot self_slot((::std::move(self)));
  crubit::Slot<rs_std::Vec<::std::uint8_t>> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMNtNtCsb7ytMsthdgm_u3std3ffi6os_ustrNtB2_u8OsString18into_uencoded_ubytes(
          self_slot.Get(), __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMNtNtCsb7ytMsthdgm_u3std3ffi6os_ustrNtB2_u8OsString11into_ustring(
    ::rs::std::ffi::OsString*,
    rs_std::Result<::rs::alloc::string::String, ::rs::std::ffi::OsString>*
        __ret_ptr);
}
inline rs_std::Result<::rs::alloc::string::String, ::rs::std::ffi::OsString>
OsString::into_string() && {
  auto&& self = *this;
  crubit::Slot self_slot((::std::move(self)));
  crubit::Slot<
      rs_std::Result<::rs::alloc::string::String, ::rs::std::ffi::OsString>>
      __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMNtNtCsb7ytMsthdgm_u3std3ffi6os_ustrNtB2_u8OsString11into_ustring(
          self_slot.Get(), __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMNtNtCsb7ytMsthdgm_u3std3ffi6os_ustrNtB2_u8OsString13with_ucapacity(
    ::std::uintptr_t, ::rs::std::ffi::OsString* __ret_ptr);
}
inline ::rs::std::ffi::OsString OsString::with_capacity(
    ::std::uintptr_t capacity) {
  crubit::Slot<::rs::std::ffi::OsString> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMNtNtCsb7ytMsthdgm_u3std3ffi6os_ustrNtB2_u8OsString13with_ucapacity(
          capacity, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMNtNtCsb7ytMsthdgm_u3std3ffi6os_ustrNtB2_u8OsString5clear(
    ::rs::std::ffi::OsString&);
}
inline void OsString::clear() {
  auto&& self = *this;
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMNtNtCsb7ytMsthdgm_u3std3ffi6os_ustrNtB2_u8OsString5clear(
          self);
}

namespace __crubit_internal {
extern "C" ::std::uintptr_t
__crubit_thunk_818b180788380d74__uRNvMNtNtCsb7ytMsthdgm_u3std3ffi6os_ustrNtB2_u8OsString8capacity(
    ::rs::std::ffi::OsString const&);
}
inline ::std::uintptr_t OsString::capacity() const {
  auto&& self = *this;
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMNtNtCsb7ytMsthdgm_u3std3ffi6os_ustrNtB2_u8OsString8capacity(
          self);
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMNtNtCsb7ytMsthdgm_u3std3ffi6os_ustrNtB2_u8OsString7reserve(
    ::rs::std::ffi::OsString&, ::std::uintptr_t);
}
inline void OsString::reserve(::std::uintptr_t additional) {
  auto&& self = *this;
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMNtNtCsb7ytMsthdgm_u3std3ffi6os_ustrNtB2_u8OsString7reserve(
          self, additional);
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMNtNtCsb7ytMsthdgm_u3std3ffi6os_ustrNtB2_u8OsString13reserve_uexact(
    ::rs::std::ffi::OsString&, ::std::uintptr_t);
}
inline void OsString::reserve_exact(::std::uintptr_t additional) {
  auto&& self = *this;
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMNtNtCsb7ytMsthdgm_u3std3ffi6os_ustrNtB2_u8OsString13reserve_uexact(
          self, additional);
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMNtNtCsb7ytMsthdgm_u3std3ffi6os_ustrNtB2_u8OsString13shrink_uto_ufit(
    ::rs::std::ffi::OsString&);
}
inline void OsString::shrink_to_fit() {
  auto&& self = *this;
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMNtNtCsb7ytMsthdgm_u3std3ffi6os_ustrNtB2_u8OsString13shrink_uto_ufit(
          self);
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMNtNtCsb7ytMsthdgm_u3std3ffi6os_ustrNtB2_u8OsString9shrink_uto(
    ::rs::std::ffi::OsString&, ::std::uintptr_t);
}
inline void OsString::shrink_to(::std::uintptr_t min_capacity) {
  auto&& self = *this;
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMNtNtCsb7ytMsthdgm_u3std3ffi6os_ustrNtB2_u8OsString9shrink_uto(
          self, min_capacity);
}
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtNtCsb7ytMsthdgm_u3std3ffi6os_ustr8OsStringINtNtCs9kG8YiNG2f0_u4core7convert4IntoNtNtB8_u4path7PathBufE4intoB8_u(
    ::rs::std::ffi::OsString*, ::rs::std::path::PathBuf* __ret_ptr);
}
inline OsString::operator ::rs::std::path::PathBuf() {
  auto&& self = *this;
  crubit::Slot self_slot((::std::move(self)));
  crubit::Slot<::rs::std::path::PathBuf> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtNtCsb7ytMsthdgm_u3std3ffi6os_ustr8OsStringINtNtCs9kG8YiNG2f0_u4core7convert4IntoNtNtB8_u4path7PathBufE4intoB8_u(
          self_slot.Get(), __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}
namespace __crubit_internal {
extern "C" bool
__crubit_thunk_818b180788380d74__uRNvXs8_uNtNtCsb7ytMsthdgm_u3std3ffi6os_ustrNtB5_u8OsStringNtNtCs9kG8YiNG2f0_u4core3cmp9PartialEq2eq(
    ::rs::std::ffi::OsString const&, ::rs::std::ffi::OsString const&);
}
inline bool OsString::operator==(::rs::std::ffi::OsString const& other) const {
  auto&& self = *this;
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXs8_uNtNtCsb7ytMsthdgm_u3std3ffi6os_ustrNtB5_u8OsStringNtNtCs9kG8YiNG2f0_u4core3cmp9PartialEq2eq(
          self, other);
}

namespace __crubit_internal {
extern "C" bool
__crubit_thunk_818b180788380d74__uRNvXsb_uNtNtCsb7ytMsthdgm_u3std3ffi6os_ustrNtB5_u8OsStringINtNtCs9kG8YiNG2f0_u4core3cmp9PartialEqReE2eq(
    ::rs::std::ffi::OsString const&, rs_std::StrRef const&);
}
inline bool OsString::operator==(rs_std::StrRef const& other) const {
  auto&& self = *this;
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXsb_uNtNtCsb7ytMsthdgm_u3std3ffi6os_ustrNtB5_u8OsStringINtNtCs9kG8YiNG2f0_u4core3cmp9PartialEqReE2eq(
          self, other);
}

namespace __crubit_internal {
extern "C" bool
__crubit_thunk_818b180788380d74__uRNvXs2P_uNtCsb7ytMsthdgm_u3std4pathNtNtNtB8_u3ffi6os_ustr8OsStringINtNtCs9kG8YiNG2f0_u4core3cmp9PartialEqNtB6_u7PathBufE2eq(
    ::rs::std::ffi::OsString const&, ::rs::std::path::PathBuf const&);
}
inline bool OsString::operator==(::rs::std::path::PathBuf const& other) const {
  auto&& self = *this;
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXs2P_uNtCsb7ytMsthdgm_u3std4pathNtNtNtB8_u3ffi6os_ustr8OsStringINtNtCs9kG8YiNG2f0_u4core3cmp9PartialEqNtB6_u7PathBufE2eq(
          self, other);
}
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtNtCsb7ytMsthdgm_u3std3ffi6os_ustr8OsStringINtNtCs9kG8YiNG2f0_u4core7convert4FromNtNtCsaddbpR6HRqH_u5alloc6string6StringE4fromB8_u(
    ::rs::alloc::string::String*, ::rs::std::ffi::OsString* __ret_ptr);
}
inline OsString::OsString(::rs::alloc::string::String value) {
  crubit::Slot value_slot((::std::move(value)));
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtNtCsb7ytMsthdgm_u3std3ffi6os_ustr8OsStringINtNtCs9kG8YiNG2f0_u4core7convert4FromNtNtCsaddbpR6HRqH_u5alloc6string6StringE4fromB8_u(
          value_slot.Get(), this);
}
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtNtCsb7ytMsthdgm_u3std3ffi6os_ustr8OsStringINtNtCs9kG8YiNG2f0_u4core7convert4FromNtNtB8_u4path7PathBufE4fromB8_u(
    ::rs::std::path::PathBuf*, ::rs::std::ffi::OsString* __ret_ptr);
}
inline OsString::OsString(::rs::std::path::PathBuf value) {
  crubit::Slot value_slot((::std::move(value)));
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtNtCsb7ytMsthdgm_u3std3ffi6os_ustr8OsStringINtNtCs9kG8YiNG2f0_u4core7convert4FromNtNtB8_u4path7PathBufE4fromB8_u(
          value_slot.Get(), this);
}
namespace __crubit_internal {
extern "C" ::std::int8_t
__crubit_thunk_818b180788380d74__uRNvYNtNtNtCsb7ytMsthdgm_u3std3ffi6os_ustr8OsStringNtNtCs9kG8YiNG2f0_u4core3cmp3Ord3cmpB8_u(
    ::rs::std::ffi::OsString const&, ::rs::std::ffi::OsString const&);
}
inline ::std::strong_ordering OsString::operator<=>(
    const OsString& other) const {
  auto val = __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtNtCsb7ytMsthdgm_u3std3ffi6os_ustr8OsStringNtNtCs9kG8YiNG2f0_u4core3cmp3Ord3cmpB8_u(
          *this, other);
  switch (val) {
    case -1:
      return ::std::strong_ordering::less;
    case 0:
      return ::std::strong_ordering::equal;
    case 1:
      return ::std::strong_ordering::greater;
    default:
      CRUBIT_UNREACHABLE();
  }
}
namespace __crubit_internal {
extern "C" ::std::int8_t
__crubit_thunk_818b180788380d74__uRNvYNtNtNtCsb7ytMsthdgm_u3std3ffi6os_ustr8OsStringINtNtCs9kG8YiNG2f0_u4core3cmp10PartialOrdNtNtB8_u4path7PathBufE11partial_ucmpB8_u(
    ::rs::std::ffi::OsString const&, ::rs::std::path::PathBuf const&);
}
inline ::std::partial_ordering OsString::operator<=>(
    ::rs::std::path::PathBuf const& other) const {
  auto val = __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtNtCsb7ytMsthdgm_u3std3ffi6os_ustr8OsStringINtNtCs9kG8YiNG2f0_u4core3cmp10PartialOrdNtNtB8_u4path7PathBufE11partial_ucmpB8_u(
          *this, other);
  switch (val) {
    case -1:
      return ::std::partial_ordering::less;
    case 0:
      return ::std::partial_ordering::equivalent;
    case 1:
      return ::std::partial_ordering::greater;
    case 2:
      return ::std::partial_ordering::unordered;
    default:
      CRUBIT_UNREACHABLE();
  }
}
inline void OsString::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(OsString, inner));
}
}  // namespace rs::std::ffi

namespace rs::std::fs {

static_assert(
    sizeof(DirBuilder) == 8,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(DirBuilder) == 4,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(::std::is_trivially_destructible_v<DirBuilder>);
static_assert(
    ::std::is_trivially_move_constructible_v<::rs::std::fs::DirBuilder>);
static_assert(::std::is_trivially_move_assignable_v<::rs::std::fs::DirBuilder>);
inline ::rs::std::fs::DirBuilder::DirBuilder(::crubit::UnsafeRelocateTag,
                                             DirBuilder&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMsD_uNtCsb7ytMsthdgm_u3std2fsNtB5_u10DirBuilder3new(
    ::rs::std::fs::DirBuilder* __ret_ptr);
}
inline ::rs::std::fs::DirBuilder DirBuilder::new_() {
  crubit::Slot<::rs::std::fs::DirBuilder> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMsD_uNtCsb7ytMsthdgm_u3std2fsNtB5_u10DirBuilder3new(
          __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" ::rs::std::fs::DirBuilder& $(__anon1)
    __crubit_thunk_818b180788380d74__uRNvMsD_uNtCsb7ytMsthdgm_u3std2fsNtB5_u10DirBuilder9recursive(
        ::rs::std::fs::DirBuilder&, bool);
}
inline ::rs::std::fs::DirBuilder& $(__anon1)
        DirBuilder::recursive(bool recursive) &
    $(__anon1) CRUBIT_LIFETIME_BOUND {
  auto&& self = *this;
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMsD_uNtCsb7ytMsthdgm_u3std2fsNtB5_u10DirBuilder9recursive(
          self, recursive);
}
inline void DirBuilder::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(DirBuilder, inner));
  static_assert(4 == offsetof(DirBuilder, recursive_));
}
static_assert(
    sizeof(DirEntry) == 40,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(DirEntry) == 8,
    "Verify that ADT layout didn't change since this header got generated");
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std2fs8DirEntryNtNtNtCs9kG8YiNG2f0_u4core3ops4drop4Drop4dropB6_u(
    ::rs::std::fs::DirEntry&);
}
inline DirEntry::~DirEntry() {
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std2fs8DirEntryNtNtNtCs9kG8YiNG2f0_u4core3ops4drop4Drop4dropB6_u(
          *this);
}
inline ::rs::std::fs::DirEntry::DirEntry(::crubit::UnsafeRelocateTag,
                                         DirEntry&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMsA_uNtCsb7ytMsthdgm_u3std2fsNtB5_u8DirEntry4path(
    ::rs::std::fs::DirEntry const&, ::rs::std::path::PathBuf* __ret_ptr);
}
inline ::rs::std::path::PathBuf DirEntry::path() const {
  auto&& self = *this;
  crubit::Slot<::rs::std::path::PathBuf> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMsA_uNtCsb7ytMsthdgm_u3std2fsNtB5_u8DirEntry4path(
          self, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMsA_uNtCsb7ytMsthdgm_u3std2fsNtB5_u8DirEntry8metadata(
    ::rs::std::fs::DirEntry const&,
    rs_std::Result<::rs::std::fs::Metadata, ::rs::std::io::Error>* __ret_ptr);
}
inline rs_std::Result<::rs::std::fs::Metadata, ::rs::std::io::Error>
DirEntry::metadata() const {
  auto&& self = *this;
  crubit::Slot<rs_std::Result<::rs::std::fs::Metadata, ::rs::std::io::Error>>
      __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMsA_uNtCsb7ytMsthdgm_u3std2fsNtB5_u8DirEntry8metadata(
          self, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMsA_uNtCsb7ytMsthdgm_u3std2fsNtB5_u8DirEntry9file_utype(
    ::rs::std::fs::DirEntry const&,
    rs_std::Result<::rs::std::fs::FileType, ::rs::std::io::Error>* __ret_ptr);
}
inline rs_std::Result<::rs::std::fs::FileType, ::rs::std::io::Error>
DirEntry::file_type() const {
  auto&& self = *this;
  crubit::Slot<rs_std::Result<::rs::std::fs::FileType, ::rs::std::io::Error>>
      __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMsA_uNtCsb7ytMsthdgm_u3std2fsNtB5_u8DirEntry9file_utype(
          self, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMsA_uNtCsb7ytMsthdgm_u3std2fsNtB5_u8DirEntry9file_uname(
    ::rs::std::fs::DirEntry const&, ::rs::std::ffi::OsString* __ret_ptr);
}
inline ::rs::std::ffi::OsString DirEntry::file_name() const {
  auto&& self = *this;
  crubit::Slot<::rs::std::ffi::OsString> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMsA_uNtCsb7ytMsthdgm_u3std2fsNtB5_u8DirEntry9file_uname(
          self, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}
inline void DirEntry::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(DirEntry, __field0));
}
static_assert(
    sizeof(File) == 4,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(File) == 4,
    "Verify that ADT layout didn't change since this header got generated");
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std2fs4FileNtNtNtCs9kG8YiNG2f0_u4core3ops4drop4Drop4dropB6_u(
    ::rs::std::fs::File&);
}
inline File::~File() {
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std2fs4FileNtNtNtCs9kG8YiNG2f0_u4core3ops4drop4Drop4dropB6_u(
          *this);
}
inline ::rs::std::fs::File::File(::crubit::UnsafeRelocateTag, File&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMs2_uNtCsb7ytMsthdgm_u3std2fsNtB5_u4File7options(
    ::rs::std::fs::OpenOptions* __ret_ptr);
}
inline ::rs::std::fs::OpenOptions File::options() {
  crubit::Slot<::rs::std::fs::OpenOptions> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMs2_uNtCsb7ytMsthdgm_u3std2fsNtB5_u4File7options(
          __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMs2_uNtCsb7ytMsthdgm_u3std2fsNtB5_u4File8metadata(
    ::rs::std::fs::File const&,
    rs_std::Result<::rs::std::fs::Metadata, ::rs::std::io::Error>* __ret_ptr);
}
inline rs_std::Result<::rs::std::fs::Metadata, ::rs::std::io::Error>
File::metadata() const {
  auto&& self = *this;
  crubit::Slot<rs_std::Result<::rs::std::fs::Metadata, ::rs::std::io::Error>>
      __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMs2_uNtCsb7ytMsthdgm_u3std2fsNtB5_u4File8metadata(
          self, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMs2_uNtCsb7ytMsthdgm_u3std2fsNtB5_u4File9try_uclone(
    ::rs::std::fs::File const&,
    rs_std::Result<::rs::std::fs::File, ::rs::std::io::Error>* __ret_ptr);
}
inline rs_std::Result<::rs::std::fs::File, ::rs::std::io::Error>
File::try_clone() const {
  auto&& self = *this;
  crubit::Slot<rs_std::Result<::rs::std::fs::File, ::rs::std::io::Error>>
      __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMs2_uNtCsb7ytMsthdgm_u3std2fsNtB5_u4File9try_uclone(
          self, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}
inline void File::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(File, inner));
}
static_assert(
    sizeof(FileTimes) == 32,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(FileTimes) == 8,
    "Verify that ADT layout didn't change since this header got generated");
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std2fs9FileTimesNtNtCs9kG8YiNG2f0_u4core7default7Default7defaultB6_u(
    ::rs::std::fs::FileTimes* __ret_ptr);
}
inline ::rs::std::fs::FileTimes::FileTimes() {
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std2fs9FileTimesNtNtCs9kG8YiNG2f0_u4core7default7Default7defaultB6_u(
          this);
}
static_assert(::std::is_trivially_destructible_v<FileTimes>);
static_assert(
    ::std::is_trivially_move_constructible_v<::rs::std::fs::FileTimes>);
static_assert(::std::is_trivially_move_assignable_v<::rs::std::fs::FileTimes>);
static_assert(
    ::std::is_trivially_copy_constructible_v<::rs::std::fs::FileTimes>);
static_assert(::std::is_trivially_copy_assignable_v<::rs::std::fs::FileTimes>);
inline ::rs::std::fs::FileTimes::FileTimes(::crubit::UnsafeRelocateTag,
                                           FileTimes&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMsr_uNtCsb7ytMsthdgm_u3std2fsNtB5_u9FileTimes3new(
    ::rs::std::fs::FileTimes* __ret_ptr);
}
inline ::rs::std::fs::FileTimes FileTimes::new_() {
  crubit::Slot<::rs::std::fs::FileTimes> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMsr_uNtCsb7ytMsthdgm_u3std2fsNtB5_u9FileTimes3new(
          __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMsr_uNtCsb7ytMsthdgm_u3std2fsNtB5_u9FileTimes12set_uaccessed(
    ::rs::std::fs::FileTimes*, ::rs::std::time::SystemTime*,
    ::rs::std::fs::FileTimes* __ret_ptr);
}
inline ::rs::std::fs::FileTimes FileTimes::set_accessed(
    ::rs::std::time::SystemTime t) const {
  auto& self = const_cast<::std::remove_cvref_t<decltype(*this)>&>(*this);
  crubit::Slot<::rs::std::fs::FileTimes> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMsr_uNtCsb7ytMsthdgm_u3std2fsNtB5_u9FileTimes12set_uaccessed(
          &self, &t, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMsr_uNtCsb7ytMsthdgm_u3std2fsNtB5_u9FileTimes12set_umodified(
    ::rs::std::fs::FileTimes*, ::rs::std::time::SystemTime*,
    ::rs::std::fs::FileTimes* __ret_ptr);
}
inline ::rs::std::fs::FileTimes FileTimes::set_modified(
    ::rs::std::time::SystemTime t) const {
  auto& self = const_cast<::std::remove_cvref_t<decltype(*this)>&>(*this);
  crubit::Slot<::rs::std::fs::FileTimes> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMsr_uNtCsb7ytMsthdgm_u3std2fsNtB5_u9FileTimes12set_umodified(
          &self, &t, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}
inline void FileTimes::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(FileTimes, __field0));
}
static_assert(
    sizeof(FileType) == 4,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(FileType) == 4,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(::std::is_trivially_destructible_v<FileType>);
static_assert(
    ::std::is_trivially_move_constructible_v<::rs::std::fs::FileType>);
static_assert(::std::is_trivially_move_assignable_v<::rs::std::fs::FileType>);
static_assert(
    ::std::is_trivially_copy_constructible_v<::rs::std::fs::FileType>);
static_assert(::std::is_trivially_copy_assignable_v<::rs::std::fs::FileType>);
inline ::rs::std::fs::FileType::FileType(::crubit::UnsafeRelocateTag,
                                         FileType&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}

namespace __crubit_internal {
extern "C" bool
__crubit_thunk_818b180788380d74__uRNvMsu_uNtCsb7ytMsthdgm_u3std2fsNtB5_u8FileType6is_udir(
    ::rs::std::fs::FileType const&);
}
inline bool FileType::is_dir() const {
  auto&& self = *this;
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMsu_uNtCsb7ytMsthdgm_u3std2fsNtB5_u8FileType6is_udir(
          self);
}

namespace __crubit_internal {
extern "C" bool
__crubit_thunk_818b180788380d74__uRNvMsu_uNtCsb7ytMsthdgm_u3std2fsNtB5_u8FileType7is_ufile(
    ::rs::std::fs::FileType const&);
}
inline bool FileType::is_file() const {
  auto&& self = *this;
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMsu_uNtCsb7ytMsthdgm_u3std2fsNtB5_u8FileType7is_ufile(
          self);
}

namespace __crubit_internal {
extern "C" bool
__crubit_thunk_818b180788380d74__uRNvMsu_uNtCsb7ytMsthdgm_u3std2fsNtB5_u8FileType10is_usymlink(
    ::rs::std::fs::FileType const&);
}
inline bool FileType::is_symlink() const {
  auto&& self = *this;
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMsu_uNtCsb7ytMsthdgm_u3std2fsNtB5_u8FileType10is_usymlink(
          self);
}

namespace __crubit_internal {
extern "C" bool
__crubit_thunk_818b180788380d74__uRNvXsX_uNtCsb7ytMsthdgm_u3std2fsNtB5_u8FileTypeNtNtCs9kG8YiNG2f0_u4core3cmp9PartialEq2eq(
    ::rs::std::fs::FileType const&, ::rs::std::fs::FileType const&);
}
inline bool FileType::operator==(::rs::std::fs::FileType const& other) const {
  auto&& self = *this;
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXsX_uNtCsb7ytMsthdgm_u3std2fsNtB5_u8FileTypeNtNtCs9kG8YiNG2f0_u4core3cmp9PartialEq2eq(
          self, other);
}
inline void FileType::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(FileType, __field0));
}
static_assert(
    sizeof(Metadata) == 128,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(Metadata) == 8,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(::std::is_trivially_destructible_v<Metadata>);
static_assert(
    ::std::is_trivially_move_constructible_v<::rs::std::fs::Metadata>);
static_assert(::std::is_trivially_move_assignable_v<::rs::std::fs::Metadata>);
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std2fs8MetadataNtNtCs9kG8YiNG2f0_u4core5clone5Clone5cloneB6_u(
    ::rs::std::fs::Metadata const&, ::rs::std::fs::Metadata* __ret_ptr);
}
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std2fs8MetadataNtNtCs9kG8YiNG2f0_u4core5clone5Clone10clone_ufromB6_u(
    ::rs::std::fs::Metadata&, ::rs::std::fs::Metadata const&);
}
inline ::rs::std::fs::Metadata::Metadata(const Metadata& other) {
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std2fs8MetadataNtNtCs9kG8YiNG2f0_u4core5clone5Clone5cloneB6_u(
          other, this);
}
inline ::rs::std::fs::Metadata& ::rs::std::fs::Metadata::operator=(
    const Metadata& other) {
  if (this != &other) {
    __crubit_internal::
        __crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std2fs8MetadataNtNtCs9kG8YiNG2f0_u4core5clone5Clone10clone_ufromB6_u(
            *this, other);
  }
  return *this;
}
inline ::rs::std::fs::Metadata::Metadata(::crubit::UnsafeRelocateTag,
                                         Metadata&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMsm_uNtCsb7ytMsthdgm_u3std2fsNtB5_u8Metadata9file_utype(
    ::rs::std::fs::Metadata const&, ::rs::std::fs::FileType* __ret_ptr);
}
inline ::rs::std::fs::FileType Metadata::file_type() const {
  auto&& self = *this;
  crubit::Slot<::rs::std::fs::FileType> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMsm_uNtCsb7ytMsthdgm_u3std2fsNtB5_u8Metadata9file_utype(
          self, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" bool
__crubit_thunk_818b180788380d74__uRNvMsm_uNtCsb7ytMsthdgm_u3std2fsNtB5_u8Metadata6is_udir(
    ::rs::std::fs::Metadata const&);
}
inline bool Metadata::is_dir() const {
  auto&& self = *this;
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMsm_uNtCsb7ytMsthdgm_u3std2fsNtB5_u8Metadata6is_udir(
          self);
}

namespace __crubit_internal {
extern "C" bool
__crubit_thunk_818b180788380d74__uRNvMsm_uNtCsb7ytMsthdgm_u3std2fsNtB5_u8Metadata7is_ufile(
    ::rs::std::fs::Metadata const&);
}
inline bool Metadata::is_file() const {
  auto&& self = *this;
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMsm_uNtCsb7ytMsthdgm_u3std2fsNtB5_u8Metadata7is_ufile(
          self);
}

namespace __crubit_internal {
extern "C" bool
__crubit_thunk_818b180788380d74__uRNvMsm_uNtCsb7ytMsthdgm_u3std2fsNtB5_u8Metadata10is_usymlink(
    ::rs::std::fs::Metadata const&);
}
inline bool Metadata::is_symlink() const {
  auto&& self = *this;
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMsm_uNtCsb7ytMsthdgm_u3std2fsNtB5_u8Metadata10is_usymlink(
          self);
}

namespace __crubit_internal {
extern "C" ::std::uint64_t
__crubit_thunk_818b180788380d74__uRNvMsm_uNtCsb7ytMsthdgm_u3std2fsNtB5_u8Metadata3len(
    ::rs::std::fs::Metadata const&);
}
inline ::std::uint64_t Metadata::len() const {
  auto&& self = *this;
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMsm_uNtCsb7ytMsthdgm_u3std2fsNtB5_u8Metadata3len(
          self);
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMsm_uNtCsb7ytMsthdgm_u3std2fsNtB5_u8Metadata11permissions(
    ::rs::std::fs::Metadata const&, ::rs::std::fs::Permissions* __ret_ptr);
}
inline ::rs::std::fs::Permissions Metadata::permissions() const {
  auto&& self = *this;
  crubit::Slot<::rs::std::fs::Permissions> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMsm_uNtCsb7ytMsthdgm_u3std2fsNtB5_u8Metadata11permissions(
          self, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMsm_uNtCsb7ytMsthdgm_u3std2fsNtB5_u8Metadata8modified(
    ::rs::std::fs::Metadata const&,
    rs_std::Result<::rs::std::time::SystemTime, ::rs::std::io::Error>*
        __ret_ptr);
}
inline rs_std::Result<::rs::std::time::SystemTime, ::rs::std::io::Error>
Metadata::modified() const {
  auto&& self = *this;
  crubit::Slot<
      rs_std::Result<::rs::std::time::SystemTime, ::rs::std::io::Error>>
      __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMsm_uNtCsb7ytMsthdgm_u3std2fsNtB5_u8Metadata8modified(
          self, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMsm_uNtCsb7ytMsthdgm_u3std2fsNtB5_u8Metadata8accessed(
    ::rs::std::fs::Metadata const&,
    rs_std::Result<::rs::std::time::SystemTime, ::rs::std::io::Error>*
        __ret_ptr);
}
inline rs_std::Result<::rs::std::time::SystemTime, ::rs::std::io::Error>
Metadata::accessed() const {
  auto&& self = *this;
  crubit::Slot<
      rs_std::Result<::rs::std::time::SystemTime, ::rs::std::io::Error>>
      __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMsm_uNtCsb7ytMsthdgm_u3std2fsNtB5_u8Metadata8accessed(
          self, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMsm_uNtCsb7ytMsthdgm_u3std2fsNtB5_u8Metadata7created(
    ::rs::std::fs::Metadata const&,
    rs_std::Result<::rs::std::time::SystemTime, ::rs::std::io::Error>*
        __ret_ptr);
}
inline rs_std::Result<::rs::std::time::SystemTime, ::rs::std::io::Error>
Metadata::created() const {
  auto&& self = *this;
  crubit::Slot<
      rs_std::Result<::rs::std::time::SystemTime, ::rs::std::io::Error>>
      __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMsm_uNtCsb7ytMsthdgm_u3std2fsNtB5_u8Metadata7created(
          self, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}
inline void Metadata::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(Metadata, __field0));
}
static_assert(
    sizeof(OpenOptions) == 16,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(OpenOptions) == 4,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(::std::is_trivially_destructible_v<OpenOptions>);
static_assert(
    ::std::is_trivially_move_constructible_v<::rs::std::fs::OpenOptions>);
static_assert(
    ::std::is_trivially_move_assignable_v<::rs::std::fs::OpenOptions>);
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std2fs11OpenOptionsNtNtCs9kG8YiNG2f0_u4core5clone5Clone5cloneB6_u(
    ::rs::std::fs::OpenOptions const&, ::rs::std::fs::OpenOptions* __ret_ptr);
}
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std2fs11OpenOptionsNtNtCs9kG8YiNG2f0_u4core5clone5Clone10clone_ufromB6_u(
    ::rs::std::fs::OpenOptions&, ::rs::std::fs::OpenOptions const&);
}
inline ::rs::std::fs::OpenOptions::OpenOptions(const OpenOptions& other) {
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std2fs11OpenOptionsNtNtCs9kG8YiNG2f0_u4core5clone5Clone5cloneB6_u(
          other, this);
}
inline ::rs::std::fs::OpenOptions& ::rs::std::fs::OpenOptions::operator=(
    const OpenOptions& other) {
  if (this != &other) {
    __crubit_internal::
        __crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std2fs11OpenOptionsNtNtCs9kG8YiNG2f0_u4core5clone5Clone10clone_ufromB6_u(
            *this, other);
  }
  return *this;
}
inline ::rs::std::fs::OpenOptions::OpenOptions(::crubit::UnsafeRelocateTag,
                                               OpenOptions&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMsj_uNtCsb7ytMsthdgm_u3std2fsNtB5_u11OpenOptions3new(
    ::rs::std::fs::OpenOptions* __ret_ptr);
}
inline ::rs::std::fs::OpenOptions OpenOptions::new_() {
  crubit::Slot<::rs::std::fs::OpenOptions> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMsj_uNtCsb7ytMsthdgm_u3std2fsNtB5_u11OpenOptions3new(
          __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" ::rs::std::fs::OpenOptions& $(__anon1)
    __crubit_thunk_818b180788380d74__uRNvMsj_uNtCsb7ytMsthdgm_u3std2fsNtB5_u11OpenOptions4read(
        ::rs::std::fs::OpenOptions&, bool);
}
inline ::rs::std::fs::OpenOptions& $(__anon1) OpenOptions::read(bool read) &
    $(__anon1) CRUBIT_LIFETIME_BOUND {
  auto&& self = *this;
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMsj_uNtCsb7ytMsthdgm_u3std2fsNtB5_u11OpenOptions4read(
          self, read);
}

namespace __crubit_internal {
extern "C" ::rs::std::fs::OpenOptions& $(__anon1)
    __crubit_thunk_818b180788380d74__uRNvMsj_uNtCsb7ytMsthdgm_u3std2fsNtB5_u11OpenOptions5write(
        ::rs::std::fs::OpenOptions&, bool);
}
inline ::rs::std::fs::OpenOptions& $(__anon1) OpenOptions::write(bool write) &
    $(__anon1) CRUBIT_LIFETIME_BOUND {
  auto&& self = *this;
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMsj_uNtCsb7ytMsthdgm_u3std2fsNtB5_u11OpenOptions5write(
          self, write);
}

namespace __crubit_internal {
extern "C" ::rs::std::fs::OpenOptions& $(__anon1)
    __crubit_thunk_818b180788380d74__uRNvMsj_uNtCsb7ytMsthdgm_u3std2fsNtB5_u11OpenOptions6append(
        ::rs::std::fs::OpenOptions&, bool);
}
inline ::rs::std::fs::OpenOptions& $(__anon1) OpenOptions::append(bool append) &
    $(__anon1) CRUBIT_LIFETIME_BOUND {
  auto&& self = *this;
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMsj_uNtCsb7ytMsthdgm_u3std2fsNtB5_u11OpenOptions6append(
          self, append);
}

namespace __crubit_internal {
extern "C" ::rs::std::fs::OpenOptions& $(__anon1)
    __crubit_thunk_818b180788380d74__uRNvMsj_uNtCsb7ytMsthdgm_u3std2fsNtB5_u11OpenOptions8truncate(
        ::rs::std::fs::OpenOptions&, bool);
}
inline ::rs::std::fs::OpenOptions& $(__anon1)
        OpenOptions::truncate(bool truncate) &
    $(__anon1) CRUBIT_LIFETIME_BOUND {
  auto&& self = *this;
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMsj_uNtCsb7ytMsthdgm_u3std2fsNtB5_u11OpenOptions8truncate(
          self, truncate);
}

namespace __crubit_internal {
extern "C" ::rs::std::fs::OpenOptions& $(__anon1)
    __crubit_thunk_818b180788380d74__uRNvMsj_uNtCsb7ytMsthdgm_u3std2fsNtB5_u11OpenOptions6create(
        ::rs::std::fs::OpenOptions&, bool);
}
inline ::rs::std::fs::OpenOptions& $(__anon1) OpenOptions::create(bool create) &
    $(__anon1) CRUBIT_LIFETIME_BOUND {
  auto&& self = *this;
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMsj_uNtCsb7ytMsthdgm_u3std2fsNtB5_u11OpenOptions6create(
          self, create);
}

namespace __crubit_internal {
extern "C" ::rs::std::fs::OpenOptions& $(__anon1)
    __crubit_thunk_818b180788380d74__uRNvMsj_uNtCsb7ytMsthdgm_u3std2fsNtB5_u11OpenOptions10create_unew(
        ::rs::std::fs::OpenOptions&, bool);
}
inline ::rs::std::fs::OpenOptions& $(__anon1)
        OpenOptions::create_new(bool create_new) &
    $(__anon1) CRUBIT_LIFETIME_BOUND {
  auto&& self = *this;
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMsj_uNtCsb7ytMsthdgm_u3std2fsNtB5_u11OpenOptions10create_unew(
          self, create_new);
}
inline void OpenOptions::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(OpenOptions, __field0));
}
static_assert(
    sizeof(Permissions) == 4,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(Permissions) == 4,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(::std::is_trivially_destructible_v<Permissions>);
static_assert(
    ::std::is_trivially_move_constructible_v<::rs::std::fs::Permissions>);
static_assert(
    ::std::is_trivially_move_assignable_v<::rs::std::fs::Permissions>);
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std2fs11PermissionsNtNtCs9kG8YiNG2f0_u4core5clone5Clone5cloneB6_u(
    ::rs::std::fs::Permissions const&, ::rs::std::fs::Permissions* __ret_ptr);
}
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std2fs11PermissionsNtNtCs9kG8YiNG2f0_u4core5clone5Clone10clone_ufromB6_u(
    ::rs::std::fs::Permissions&, ::rs::std::fs::Permissions const&);
}
inline ::rs::std::fs::Permissions::Permissions(const Permissions& other) {
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std2fs11PermissionsNtNtCs9kG8YiNG2f0_u4core5clone5Clone5cloneB6_u(
          other, this);
}
inline ::rs::std::fs::Permissions& ::rs::std::fs::Permissions::operator=(
    const Permissions& other) {
  if (this != &other) {
    __crubit_internal::
        __crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std2fs11PermissionsNtNtCs9kG8YiNG2f0_u4core5clone5Clone10clone_ufromB6_u(
            *this, other);
  }
  return *this;
}
inline ::rs::std::fs::Permissions::Permissions(::crubit::UnsafeRelocateTag,
                                               Permissions&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}

namespace __crubit_internal {
extern "C" bool
__crubit_thunk_818b180788380d74__uRNvMst_uNtCsb7ytMsthdgm_u3std2fsNtB5_u11Permissions8readonly(
    ::rs::std::fs::Permissions const&);
}
inline bool Permissions::readonly() const {
  auto&& self = *this;
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMst_uNtCsb7ytMsthdgm_u3std2fsNtB5_u11Permissions8readonly(
          self);
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMst_uNtCsb7ytMsthdgm_u3std2fsNtB5_u11Permissions12set_ureadonly(
    ::rs::std::fs::Permissions&, bool);
}
inline void Permissions::set_readonly(bool readonly) {
  auto&& self = *this;
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMst_uNtCsb7ytMsthdgm_u3std2fsNtB5_u11Permissions12set_ureadonly(
          self, readonly);
}

namespace __crubit_internal {
extern "C" bool
__crubit_thunk_818b180788380d74__uRNvXsQ_uNtCsb7ytMsthdgm_u3std2fsNtB5_u11PermissionsNtNtCs9kG8YiNG2f0_u4core3cmp9PartialEq2eq(
    ::rs::std::fs::Permissions const&, ::rs::std::fs::Permissions const&);
}
inline bool Permissions::operator==(
    ::rs::std::fs::Permissions const& other) const {
  auto&& self = *this;
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXsQ_uNtCsb7ytMsthdgm_u3std2fsNtB5_u11PermissionsNtNtCs9kG8YiNG2f0_u4core3cmp9PartialEq2eq(
          self, other);
}
inline void Permissions::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(Permissions, __field0));
}
static_assert(
    sizeof(ReadDir) == 16,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(ReadDir) == 8,
    "Verify that ADT layout didn't change since this header got generated");
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std2fs7ReadDirNtNtNtCs9kG8YiNG2f0_u4core3ops4drop4Drop4dropB6_u(
    ::rs::std::fs::ReadDir&);
}
inline ReadDir::~ReadDir() {
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std2fs7ReadDirNtNtNtCs9kG8YiNG2f0_u4core3ops4drop4Drop4dropB6_u(
          *this);
}
inline ::rs::std::fs::ReadDir::ReadDir(::crubit::UnsafeRelocateTag,
                                       ReadDir&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}
inline void ReadDir::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(ReadDir, __field0));
}
static_assert(
    sizeof(TryLockError) == 8,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(TryLockError) == 8,
    "Verify that ADT layout didn't change since this header got generated");

// `static` constructor
inline TryLockError TryLockError::MakeWouldBlock() {
  return TryLockError(PrivateBytesTag{}, {0, 0, 0, 0, 0, 0, 0, 0});
}
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std2fs12TryLockErrorNtNtNtCs9kG8YiNG2f0_u4core3ops4drop4Drop4dropB6_u(
    ::rs::std::fs::TryLockError&);
}
inline TryLockError::~TryLockError() {
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std2fs12TryLockErrorNtNtNtCs9kG8YiNG2f0_u4core3ops4drop4Drop4dropB6_u(
          *this);
}
inline ::rs::std::fs::TryLockError::TryLockError(::crubit::UnsafeRelocateTag,
                                                 TryLockError&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std2fs12TryLockErrorNtNtCsaddbpR6HRqH_u5alloc6string8ToString9to_ustringB6_u(
    ::rs::std::fs::TryLockError const&, ::rs::alloc::string::String* __ret_ptr);
inline void TryLockError::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(TryLockError, __opaque_blob_of_bytes));
}
}  // namespace rs::std::fs

namespace rs::std::collections::hash_map {

//  The default [`Hasher`] used by [`RandomState`].
//
//  The internal algorithm is not specified, and so it and its hashes should
//  not be relied upon over releases.
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/hash/random.rs;l=94
using DefaultHasher CRUBIT_INTERNAL_RUST_TYPE(
    ":: std :: hash :: DefaultHasher") = ::rs::std::hash::DefaultHasher;
}  // namespace rs::std::collections::hash_map

namespace rs::std::hash {

static_assert(
    sizeof(DefaultHasher) == 72,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(DefaultHasher) == 8,
    "Verify that ADT layout didn't change since this header got generated");
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtNtCsb7ytMsthdgm_u3std4hash6random13DefaultHasherNtNtCs9kG8YiNG2f0_u4core7default7Default7defaultB8_u(
    ::rs::std::hash::DefaultHasher* __ret_ptr);
}
inline ::rs::std::hash::DefaultHasher::DefaultHasher() {
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtNtCsb7ytMsthdgm_u3std4hash6random13DefaultHasherNtNtCs9kG8YiNG2f0_u4core7default7Default7defaultB8_u(
          this);
}
static_assert(::std::is_trivially_destructible_v<DefaultHasher>);
static_assert(
    ::std::is_trivially_move_constructible_v<::rs::std::hash::DefaultHasher>);
static_assert(
    ::std::is_trivially_move_assignable_v<::rs::std::hash::DefaultHasher>);
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtNtCsb7ytMsthdgm_u3std4hash6random13DefaultHasherNtNtCs9kG8YiNG2f0_u4core5clone5Clone5cloneB8_u(
    ::rs::std::hash::DefaultHasher const&,
    ::rs::std::hash::DefaultHasher* __ret_ptr);
}
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtNtCsb7ytMsthdgm_u3std4hash6random13DefaultHasherNtNtCs9kG8YiNG2f0_u4core5clone5Clone10clone_ufromB8_u(
    ::rs::std::hash::DefaultHasher&, ::rs::std::hash::DefaultHasher const&);
}
inline ::rs::std::hash::DefaultHasher::DefaultHasher(
    const DefaultHasher& other) {
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtNtCsb7ytMsthdgm_u3std4hash6random13DefaultHasherNtNtCs9kG8YiNG2f0_u4core5clone5Clone5cloneB8_u(
          other, this);
}
inline ::rs::std::hash::DefaultHasher& ::rs::std::hash::DefaultHasher::
operator=(const DefaultHasher& other) {
  if (this != &other) {
    __crubit_internal::
        __crubit_thunk_818b180788380d74__uRNvYNtNtNtCsb7ytMsthdgm_u3std4hash6random13DefaultHasherNtNtCs9kG8YiNG2f0_u4core5clone5Clone10clone_ufromB8_u(
            *this, other);
  }
  return *this;
}
inline ::rs::std::hash::DefaultHasher::DefaultHasher(
    ::crubit::UnsafeRelocateTag, DefaultHasher&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMs0_uNtNtCsb7ytMsthdgm_u3std4hash6randomNtB5_u13DefaultHasher3new(
    ::rs::std::hash::DefaultHasher* __ret_ptr);
}
inline ::rs::std::hash::DefaultHasher DefaultHasher::new_() {
  crubit::Slot<::rs::std::hash::DefaultHasher> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMs0_uNtNtCsb7ytMsthdgm_u3std4hash6randomNtB5_u13DefaultHasher3new(
          __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}
inline void DefaultHasher::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(DefaultHasher, __field0));
}
}  // namespace rs::std::hash

namespace rs::std::collections::hash_map {

//  `RandomState` is the default state for [`HashMap`] types.
//
//  A particular instance `RandomState` will create the same instances of
//  [`Hasher`], but the hashers created by two different `RandomState`
//  instances are unlikely to produce the same result for the same values.
//
//  [`HashMap`]: crate::collections::HashMap
//
//  # Examples
//
//  ```
//  use std::collections::HashMap;
//  use std::hash::RandomState;
//
//  let s = RandomState::new();
//  let mut map = HashMap::with_hasher(s);
//  map.insert(1, 2);
//  ```
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/hash/random.rs;l=35
using RandomState CRUBIT_INTERNAL_RUST_TYPE(":: std :: hash :: RandomState") =
    ::rs::std::hash::RandomState;
}  // namespace rs::std::collections::hash_map

namespace rs::std::hash {

static_assert(
    sizeof(RandomState) == 16,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(RandomState) == 8,
    "Verify that ADT layout didn't change since this header got generated");
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtNtCsb7ytMsthdgm_u3std4hash6random11RandomStateNtNtCs9kG8YiNG2f0_u4core7default7Default7defaultB8_u(
    ::rs::std::hash::RandomState* __ret_ptr);
}
inline ::rs::std::hash::RandomState::RandomState() {
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtNtCsb7ytMsthdgm_u3std4hash6random11RandomStateNtNtCs9kG8YiNG2f0_u4core7default7Default7defaultB8_u(
          this);
}
static_assert(::std::is_trivially_destructible_v<RandomState>);
static_assert(
    ::std::is_trivially_move_constructible_v<::rs::std::hash::RandomState>);
static_assert(
    ::std::is_trivially_move_assignable_v<::rs::std::hash::RandomState>);
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtNtCsb7ytMsthdgm_u3std4hash6random11RandomStateNtNtCs9kG8YiNG2f0_u4core5clone5Clone5cloneB8_u(
    ::rs::std::hash::RandomState const&,
    ::rs::std::hash::RandomState* __ret_ptr);
}
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtNtCsb7ytMsthdgm_u3std4hash6random11RandomStateNtNtCs9kG8YiNG2f0_u4core5clone5Clone10clone_ufromB8_u(
    ::rs::std::hash::RandomState&, ::rs::std::hash::RandomState const&);
}
inline ::rs::std::hash::RandomState::RandomState(const RandomState& other) {
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtNtCsb7ytMsthdgm_u3std4hash6random11RandomStateNtNtCs9kG8YiNG2f0_u4core5clone5Clone5cloneB8_u(
          other, this);
}
inline ::rs::std::hash::RandomState& ::rs::std::hash::RandomState::operator=(
    const RandomState& other) {
  if (this != &other) {
    __crubit_internal::
        __crubit_thunk_818b180788380d74__uRNvYNtNtNtCsb7ytMsthdgm_u3std4hash6random11RandomStateNtNtCs9kG8YiNG2f0_u4core5clone5Clone10clone_ufromB8_u(
            *this, other);
  }
  return *this;
}
inline ::rs::std::hash::RandomState::RandomState(::crubit::UnsafeRelocateTag,
                                                 RandomState&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMNtNtCsb7ytMsthdgm_u3std4hash6randomNtB2_u11RandomState3new(
    ::rs::std::hash::RandomState* __ret_ptr);
}
inline ::rs::std::hash::RandomState RandomState::new_() {
  crubit::Slot<::rs::std::hash::RandomState> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMNtNtCsb7ytMsthdgm_u3std4hash6randomNtB2_u11RandomState3new(
          __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}
inline void RandomState::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(RandomState, k0));
  static_assert(8 == offsetof(RandomState, k1));
}
}  // namespace rs::std::hash

namespace rs::std::io {

static_assert(
    sizeof(PipeReader) == 4,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(PipeReader) == 4,
    "Verify that ADT layout didn't change since this header got generated");
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtNtCsb7ytMsthdgm_u3std2io4pipe10PipeReaderNtNtNtCs9kG8YiNG2f0_u4core3ops4drop4Drop4dropB8_u(
    ::rs::std::io::PipeReader&);
}
inline PipeReader::~PipeReader() {
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtNtCsb7ytMsthdgm_u3std2io4pipe10PipeReaderNtNtNtCs9kG8YiNG2f0_u4core3ops4drop4Drop4dropB8_u(
          *this);
}
inline ::rs::std::io::PipeReader::PipeReader(::crubit::UnsafeRelocateTag,
                                             PipeReader&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMs2_uNtNtCsb7ytMsthdgm_u3std2io4pipeNtB5_u10PipeReader9try_uclone(
    ::rs::std::io::PipeReader const&,
    rs_std::Result<::rs::std::io::PipeReader, ::rs::std::io::Error>* __ret_ptr);
}
inline rs_std::Result<::rs::std::io::PipeReader, ::rs::std::io::Error>
PipeReader::try_clone() const {
  auto&& self = *this;
  crubit::Slot<rs_std::Result<::rs::std::io::PipeReader, ::rs::std::io::Error>>
      __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMs2_uNtNtCsb7ytMsthdgm_u3std2io4pipeNtB5_u10PipeReader9try_uclone(
          self, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}
inline void PipeReader::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(PipeReader, __field0));
}
static_assert(
    sizeof(PipeWriter) == 4,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(PipeWriter) == 4,
    "Verify that ADT layout didn't change since this header got generated");
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtNtCsb7ytMsthdgm_u3std2io4pipe10PipeWriterNtNtNtCs9kG8YiNG2f0_u4core3ops4drop4Drop4dropB8_u(
    ::rs::std::io::PipeWriter&);
}
inline PipeWriter::~PipeWriter() {
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtNtCsb7ytMsthdgm_u3std2io4pipe10PipeWriterNtNtNtCs9kG8YiNG2f0_u4core3ops4drop4Drop4dropB8_u(
          *this);
}
inline ::rs::std::io::PipeWriter::PipeWriter(::crubit::UnsafeRelocateTag,
                                             PipeWriter&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMs3_uNtNtCsb7ytMsthdgm_u3std2io4pipeNtB5_u10PipeWriter9try_uclone(
    ::rs::std::io::PipeWriter const&,
    rs_std::Result<::rs::std::io::PipeWriter, ::rs::std::io::Error>* __ret_ptr);
}
inline rs_std::Result<::rs::std::io::PipeWriter, ::rs::std::io::Error>
PipeWriter::try_clone() const {
  auto&& self = *this;
  crubit::Slot<rs_std::Result<::rs::std::io::PipeWriter, ::rs::std::io::Error>>
      __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMs3_uNtNtCsb7ytMsthdgm_u3std2io4pipeNtB5_u10PipeWriter9try_uclone(
          self, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}
inline void PipeWriter::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(PipeWriter, __field0));
}
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvNtNtCsb7ytMsthdgm_u3std2io4pipe4pipe(
    rs_std::Result<
        rs_std::Tuple<::rs::std::io::PipeReader, ::rs::std::io::PipeWriter>,
        ::rs::std::io::Error>* __ret_ptr);
}
inline rs_std::Result<
    rs_std::Tuple<::rs::std::io::PipeReader, ::rs::std::io::PipeWriter>,
    ::rs::std::io::Error>
pipe() {
  crubit::Slot<rs_std::Result<
      rs_std::Tuple<::rs::std::io::PipeReader, ::rs::std::io::PipeWriter>,
      ::rs::std::io::Error>>
      __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvNtNtCsb7ytMsthdgm_u3std2io4pipe4pipe(
          __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

}  // namespace rs::std::io

namespace rs::std::io {

static_assert(
    sizeof(Stderr) == 8,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(Stderr) == 8,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(::std::is_trivially_destructible_v<Stderr>);
static_assert(::std::is_trivially_move_constructible_v<::rs::std::io::Stderr>);
static_assert(::std::is_trivially_move_assignable_v<::rs::std::io::Stderr>);
inline ::rs::std::io::Stderr::Stderr(::crubit::UnsafeRelocateTag,
                                     Stderr&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMsk_uNtNtCsb7ytMsthdgm_u3std2io5stdioNtB5_u6Stderr4lock(
    ::rs::std::io::Stderr const&, ::rs::std::io::StderrLock* __ret_ptr);
}
inline ::rs::std::io::StderrLock Stderr::lock() const {
  auto&& self = *this;
  crubit::Slot<::rs::std::io::StderrLock> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMsk_uNtNtCsb7ytMsthdgm_u3std2io5stdioNtB5_u6Stderr4lock(
          self, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtNtCsb7ytMsthdgm_u3std2io5stdio6StderrINtNtCs9kG8YiNG2f0_u4core7convert4IntoNtNtB8_u7process5StdioE4intoB8_u(
    ::rs::std::io::Stderr*, ::rs::std::process::Stdio* __ret_ptr);
}
inline Stderr::operator ::rs::std::process::Stdio() {
  auto&& self = *this;
  crubit::Slot<::rs::std::process::Stdio> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtNtCsb7ytMsthdgm_u3std2io5stdio6StderrINtNtCs9kG8YiNG2f0_u4core7convert4IntoNtNtB8_u7process5StdioE4intoB8_u(
          &self, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}
inline void Stderr::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(Stderr, inner));
}
static_assert(
    sizeof(StderrLock) == 8,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(StderrLock) == 8,
    "Verify that ADT layout didn't change since this header got generated");
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtNtCsb7ytMsthdgm_u3std2io5stdio10StderrLockNtNtNtCs9kG8YiNG2f0_u4core3ops4drop4Drop4dropB8_u(
    ::rs::std::io::StderrLock&);
}
inline StderrLock::~StderrLock() {
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtNtCsb7ytMsthdgm_u3std2io5stdio10StderrLockNtNtNtCs9kG8YiNG2f0_u4core3ops4drop4Drop4dropB8_u(
          *this);
}
inline ::rs::std::io::StderrLock::StderrLock(::crubit::UnsafeRelocateTag,
                                             StderrLock&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}
inline void StderrLock::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(StderrLock, inner));
}
static_assert(
    sizeof(Stdin) == 8,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(Stdin) == 8,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(::std::is_trivially_destructible_v<Stdin>);
static_assert(::std::is_trivially_move_constructible_v<::rs::std::io::Stdin>);
static_assert(::std::is_trivially_move_assignable_v<::rs::std::io::Stdin>);
inline ::rs::std::io::Stdin::Stdin(::crubit::UnsafeRelocateTag, Stdin&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMs1_uNtNtCsb7ytMsthdgm_u3std2io5stdioNtB5_u5Stdin4lock(
    ::rs::std::io::Stdin const&, ::rs::std::io::StdinLock* __ret_ptr);
}
inline ::rs::std::io::StdinLock Stdin::lock() const {
  auto&& self = *this;
  crubit::Slot<::rs::std::io::StdinLock> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMs1_uNtNtCsb7ytMsthdgm_u3std2io5stdioNtB5_u5Stdin4lock(
          self, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}
inline void Stdin::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(Stdin, inner));
}
static_assert(
    sizeof(StdinLock) == 8,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(StdinLock) == 8,
    "Verify that ADT layout didn't change since this header got generated");
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtNtCsb7ytMsthdgm_u3std2io5stdio9StdinLockNtNtNtCs9kG8YiNG2f0_u4core3ops4drop4Drop4dropB8_u(
    ::rs::std::io::StdinLock&);
}
inline StdinLock::~StdinLock() {
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtNtCsb7ytMsthdgm_u3std2io5stdio9StdinLockNtNtNtCs9kG8YiNG2f0_u4core3ops4drop4Drop4dropB8_u(
          *this);
}
inline ::rs::std::io::StdinLock::StdinLock(::crubit::UnsafeRelocateTag,
                                           StdinLock&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}
inline void StdinLock::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(StdinLock, inner));
}
static_assert(
    sizeof(Stdout) == 8,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(Stdout) == 8,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(::std::is_trivially_destructible_v<Stdout>);
static_assert(::std::is_trivially_move_constructible_v<::rs::std::io::Stdout>);
static_assert(::std::is_trivially_move_assignable_v<::rs::std::io::Stdout>);
inline ::rs::std::io::Stdout::Stdout(::crubit::UnsafeRelocateTag,
                                     Stdout&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMsa_uNtNtCsb7ytMsthdgm_u3std2io5stdioNtB5_u6Stdout4lock(
    ::rs::std::io::Stdout const&, ::rs::std::io::StdoutLock* __ret_ptr);
}
inline ::rs::std::io::StdoutLock Stdout::lock() const {
  auto&& self = *this;
  crubit::Slot<::rs::std::io::StdoutLock> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMsa_uNtNtCsb7ytMsthdgm_u3std2io5stdioNtB5_u6Stdout4lock(
          self, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtNtCsb7ytMsthdgm_u3std2io5stdio6StdoutINtNtCs9kG8YiNG2f0_u4core7convert4IntoNtNtB8_u7process5StdioE4intoB8_u(
    ::rs::std::io::Stdout*, ::rs::std::process::Stdio* __ret_ptr);
}
inline Stdout::operator ::rs::std::process::Stdio() {
  auto&& self = *this;
  crubit::Slot<::rs::std::process::Stdio> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtNtCsb7ytMsthdgm_u3std2io5stdio6StdoutINtNtCs9kG8YiNG2f0_u4core7convert4IntoNtNtB8_u7process5StdioE4intoB8_u(
          &self, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}
inline void Stdout::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(Stdout, inner));
}
static_assert(
    sizeof(StdoutLock) == 8,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(StdoutLock) == 8,
    "Verify that ADT layout didn't change since this header got generated");
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtNtCsb7ytMsthdgm_u3std2io5stdio10StdoutLockNtNtNtCs9kG8YiNG2f0_u4core3ops4drop4Drop4dropB8_u(
    ::rs::std::io::StdoutLock&);
}
inline StdoutLock::~StdoutLock() {
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtNtCsb7ytMsthdgm_u3std2io5stdio10StdoutLockNtNtNtCs9kG8YiNG2f0_u4core3ops4drop4Drop4dropB8_u(
          *this);
}
inline ::rs::std::io::StdoutLock::StdoutLock(::crubit::UnsafeRelocateTag,
                                             StdoutLock&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}
inline void StdoutLock::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(StdoutLock, inner));
}
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvNtNtCsb7ytMsthdgm_u3std2io5stdio6stderr(
    ::rs::std::io::Stderr* __ret_ptr);
}
inline ::rs::std::io::Stderr stderr() {
  crubit::Slot<::rs::std::io::Stderr> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvNtNtCsb7ytMsthdgm_u3std2io5stdio6stderr(
          __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvNtNtCsb7ytMsthdgm_u3std2io5stdio5stdin(
    ::rs::std::io::Stdin* __ret_ptr);
}
inline ::rs::std::io::Stdin stdin() {
  crubit::Slot<::rs::std::io::Stdin> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvNtNtCsb7ytMsthdgm_u3std2io5stdio5stdin(
          __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvNtNtCsb7ytMsthdgm_u3std2io5stdio6stdout(
    ::rs::std::io::Stdout* __ret_ptr);
}
inline ::rs::std::io::Stdout stdout() {
  crubit::Slot<::rs::std::io::Stdout> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvNtNtCsb7ytMsthdgm_u3std2io5stdio6stdout(
          __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

}  // namespace rs::std::io

namespace rs::std::ffi {

// Equivalent to C's `char` type.
//
// [C's `char` type] is completely unlike [Rust's `char` type]; while Rust's
// type represents a unicode scalar value, C's `char` type is just an ordinary
// integer. On modern architectures this type will always be either [`i8`] or
// [`u8`], as they use byte-addressed memory with 8-bit bytes.
//
// C chars are most commonly used to make C strings. Unlike Rust, where the
// length of a string is included alongside the string, C strings mark the end
// of a string with the character `'\\0'`. See `CStr` for more information.
//
// [C's `char` type]: https://en.wikipedia.org/wiki/C_data_types#Basic_types
// [Rust's `char` type]: char
//
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ffi/primitives.rs;l=14
using c_char CRUBIT_INTERNAL_RUST_TYPE(":: core :: ffi :: c_char") =
    ::std::uint8_t;
// Equivalent to C's `double` type.
//
// This type will almost always be [`f64`], which is guaranteed to be an [IEEE
// 754 double-precision float] in Rust. That said, the standard technically only
// guarantees that it be a floating-point number with at least the precision of
// a [`float`]; some 16-bit systems use [`f32`], for example. Esoteric systems
// could use something entirely different from the IEEE-754 standard.
//
// [IEEE 754 double-precision float]: https://en.wikipedia.org/wiki/IEEE_754
// [`float`]: c_float
//
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ffi/primitives.rs;l=14
using c_double CRUBIT_INTERNAL_RUST_TYPE(":: core :: ffi :: c_double") = double;
// Equivalent to C's `float` type.
//
// This type will almost always be [`f32`], which is guaranteed to be an [IEEE
// 754 single-precision float] in Rust. That said, the standard technically only
// guarantees that it be a floating-point number, and it may have less precision
// than `f32` or not follow the IEEE-754 standard at all.
//
// [IEEE 754 single-precision float]: https://en.wikipedia.org/wiki/IEEE_754
//
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ffi/primitives.rs;l=14
using c_float CRUBIT_INTERNAL_RUST_TYPE(":: core :: ffi :: c_float") = float;
// Equivalent to C's `signed int` (`int`) type.
//
// This type will almost always be [`i32`], but may differ on some esoteric
// systems. The C standard technically only requires that this type be a signed
// integer that is at least the size of a [`short`]; some systems define it as
// an [`i16`], for example.
//
// [`short`]: c_short
//
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ffi/primitives.rs;l=14
using c_int CRUBIT_INTERNAL_RUST_TYPE(":: core :: ffi :: c_int") =
    ::std::int32_t;
// Equivalent to C's `signed long` (`long`) type.
//
// This type will always be [`i32`] or [`i64`]. Most notably, many Linux-based
// systems assume an `i64`, but Windows assumes `i32`. The C standard
// technically only requires that this type be a signed integer that is at least
// 32 bits and at least the size of an [`int`], although in practice, no system
// would have a `long` that is neither an `i32` nor `i64`.
//
// [`int`]: c_int
//
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ffi/primitives.rs;l=14
using c_long CRUBIT_INTERNAL_RUST_TYPE(":: core :: ffi :: c_long") =
    ::std::int64_t;
// Equivalent to C's `signed long long` (`long long`) type.
//
// This type will almost always be [`i64`], but may differ on some systems. The
// C standard technically only requires that this type be a signed integer that
// is at least 64 bits and at least the size of a [`long`], although in
// practice, no system would have a `long long` that is not an `i64`, as most
// systems do not have a standardised [`i128`] type.
//
// [`long`]: c_long
//
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ffi/primitives.rs;l=14
using c_longlong CRUBIT_INTERNAL_RUST_TYPE(":: core :: ffi :: c_longlong") =
    ::std::int64_t;
// Equivalent to C's `signed char` type.
//
// This type will always be [`i8`], but is included for completeness. It is
// defined as being a signed integer the same size as a C [`char`].
//
// [`char`]: c_char
//
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ffi/primitives.rs;l=14
using c_schar CRUBIT_INTERNAL_RUST_TYPE(":: core :: ffi :: c_schar") =
    ::std::int8_t;
// Equivalent to C's `signed short` (`short`) type.
//
// This type will almost always be [`i16`], but may differ on some esoteric
// systems. The C standard technically only requires that this type be a signed
// integer with at least 16 bits; some systems may define it as `i32`, for
// example.
//
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ffi/primitives.rs;l=14
using c_short CRUBIT_INTERNAL_RUST_TYPE(":: core :: ffi :: c_short") =
    ::std::int16_t;
// Equivalent to C's `unsigned char` type.
//
// This type will always be [`u8`], but is included for completeness. It is
// defined as being an unsigned integer the same size as a C [`char`].
//
// [`char`]: c_char
//
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ffi/primitives.rs;l=14
using c_uchar CRUBIT_INTERNAL_RUST_TYPE(":: core :: ffi :: c_uchar") =
    ::std::uint8_t;
// Equivalent to C's `unsigned int` type.
//
// This type will almost always be [`u32`], but may differ on some esoteric
// systems. The C standard technically only requires that this type be an
// unsigned integer with the same size as an [`int`]; some systems define it as
// a [`u16`], for example.
//
// [`int`]: c_int
//
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ffi/primitives.rs;l=14
using c_uint CRUBIT_INTERNAL_RUST_TYPE(":: core :: ffi :: c_uint") =
    ::std::uint32_t;
// Equivalent to C's `unsigned long` type.
//
// This type will always be [`u32`] or [`u64`]. Most notably, many Linux-based
// systems assume a `u64`, but Windows assumes `u32`. The C standard technically
// only requires that this type be an unsigned integer with the size of a
// [`long`], although in practice, no system would have a `ulong` that is
// neither a `u32` nor `u64`.
//
// [`long`]: c_long
//
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ffi/primitives.rs;l=14
using c_ulong CRUBIT_INTERNAL_RUST_TYPE(":: core :: ffi :: c_ulong") =
    ::std::uint64_t;
// Equivalent to C's `unsigned long long` type.
//
// This type will almost always be [`u64`], but may differ on some systems. The
// C standard technically only requires that this type be an unsigned integer
// with the size of a [`long long`], although in practice, no system would have
// a `long long` that is not a `u64`, as most systems do not have a standardised
// [`u128`] type.
//
// [`long long`]: c_longlong
//
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ffi/primitives.rs;l=14
using c_ulonglong CRUBIT_INTERNAL_RUST_TYPE(":: core :: ffi :: c_ulonglong") =
    ::std::uint64_t;
// Equivalent to C's `unsigned short` type.
//
// This type will almost always be [`u16`], but may differ on some esoteric
// systems. The C standard technically only requires that this type be an
// unsigned integer with the same size as a [`short`].
//
// [`short`]: c_short
//
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ffi/primitives.rs;l=14
using c_ushort CRUBIT_INTERNAL_RUST_TYPE(":: core :: ffi :: c_ushort") =
    ::std::uint16_t;
}  // namespace rs::std::ffi

namespace rs::std::ffi {

// Equivalent to C's `void` type when used as a [pointer].
//
// In essence, `*const c_void` is equivalent to C's `const void*`
// and `*mut c_void` is equivalent to C's `void*`. That said, this is
// *not* the same as C's `void` return type, which is Rust's `()` type.
//
// To model pointers to opaque types in FFI, until `extern type` is
// stabilized, it is recommended to use a newtype wrapper around an empty
// byte array. See the [Nomicon] for details.
//
// One could use `std::os::raw::c_void` if they want to support old Rust
// compilers down to 1.1.0. After Rust 1.30.0, it was re-exported by
// this definition. For more information, please read [RFC 2521].
//
// [Nomicon]:
// https://doc.rust-lang.org/nomicon/ffi.html#representing-opaque-structs [RFC
// 2521]:
// https://github.com/rust-lang/rfcs/blob/master/text/2521-c_void-reunification.md
//
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ffi/mod.rs;l=51
using c_void CRUBIT_INTERNAL_RUST_TYPE(":: core :: ffi :: c_void") =
    ::rs::core::ffi::c_void;
}  // namespace rs::std::ffi

namespace rs::std::net {

static_assert(
    sizeof(Shutdown) == 1,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(Shutdown) == 1,
    "Verify that ADT layout didn't change since this header got generated");

// `static` constructor
inline constexpr Shutdown Shutdown::MakeRead() {
  return Shutdown(PrivateBytesTag{}, {0});
}

// `static` constructor
inline constexpr Shutdown Shutdown::MakeWrite() {
  return Shutdown(PrivateBytesTag{}, {1});
}

// `static` constructor
inline constexpr Shutdown Shutdown::MakeBoth() {
  return Shutdown(PrivateBytesTag{}, {2});
}
static_assert(::std::is_trivially_destructible_v<Shutdown>);
static_assert(
    ::std::is_trivially_move_constructible_v<::rs::std::net::Shutdown>);
static_assert(::std::is_trivially_move_assignable_v<::rs::std::net::Shutdown>);
static_assert(
    ::std::is_trivially_copy_constructible_v<::rs::std::net::Shutdown>);
static_assert(::std::is_trivially_copy_assignable_v<::rs::std::net::Shutdown>);
inline ::rs::std::net::Shutdown::Shutdown(::crubit::UnsafeRelocateTag,
                                          Shutdown&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}

namespace __crubit_internal {
extern "C" bool
__crubit_thunk_818b180788380d74__uRNvXs2_uNtCsb7ytMsthdgm_u3std3netNtB5_u8ShutdownNtNtCs9kG8YiNG2f0_u4core3cmp9PartialEq2eq(
    ::rs::std::net::Shutdown const&, ::rs::std::net::Shutdown const&);
}
inline bool Shutdown::operator==(::rs::std::net::Shutdown const& other) const {
  auto&& self = *this;
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXs2_uNtCsb7ytMsthdgm_u3std3netNtB5_u8ShutdownNtNtCs9kG8YiNG2f0_u4core3cmp9PartialEq2eq(
          self, other);
}
inline void Shutdown::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(Shutdown, __opaque_blob_of_bytes));
}
}  // namespace rs::std::net

namespace rs::std::net {

static_assert(
    sizeof(Incoming) == 8,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(Incoming) == 8,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(::std::is_trivially_destructible_v<Incoming>);
static_assert(
    ::std::is_trivially_move_constructible_v<::rs::std::net::Incoming>);
static_assert(::std::is_trivially_move_assignable_v<::rs::std::net::Incoming>);
inline ::rs::std::net::Incoming::Incoming(::crubit::UnsafeRelocateTag,
                                          Incoming&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}
inline void Incoming::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(Incoming, listener));
}
static_assert(
    sizeof(TcpListener) == 4,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(TcpListener) == 4,
    "Verify that ADT layout didn't change since this header got generated");
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtNtCsb7ytMsthdgm_u3std3net3tcp11TcpListenerNtNtNtCs9kG8YiNG2f0_u4core3ops4drop4Drop4dropB8_u(
    ::rs::std::net::TcpListener&);
}
inline TcpListener::~TcpListener() {
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtNtCsb7ytMsthdgm_u3std3net3tcp11TcpListenerNtNtNtCs9kG8YiNG2f0_u4core3ops4drop4Drop4dropB8_u(
          *this);
}
inline ::rs::std::net::TcpListener::TcpListener(::crubit::UnsafeRelocateTag,
                                                TcpListener&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMs7_uNtNtCsb7ytMsthdgm_u3std3net3tcpNtB5_u11TcpListener10local_uaddr(
    ::rs::std::net::TcpListener const&,
    rs_std::Result<::rs::core::net::SocketAddr, ::rs::std::io::Error>*
        __ret_ptr);
}
inline rs_std::Result<::rs::core::net::SocketAddr, ::rs::std::io::Error>
TcpListener::local_addr() const {
  auto&& self = *this;
  crubit::Slot<
      rs_std::Result<::rs::core::net::SocketAddr, ::rs::std::io::Error>>
      __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMs7_uNtNtCsb7ytMsthdgm_u3std3net3tcpNtB5_u11TcpListener10local_uaddr(
          self, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMs7_uNtNtCsb7ytMsthdgm_u3std3net3tcpNtB5_u11TcpListener9try_uclone(
    ::rs::std::net::TcpListener const&,
    rs_std::Result<::rs::std::net::TcpListener, ::rs::std::io::Error>*
        __ret_ptr);
}
inline rs_std::Result<::rs::std::net::TcpListener, ::rs::std::io::Error>
TcpListener::try_clone() const {
  auto&& self = *this;
  crubit::Slot<
      rs_std::Result<::rs::std::net::TcpListener, ::rs::std::io::Error>>
      __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMs7_uNtNtCsb7ytMsthdgm_u3std3net3tcpNtB5_u11TcpListener9try_uclone(
          self, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMs7_uNtNtCsb7ytMsthdgm_u3std3net3tcpNtB5_u11TcpListener6accept(
    ::rs::std::net::TcpListener const&,
    rs_std::Result<
        rs_std::Tuple<::rs::std::net::TcpStream, ::rs::core::net::SocketAddr>,
        ::rs::std::io::Error>* __ret_ptr);
}
inline rs_std::Result<
    rs_std::Tuple<::rs::std::net::TcpStream, ::rs::core::net::SocketAddr>,
    ::rs::std::io::Error>
TcpListener::accept() const {
  auto&& self = *this;
  crubit::Slot<rs_std::Result<
      rs_std::Tuple<::rs::std::net::TcpStream, ::rs::core::net::SocketAddr>,
      ::rs::std::io::Error>>
      __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMs7_uNtNtCsb7ytMsthdgm_u3std3net3tcpNtB5_u11TcpListener6accept(
          self, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMs7_uNtNtCsb7ytMsthdgm_u3std3net3tcpNtB5_u11TcpListener8incoming(
    ::rs::std::net::TcpListener const&, ::rs::std::net::Incoming* __ret_ptr);
}
inline ::rs::std::net::Incoming TcpListener::incoming() const& $(__anon1)
    CRUBIT_LIFETIME_BOUND {
  auto&& self = *this;
  crubit::Slot<::rs::std::net::Incoming> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMs7_uNtNtCsb7ytMsthdgm_u3std3net3tcpNtB5_u11TcpListener8incoming(
          self, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMs7_uNtNtCsb7ytMsthdgm_u3std3net3tcpNtB5_u11TcpListener3ttl(
    ::rs::std::net::TcpListener const&,
    rs_std::Result<::std::uint32_t, ::rs::std::io::Error>* __ret_ptr);
}
inline rs_std::Result<::std::uint32_t, ::rs::std::io::Error> TcpListener::ttl()
    const {
  auto&& self = *this;
  crubit::Slot<rs_std::Result<::std::uint32_t, ::rs::std::io::Error>>
      __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMs7_uNtNtCsb7ytMsthdgm_u3std3net3tcpNtB5_u11TcpListener3ttl(
          self, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMs7_uNtNtCsb7ytMsthdgm_u3std3net3tcpNtB5_u11TcpListener7only_uv6(
    ::rs::std::net::TcpListener const&,
    rs_std::Result<bool, ::rs::std::io::Error>* __ret_ptr);
}
inline rs_std::Result<bool, ::rs::std::io::Error> TcpListener::only_v6() const {
  auto&& self = *this;
  crubit::Slot<rs_std::Result<bool, ::rs::std::io::Error>>
      __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMs7_uNtNtCsb7ytMsthdgm_u3std3net3tcpNtB5_u11TcpListener7only_uv6(
          self, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}
inline void TcpListener::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(TcpListener, __field0));
}
static_assert(
    sizeof(TcpStream) == 4,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(TcpStream) == 4,
    "Verify that ADT layout didn't change since this header got generated");
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtNtCsb7ytMsthdgm_u3std3net3tcp9TcpStreamNtNtNtCs9kG8YiNG2f0_u4core3ops4drop4Drop4dropB8_u(
    ::rs::std::net::TcpStream&);
}
inline TcpStream::~TcpStream() {
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtNtCsb7ytMsthdgm_u3std3net3tcp9TcpStreamNtNtNtCs9kG8YiNG2f0_u4core3ops4drop4Drop4dropB8_u(
          *this);
}
inline ::rs::std::net::TcpStream::TcpStream(::crubit::UnsafeRelocateTag,
                                            TcpStream&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMNtNtCsb7ytMsthdgm_u3std3net3tcpNtB2_u9TcpStream15connect_utimeout(
    ::rs::core::net::SocketAddr const&, ::rs::core::time::Duration*,
    rs_std::Result<::rs::std::net::TcpStream, ::rs::std::io::Error>* __ret_ptr);
}
inline rs_std::Result<::rs::std::net::TcpStream, ::rs::std::io::Error>
TcpStream::connect_timeout(::rs::core::net::SocketAddr const& addr,
                           ::rs::core::time::Duration timeout) {
  crubit::Slot<rs_std::Result<::rs::std::net::TcpStream, ::rs::std::io::Error>>
      __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMNtNtCsb7ytMsthdgm_u3std3net3tcpNtB2_u9TcpStream15connect_utimeout(
          addr, &timeout, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMNtNtCsb7ytMsthdgm_u3std3net3tcpNtB2_u9TcpStream9peer_uaddr(
    ::rs::std::net::TcpStream const&,
    rs_std::Result<::rs::core::net::SocketAddr, ::rs::std::io::Error>*
        __ret_ptr);
}
inline rs_std::Result<::rs::core::net::SocketAddr, ::rs::std::io::Error>
TcpStream::peer_addr() const {
  auto&& self = *this;
  crubit::Slot<
      rs_std::Result<::rs::core::net::SocketAddr, ::rs::std::io::Error>>
      __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMNtNtCsb7ytMsthdgm_u3std3net3tcpNtB2_u9TcpStream9peer_uaddr(
          self, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMNtNtCsb7ytMsthdgm_u3std3net3tcpNtB2_u9TcpStream10local_uaddr(
    ::rs::std::net::TcpStream const&,
    rs_std::Result<::rs::core::net::SocketAddr, ::rs::std::io::Error>*
        __ret_ptr);
}
inline rs_std::Result<::rs::core::net::SocketAddr, ::rs::std::io::Error>
TcpStream::local_addr() const {
  auto&& self = *this;
  crubit::Slot<
      rs_std::Result<::rs::core::net::SocketAddr, ::rs::std::io::Error>>
      __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMNtNtCsb7ytMsthdgm_u3std3net3tcpNtB2_u9TcpStream10local_uaddr(
          self, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMNtNtCsb7ytMsthdgm_u3std3net3tcpNtB2_u9TcpStream9try_uclone(
    ::rs::std::net::TcpStream const&,
    rs_std::Result<::rs::std::net::TcpStream, ::rs::std::io::Error>* __ret_ptr);
}
inline rs_std::Result<::rs::std::net::TcpStream, ::rs::std::io::Error>
TcpStream::try_clone() const {
  auto&& self = *this;
  crubit::Slot<rs_std::Result<::rs::std::net::TcpStream, ::rs::std::io::Error>>
      __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMNtNtCsb7ytMsthdgm_u3std3net3tcpNtB2_u9TcpStream9try_uclone(
          self, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMNtNtCsb7ytMsthdgm_u3std3net3tcpNtB2_u9TcpStream12read_utimeout(
    ::rs::std::net::TcpStream const&,
    rs_std::Result<rs_std::Option<::rs::core::time::Duration>,
                   ::rs::std::io::Error>* __ret_ptr);
}
inline rs_std::Result<rs_std::Option<::rs::core::time::Duration>,
                      ::rs::std::io::Error>
TcpStream::read_timeout() const {
  auto&& self = *this;
  crubit::Slot<rs_std::Result<rs_std::Option<::rs::core::time::Duration>,
                              ::rs::std::io::Error>>
      __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMNtNtCsb7ytMsthdgm_u3std3net3tcpNtB2_u9TcpStream12read_utimeout(
          self, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMNtNtCsb7ytMsthdgm_u3std3net3tcpNtB2_u9TcpStream13write_utimeout(
    ::rs::std::net::TcpStream const&,
    rs_std::Result<rs_std::Option<::rs::core::time::Duration>,
                   ::rs::std::io::Error>* __ret_ptr);
}
inline rs_std::Result<rs_std::Option<::rs::core::time::Duration>,
                      ::rs::std::io::Error>
TcpStream::write_timeout() const {
  auto&& self = *this;
  crubit::Slot<rs_std::Result<rs_std::Option<::rs::core::time::Duration>,
                              ::rs::std::io::Error>>
      __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMNtNtCsb7ytMsthdgm_u3std3net3tcpNtB2_u9TcpStream13write_utimeout(
          self, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMNtNtCsb7ytMsthdgm_u3std3net3tcpNtB2_u9TcpStream7nodelay(
    ::rs::std::net::TcpStream const&,
    rs_std::Result<bool, ::rs::std::io::Error>* __ret_ptr);
}
inline rs_std::Result<bool, ::rs::std::io::Error> TcpStream::nodelay() const {
  auto&& self = *this;
  crubit::Slot<rs_std::Result<bool, ::rs::std::io::Error>>
      __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMNtNtCsb7ytMsthdgm_u3std3net3tcpNtB2_u9TcpStream7nodelay(
          self, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMNtNtCsb7ytMsthdgm_u3std3net3tcpNtB2_u9TcpStream3ttl(
    ::rs::std::net::TcpStream const&,
    rs_std::Result<::std::uint32_t, ::rs::std::io::Error>* __ret_ptr);
}
inline rs_std::Result<::std::uint32_t, ::rs::std::io::Error> TcpStream::ttl()
    const {
  auto&& self = *this;
  crubit::Slot<rs_std::Result<::std::uint32_t, ::rs::std::io::Error>>
      __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMNtNtCsb7ytMsthdgm_u3std3net3tcpNtB2_u9TcpStream3ttl(
          self, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}
inline void TcpStream::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(TcpStream, __field0));
}
}  // namespace rs::std::net

namespace rs::std::net {

static_assert(
    sizeof(UdpSocket) == 4,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(UdpSocket) == 4,
    "Verify that ADT layout didn't change since this header got generated");
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtNtCsb7ytMsthdgm_u3std3net3udp9UdpSocketNtNtNtCs9kG8YiNG2f0_u4core3ops4drop4Drop4dropB8_u(
    ::rs::std::net::UdpSocket&);
}
inline UdpSocket::~UdpSocket() {
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtNtCsb7ytMsthdgm_u3std3net3udp9UdpSocketNtNtNtCs9kG8YiNG2f0_u4core3ops4drop4Drop4dropB8_u(
          *this);
}
inline ::rs::std::net::UdpSocket::UdpSocket(::crubit::UnsafeRelocateTag,
                                            UdpSocket&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMNtNtCsb7ytMsthdgm_u3std3net3udpNtB2_u9UdpSocket9peer_uaddr(
    ::rs::std::net::UdpSocket const&,
    rs_std::Result<::rs::core::net::SocketAddr, ::rs::std::io::Error>*
        __ret_ptr);
}
inline rs_std::Result<::rs::core::net::SocketAddr, ::rs::std::io::Error>
UdpSocket::peer_addr() const {
  auto&& self = *this;
  crubit::Slot<
      rs_std::Result<::rs::core::net::SocketAddr, ::rs::std::io::Error>>
      __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMNtNtCsb7ytMsthdgm_u3std3net3udpNtB2_u9UdpSocket9peer_uaddr(
          self, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMNtNtCsb7ytMsthdgm_u3std3net3udpNtB2_u9UdpSocket10local_uaddr(
    ::rs::std::net::UdpSocket const&,
    rs_std::Result<::rs::core::net::SocketAddr, ::rs::std::io::Error>*
        __ret_ptr);
}
inline rs_std::Result<::rs::core::net::SocketAddr, ::rs::std::io::Error>
UdpSocket::local_addr() const {
  auto&& self = *this;
  crubit::Slot<
      rs_std::Result<::rs::core::net::SocketAddr, ::rs::std::io::Error>>
      __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMNtNtCsb7ytMsthdgm_u3std3net3udpNtB2_u9UdpSocket10local_uaddr(
          self, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMNtNtCsb7ytMsthdgm_u3std3net3udpNtB2_u9UdpSocket9try_uclone(
    ::rs::std::net::UdpSocket const&,
    rs_std::Result<::rs::std::net::UdpSocket, ::rs::std::io::Error>* __ret_ptr);
}
inline rs_std::Result<::rs::std::net::UdpSocket, ::rs::std::io::Error>
UdpSocket::try_clone() const {
  auto&& self = *this;
  crubit::Slot<rs_std::Result<::rs::std::net::UdpSocket, ::rs::std::io::Error>>
      __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMNtNtCsb7ytMsthdgm_u3std3net3udpNtB2_u9UdpSocket9try_uclone(
          self, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMNtNtCsb7ytMsthdgm_u3std3net3udpNtB2_u9UdpSocket12read_utimeout(
    ::rs::std::net::UdpSocket const&,
    rs_std::Result<rs_std::Option<::rs::core::time::Duration>,
                   ::rs::std::io::Error>* __ret_ptr);
}
inline rs_std::Result<rs_std::Option<::rs::core::time::Duration>,
                      ::rs::std::io::Error>
UdpSocket::read_timeout() const {
  auto&& self = *this;
  crubit::Slot<rs_std::Result<rs_std::Option<::rs::core::time::Duration>,
                              ::rs::std::io::Error>>
      __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMNtNtCsb7ytMsthdgm_u3std3net3udpNtB2_u9UdpSocket12read_utimeout(
          self, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMNtNtCsb7ytMsthdgm_u3std3net3udpNtB2_u9UdpSocket13write_utimeout(
    ::rs::std::net::UdpSocket const&,
    rs_std::Result<rs_std::Option<::rs::core::time::Duration>,
                   ::rs::std::io::Error>* __ret_ptr);
}
inline rs_std::Result<rs_std::Option<::rs::core::time::Duration>,
                      ::rs::std::io::Error>
UdpSocket::write_timeout() const {
  auto&& self = *this;
  crubit::Slot<rs_std::Result<rs_std::Option<::rs::core::time::Duration>,
                              ::rs::std::io::Error>>
      __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMNtNtCsb7ytMsthdgm_u3std3net3udpNtB2_u9UdpSocket13write_utimeout(
          self, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMNtNtCsb7ytMsthdgm_u3std3net3udpNtB2_u9UdpSocket9broadcast(
    ::rs::std::net::UdpSocket const&,
    rs_std::Result<bool, ::rs::std::io::Error>* __ret_ptr);
}
inline rs_std::Result<bool, ::rs::std::io::Error> UdpSocket::broadcast() const {
  auto&& self = *this;
  crubit::Slot<rs_std::Result<bool, ::rs::std::io::Error>>
      __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMNtNtCsb7ytMsthdgm_u3std3net3udpNtB2_u9UdpSocket9broadcast(
          self, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMNtNtCsb7ytMsthdgm_u3std3net3udpNtB2_u9UdpSocket17multicast_uloop_uv4(
    ::rs::std::net::UdpSocket const&,
    rs_std::Result<bool, ::rs::std::io::Error>* __ret_ptr);
}
inline rs_std::Result<bool, ::rs::std::io::Error> UdpSocket::multicast_loop_v4()
    const {
  auto&& self = *this;
  crubit::Slot<rs_std::Result<bool, ::rs::std::io::Error>>
      __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMNtNtCsb7ytMsthdgm_u3std3net3udpNtB2_u9UdpSocket17multicast_uloop_uv4(
          self, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMNtNtCsb7ytMsthdgm_u3std3net3udpNtB2_u9UdpSocket16multicast_uttl_uv4(
    ::rs::std::net::UdpSocket const&,
    rs_std::Result<::std::uint32_t, ::rs::std::io::Error>* __ret_ptr);
}
inline rs_std::Result<::std::uint32_t, ::rs::std::io::Error>
UdpSocket::multicast_ttl_v4() const {
  auto&& self = *this;
  crubit::Slot<rs_std::Result<::std::uint32_t, ::rs::std::io::Error>>
      __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMNtNtCsb7ytMsthdgm_u3std3net3udpNtB2_u9UdpSocket16multicast_uttl_uv4(
          self, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMNtNtCsb7ytMsthdgm_u3std3net3udpNtB2_u9UdpSocket17multicast_uloop_uv6(
    ::rs::std::net::UdpSocket const&,
    rs_std::Result<bool, ::rs::std::io::Error>* __ret_ptr);
}
inline rs_std::Result<bool, ::rs::std::io::Error> UdpSocket::multicast_loop_v6()
    const {
  auto&& self = *this;
  crubit::Slot<rs_std::Result<bool, ::rs::std::io::Error>>
      __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMNtNtCsb7ytMsthdgm_u3std3net3udpNtB2_u9UdpSocket17multicast_uloop_uv6(
          self, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMNtNtCsb7ytMsthdgm_u3std3net3udpNtB2_u9UdpSocket3ttl(
    ::rs::std::net::UdpSocket const&,
    rs_std::Result<::std::uint32_t, ::rs::std::io::Error>* __ret_ptr);
}
inline rs_std::Result<::std::uint32_t, ::rs::std::io::Error> UdpSocket::ttl()
    const {
  auto&& self = *this;
  crubit::Slot<rs_std::Result<::std::uint32_t, ::rs::std::io::Error>>
      __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMNtNtCsb7ytMsthdgm_u3std3net3udpNtB2_u9UdpSocket3ttl(
          self, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}
inline void UdpSocket::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(UdpSocket, __field0));
}
}  // namespace rs::std::net

namespace rs::std::panic {

//  A struct providing information about a panic.
//
//  `PanicHookInfo` structure is passed to a panic hook set by the [`set_hook`]
//  function.
//
//  # Examples
//
//  ```should_panic
//  use std::panic;
//
//  panic::set_hook(Box::new(|panic_info| {
//      println!("panic occurred: {panic_info}");
//  }));
//
//  panic!("critical system failure");
//  ```
//
//  [`set_hook`]: ../../std/panic/fn.set_hook.html
//
// Generated from:
// ../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/panic.rs;l=42
using PanicInfo CRUBIT_INTERNAL_RUST_TYPE(":: std :: panic :: PanicHookInfo") =
    ::rs::std::panic::PanicHookInfo;
static_assert(
    sizeof(PanicHookInfo) == 32,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(PanicHookInfo) == 8,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(::std::is_trivially_destructible_v<PanicHookInfo>);
static_assert(
    ::std::is_trivially_move_constructible_v<::rs::std::panic::PanicHookInfo>);
static_assert(
    ::std::is_trivially_move_assignable_v<::rs::std::panic::PanicHookInfo>);
inline ::rs::std::panic::PanicHookInfo::PanicHookInfo(
    ::crubit::UnsafeRelocateTag, PanicHookInfo&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMNtCsb7ytMsthdgm_u3std5panicNtB2_u13PanicHookInfo14payload_uas_ustr(
    ::rs::std::panic::PanicHookInfo const&, unsigned char* __ret_ptr);
}
inline ::std::optional<rs_std::StrRef> PanicHookInfo::payload_as_str() const& $(
    __anon1) CRUBIT_LIFETIME_BOUND {
  auto&& self = *this;
  unsigned char __return_value_storage
      [::crubit::OptionAbi<::crubit::TransmuteAbi<rs_std::StrRef>>::kSize];
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMNtCsb7ytMsthdgm_u3std5panicNtB2_u13PanicHookInfo14payload_uas_ustr(
          self, __return_value_storage);
  return ::crubit::internal::Decode<
      ::crubit::OptionAbi<::crubit::TransmuteAbi<rs_std::StrRef>>>(
      ::crubit::OptionAbi<::crubit::TransmuteAbi<rs_std::StrRef>>(
          ::crubit::TransmuteAbi<rs_std::StrRef>()),
      __return_value_storage);
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMNtCsb7ytMsthdgm_u3std5panicNtB2_u13PanicHookInfo8location(
    ::rs::std::panic::PanicHookInfo const&, unsigned char* __ret_ptr);
}
inline ::std::optional<::rs::core::panic::Location const *
                       $static crubit_nonnull>
PanicHookInfo::location() const {
  auto&& self = *this;
  unsigned char
      __return_value_storage[::crubit::OptionAbi<::crubit::TransmuteAbi<
          ::rs::core::panic::Location const * $static crubit_nonnull>>::kSize];
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMNtCsb7ytMsthdgm_u3std5panicNtB2_u13PanicHookInfo8location(
          self, __return_value_storage);
  return ::crubit::internal::Decode<::crubit::OptionAbi<::crubit::TransmuteAbi<
      ::rs::core::panic::Location const * $static crubit_nonnull>>>(
      ::crubit::OptionAbi<::crubit::TransmuteAbi<
          ::rs::core::panic::Location const * $static crubit_nonnull>>(
          ::crubit::TransmuteAbi<::rs::core::panic::Location const *
                                 $static crubit_nonnull>()),
      __return_value_storage);
}
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std5panic13PanicHookInfoNtNtCsaddbpR6HRqH_u5alloc6string8ToString9to_ustringB6_u(
    ::rs::std::panic::PanicHookInfo const&,
    ::rs::alloc::string::String* __ret_ptr);
inline void PanicHookInfo::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(PanicHookInfo, payload));
  static_assert(16 == offsetof(PanicHookInfo, location_));
  static_assert(24 == offsetof(PanicHookInfo, can_unwind));
  static_assert(25 == offsetof(PanicHookInfo, force_no_backtrace));
}
}  // namespace rs::std::panic

namespace rs::std::path {

static_assert(
    sizeof(Ancestors) == 16,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(Ancestors) == 8,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(::std::is_trivially_destructible_v<Ancestors>);
static_assert(
    ::std::is_trivially_move_constructible_v<::rs::std::path::Ancestors>);
static_assert(
    ::std::is_trivially_move_assignable_v<::rs::std::path::Ancestors>);
static_assert(
    ::std::is_trivially_copy_constructible_v<::rs::std::path::Ancestors>);
static_assert(
    ::std::is_trivially_copy_assignable_v<::rs::std::path::Ancestors>);
inline ::rs::std::path::Ancestors::Ancestors(::crubit::UnsafeRelocateTag,
                                             Ancestors&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}
inline void Ancestors::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(Ancestors, next));
}
static_assert(
    sizeof(Component) == 56,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(Component) == 8,
    "Verify that ADT layout didn't change since this header got generated");

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNcNtNtNtCsb7ytMsthdgm_u3std4path9Component6Prefix0(
    ::rs::std::path::PrefixComponent*, ::rs::std::path::Component* __ret_ptr);
}
inline ::rs::std::path::Component Component::MakePrefix(
    ::rs::std::path::PrefixComponent __param_0) {
  crubit::Slot<::rs::std::path::Component> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNcNtNtNtCsb7ytMsthdgm_u3std4path9Component6Prefix0(
          &__param_0, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

// `static` constructor
inline constexpr Component Component::MakeRootDir() {
  return Component(PrivateBytesTag{},
                   {6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0});
}

// `static` constructor
inline constexpr Component Component::MakeCurDir() {
  return Component(PrivateBytesTag{},
                   {7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0});
}

// `static` constructor
inline constexpr Component Component::MakeParentDir() {
  return Component(PrivateBytesTag{},
                   {8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0});
}
static_assert(::std::is_trivially_destructible_v<Component>);
static_assert(
    ::std::is_trivially_move_constructible_v<::rs::std::path::Component>);
static_assert(
    ::std::is_trivially_move_assignable_v<::rs::std::path::Component>);
static_assert(
    ::std::is_trivially_copy_constructible_v<::rs::std::path::Component>);
static_assert(
    ::std::is_trivially_copy_assignable_v<::rs::std::path::Component>);
inline ::rs::std::path::Component::Component(::crubit::UnsafeRelocateTag,
                                             Component&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}

namespace __crubit_internal {
extern "C" bool
__crubit_thunk_818b180788380d74__uRNvXs1Y_uNtCsb7ytMsthdgm_u3std4pathNtB6_u9ComponentNtNtCs9kG8YiNG2f0_u4core3cmp9PartialEq2eq(
    ::rs::std::path::Component const&, ::rs::std::path::Component const&);
}
inline bool Component::operator==(
    ::rs::std::path::Component const& other) const {
  auto&& self = *this;
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXs1Y_uNtCsb7ytMsthdgm_u3std4pathNtB6_u9ComponentNtNtCs9kG8YiNG2f0_u4core3cmp9PartialEq2eq(
          self, other);
}
namespace __crubit_internal {
extern "C" ::std::int8_t
__crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std4path9ComponentNtNtCs9kG8YiNG2f0_u4core3cmp3Ord3cmpB6_u(
    ::rs::std::path::Component const&, ::rs::std::path::Component const&);
}
inline ::std::strong_ordering Component::operator<=>(
    const Component& other) const {
  auto val = __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std4path9ComponentNtNtCs9kG8YiNG2f0_u4core3cmp3Ord3cmpB6_u(
          *this, other);
  switch (val) {
    case -1:
      return ::std::strong_ordering::less;
    case 0:
      return ::std::strong_ordering::equal;
    case 1:
      return ::std::strong_ordering::greater;
    default:
      CRUBIT_UNREACHABLE();
  }
}
inline void Component::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(Component, __opaque_blob_of_bytes));
}
static_assert(
    sizeof(Components) == 64,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(Components) == 8,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(::std::is_trivially_destructible_v<Components>);
static_assert(
    ::std::is_trivially_move_constructible_v<::rs::std::path::Components>);
static_assert(
    ::std::is_trivially_move_assignable_v<::rs::std::path::Components>);
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std4path10ComponentsNtNtCs9kG8YiNG2f0_u4core5clone5Clone5cloneB6_u(
    ::rs::std::path::Components const&, ::rs::std::path::Components* __ret_ptr);
}
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std4path10ComponentsNtNtCs9kG8YiNG2f0_u4core5clone5Clone10clone_ufromB6_u(
    ::rs::std::path::Components&, ::rs::std::path::Components const&);
}
inline ::rs::std::path::Components::Components(const Components& other) {
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std4path10ComponentsNtNtCs9kG8YiNG2f0_u4core5clone5Clone5cloneB6_u(
          other, this);
}
inline ::rs::std::path::Components& ::rs::std::path::Components::operator=(
    const Components& other) {
  if (this != &other) {
    __crubit_internal::
        __crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std4path10ComponentsNtNtCs9kG8YiNG2f0_u4core5clone5Clone10clone_ufromB6_u(
            *this, other);
  }
  return *this;
}
inline ::rs::std::path::Components::Components(::crubit::UnsafeRelocateTag,
                                               Components&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}

namespace __crubit_internal {
extern "C" bool
__crubit_thunk_818b180788380d74__uRNvXsl_uNtCsb7ytMsthdgm_u3std4pathNtB5_u10ComponentsNtNtCs9kG8YiNG2f0_u4core3cmp9PartialEq2eq(
    ::rs::std::path::Components const&, ::rs::std::path::Components const&);
}
inline bool Components::operator==(
    ::rs::std::path::Components const& other) const {
  auto&& self = *this;
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXsl_uNtCsb7ytMsthdgm_u3std4pathNtB5_u10ComponentsNtNtCs9kG8YiNG2f0_u4core3cmp9PartialEq2eq(
          self, other);
}
namespace __crubit_internal {
extern "C" ::std::int8_t
__crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std4path10ComponentsNtNtCs9kG8YiNG2f0_u4core3cmp3Ord3cmpB6_u(
    ::rs::std::path::Components const&, ::rs::std::path::Components const&);
}
inline ::std::strong_ordering Components::operator<=>(
    const Components& other) const {
  auto val = __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std4path10ComponentsNtNtCs9kG8YiNG2f0_u4core3cmp3Ord3cmpB6_u(
          *this, other);
  switch (val) {
    case -1:
      return ::std::strong_ordering::less;
    case 0:
      return ::std::strong_ordering::equal;
    case 1:
      return ::std::strong_ordering::greater;
    default:
      CRUBIT_UNREACHABLE();
  }
}
inline void Components::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(Components, path));
  static_assert(16 == offsetof(Components, prefix));
  static_assert(56 == offsetof(Components, front));
  static_assert(57 == offsetof(Components, back));
  static_assert(58 == offsetof(Components, has_physical_root));
}
static_assert(
    sizeof(Display) == 16,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(Display) == 8,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(::std::is_trivially_destructible_v<Display>);
static_assert(
    ::std::is_trivially_move_constructible_v<::rs::std::path::Display>);
static_assert(::std::is_trivially_move_assignable_v<::rs::std::path::Display>);
inline ::rs::std::path::Display::Display(::crubit::UnsafeRelocateTag,
                                         Display&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std4path7DisplayNtNtCsaddbpR6HRqH_u5alloc6string8ToString9to_ustringB6_u(
    ::rs::std::path::Display const&, ::rs::alloc::string::String* __ret_ptr);
inline void Display::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(Display, inner));
}
static_assert(
    sizeof(Iter) == 64,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(Iter) == 8,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(::std::is_trivially_destructible_v<Iter>);
static_assert(::std::is_trivially_move_constructible_v<::rs::std::path::Iter>);
static_assert(::std::is_trivially_move_assignable_v<::rs::std::path::Iter>);
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std4path4IterNtNtCs9kG8YiNG2f0_u4core5clone5Clone5cloneB6_u(
    ::rs::std::path::Iter const&, ::rs::std::path::Iter* __ret_ptr);
}
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std4path4IterNtNtCs9kG8YiNG2f0_u4core5clone5Clone10clone_ufromB6_u(
    ::rs::std::path::Iter&, ::rs::std::path::Iter const&);
}
inline ::rs::std::path::Iter::Iter(const Iter& other) {
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std4path4IterNtNtCs9kG8YiNG2f0_u4core5clone5Clone5cloneB6_u(
          other, this);
}
inline ::rs::std::path::Iter& ::rs::std::path::Iter::operator=(
    const Iter& other) {
  if (this != &other) {
    __crubit_internal::
        __crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std4path4IterNtNtCs9kG8YiNG2f0_u4core5clone5Clone10clone_ufromB6_u(
            *this, other);
  }
  return *this;
}
inline ::rs::std::path::Iter::Iter(::crubit::UnsafeRelocateTag, Iter&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}
inline void Iter::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(Iter, inner));
}
static_assert(
    sizeof(PathBuf) == 24,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(PathBuf) == 8,
    "Verify that ADT layout didn't change since this header got generated");
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std4path7PathBufNtNtCs9kG8YiNG2f0_u4core7default7Default7defaultB6_u(
    ::rs::std::path::PathBuf* __ret_ptr);
}
inline ::rs::std::path::PathBuf::PathBuf() {
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std4path7PathBufNtNtCs9kG8YiNG2f0_u4core7default7Default7defaultB6_u(
          this);
}
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std4path7PathBufNtNtNtCs9kG8YiNG2f0_u4core3ops4drop4Drop4dropB6_u(
    ::rs::std::path::PathBuf&);
}
inline PathBuf::~PathBuf() {
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std4path7PathBufNtNtNtCs9kG8YiNG2f0_u4core3ops4drop4Drop4dropB6_u(
          *this);
}
inline ::rs::std::path::PathBuf::PathBuf(PathBuf&& other) : PathBuf() {
  *this = ::std::move(other);
}
inline ::rs::std::path::PathBuf& ::rs::std::path::PathBuf::operator=(
    PathBuf&& other) {
  crubit::MemSwap(*this, other);
  return *this;
}
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std4path7PathBufNtNtCs9kG8YiNG2f0_u4core5clone5Clone5cloneB6_u(
    ::rs::std::path::PathBuf const&, ::rs::std::path::PathBuf* __ret_ptr);
}
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std4path7PathBufNtNtCs9kG8YiNG2f0_u4core5clone5Clone10clone_ufromB6_u(
    ::rs::std::path::PathBuf&, ::rs::std::path::PathBuf const&);
}
inline ::rs::std::path::PathBuf::PathBuf(const PathBuf& other) {
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std4path7PathBufNtNtCs9kG8YiNG2f0_u4core5clone5Clone5cloneB6_u(
          other, this);
}
inline ::rs::std::path::PathBuf& ::rs::std::path::PathBuf::operator=(
    const PathBuf& other) {
  if (this != &other) {
    __crubit_internal::
        __crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std4path7PathBufNtNtCs9kG8YiNG2f0_u4core5clone5Clone10clone_ufromB6_u(
            *this, other);
  }
  return *this;
}
inline ::rs::std::path::PathBuf::PathBuf(::crubit::UnsafeRelocateTag,
                                         PathBuf&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMsr_uNtCsb7ytMsthdgm_u3std4pathNtB5_u7PathBuf3new(
    ::rs::std::path::PathBuf* __ret_ptr);
}
inline ::rs::std::path::PathBuf PathBuf::new_() {
  crubit::Slot<::rs::std::path::PathBuf> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMsr_uNtCsb7ytMsthdgm_u3std4pathNtB5_u7PathBuf3new(
          __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMsr_uNtCsb7ytMsthdgm_u3std4pathNtB5_u7PathBuf13with_ucapacity(
    ::std::uintptr_t, ::rs::std::path::PathBuf* __ret_ptr);
}
inline ::rs::std::path::PathBuf PathBuf::with_capacity(
    ::std::uintptr_t capacity) {
  crubit::Slot<::rs::std::path::PathBuf> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMsr_uNtCsb7ytMsthdgm_u3std4pathNtB5_u7PathBuf13with_ucapacity(
          capacity, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" bool
__crubit_thunk_818b180788380d74__uRNvMsr_uNtCsb7ytMsthdgm_u3std4pathNtB5_u7PathBuf3pop(
    ::rs::std::path::PathBuf&);
}
inline bool PathBuf::pop() {
  auto&& self = *this;
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMsr_uNtCsb7ytMsthdgm_u3std4pathNtB5_u7PathBuf3pop(
          self);
}

namespace __crubit_internal {
extern "C" ::rs::std::ffi::OsString& $(__anon1)
    __crubit_thunk_818b180788380d74__uRNvMsr_uNtCsb7ytMsthdgm_u3std4pathNtB5_u7PathBuf16as_umut_uos_ustring(
        ::rs::std::path::PathBuf&);
}
inline ::rs::std::ffi::OsString& $(__anon1) PathBuf::as_mut_os_string() &
    $(__anon1) CRUBIT_LIFETIME_BOUND {
  auto&& self = *this;
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMsr_uNtCsb7ytMsthdgm_u3std4pathNtB5_u7PathBuf16as_umut_uos_ustring(
          self);
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMsr_uNtCsb7ytMsthdgm_u3std4pathNtB5_u7PathBuf14into_uos_ustring(
    ::rs::std::path::PathBuf*, ::rs::std::ffi::OsString* __ret_ptr);
}
inline ::rs::std::ffi::OsString PathBuf::into_os_string() && {
  auto&& self = *this;
  crubit::Slot self_slot((::std::move(self)));
  crubit::Slot<::rs::std::ffi::OsString> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMsr_uNtCsb7ytMsthdgm_u3std4pathNtB5_u7PathBuf14into_uos_ustring(
          self_slot.Get(), __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMsr_uNtCsb7ytMsthdgm_u3std4pathNtB5_u7PathBuf11into_ustring(
    ::rs::std::path::PathBuf*,
    rs_std::Result<::rs::alloc::string::String, ::rs::std::path::PathBuf>*
        __ret_ptr);
}
inline rs_std::Result<::rs::alloc::string::String, ::rs::std::path::PathBuf>
PathBuf::into_string() && {
  auto&& self = *this;
  crubit::Slot self_slot((::std::move(self)));
  crubit::Slot<
      rs_std::Result<::rs::alloc::string::String, ::rs::std::path::PathBuf>>
      __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMsr_uNtCsb7ytMsthdgm_u3std4pathNtB5_u7PathBuf11into_ustring(
          self_slot.Get(), __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" ::std::uintptr_t
__crubit_thunk_818b180788380d74__uRNvMsr_uNtCsb7ytMsthdgm_u3std4pathNtB5_u7PathBuf8capacity(
    ::rs::std::path::PathBuf const&);
}
inline ::std::uintptr_t PathBuf::capacity() const {
  auto&& self = *this;
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMsr_uNtCsb7ytMsthdgm_u3std4pathNtB5_u7PathBuf8capacity(
          self);
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMsr_uNtCsb7ytMsthdgm_u3std4pathNtB5_u7PathBuf5clear(
    ::rs::std::path::PathBuf&);
}
inline void PathBuf::clear() {
  auto&& self = *this;
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMsr_uNtCsb7ytMsthdgm_u3std4pathNtB5_u7PathBuf5clear(
          self);
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMsr_uNtCsb7ytMsthdgm_u3std4pathNtB5_u7PathBuf7reserve(
    ::rs::std::path::PathBuf&, ::std::uintptr_t);
}
inline void PathBuf::reserve(::std::uintptr_t additional) {
  auto&& self = *this;
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMsr_uNtCsb7ytMsthdgm_u3std4pathNtB5_u7PathBuf7reserve(
          self, additional);
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMsr_uNtCsb7ytMsthdgm_u3std4pathNtB5_u7PathBuf13reserve_uexact(
    ::rs::std::path::PathBuf&, ::std::uintptr_t);
}
inline void PathBuf::reserve_exact(::std::uintptr_t additional) {
  auto&& self = *this;
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMsr_uNtCsb7ytMsthdgm_u3std4pathNtB5_u7PathBuf13reserve_uexact(
          self, additional);
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMsr_uNtCsb7ytMsthdgm_u3std4pathNtB5_u7PathBuf13shrink_uto_ufit(
    ::rs::std::path::PathBuf&);
}
inline void PathBuf::shrink_to_fit() {
  auto&& self = *this;
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMsr_uNtCsb7ytMsthdgm_u3std4pathNtB5_u7PathBuf13shrink_uto_ufit(
          self);
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMsr_uNtCsb7ytMsthdgm_u3std4pathNtB5_u7PathBuf9shrink_uto(
    ::rs::std::path::PathBuf&, ::std::uintptr_t);
}
inline void PathBuf::shrink_to(::std::uintptr_t min_capacity) {
  auto&& self = *this;
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMsr_uNtCsb7ytMsthdgm_u3std4pathNtB5_u7PathBuf9shrink_uto(
          self, min_capacity);
}
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std4path7PathBufINtNtCs9kG8YiNG2f0_u4core7convert4IntoNtNtNtB6_u3ffi6os_ustr8OsStringE4intoB6_u(
    ::rs::std::path::PathBuf*, ::rs::std::ffi::OsString* __ret_ptr);
}
inline PathBuf::operator ::rs::std::ffi::OsString() {
  auto&& self = *this;
  crubit::Slot self_slot((::std::move(self)));
  crubit::Slot<::rs::std::ffi::OsString> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std4path7PathBufINtNtCs9kG8YiNG2f0_u4core7convert4IntoNtNtNtB6_u3ffi6os_ustr8OsStringE4intoB6_u(
          self_slot.Get(), __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}
namespace __crubit_internal {
extern "C" bool
__crubit_thunk_818b180788380d74__uRNvXsW_uNtCsb7ytMsthdgm_u3std4pathNtB5_u7PathBufNtNtCs9kG8YiNG2f0_u4core3cmp9PartialEq2eq(
    ::rs::std::path::PathBuf const&, ::rs::std::path::PathBuf const&);
}
inline bool PathBuf::operator==(::rs::std::path::PathBuf const& other) const {
  auto&& self = *this;
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXsW_uNtCsb7ytMsthdgm_u3std4pathNtB5_u7PathBufNtNtCs9kG8YiNG2f0_u4core3cmp9PartialEq2eq(
          self, other);
}

namespace __crubit_internal {
extern "C" bool
__crubit_thunk_818b180788380d74__uRNvXsZ_uNtCsb7ytMsthdgm_u3std4pathNtB5_u7PathBufINtNtCs9kG8YiNG2f0_u4core3cmp9PartialEqNtNtCsaddbpR6HRqH_u5alloc6string6StringE2eq(
    ::rs::std::path::PathBuf const&, ::rs::alloc::string::String const&);
}
inline bool PathBuf::operator==(
    ::rs::alloc::string::String const& other) const {
  auto&& self = *this;
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXsZ_uNtCsb7ytMsthdgm_u3std4pathNtB5_u7PathBufINtNtCs9kG8YiNG2f0_u4core3cmp9PartialEqNtNtCsaddbpR6HRqH_u5alloc6string6StringE2eq(
          self, other);
}

namespace __crubit_internal {
extern "C" bool
__crubit_thunk_818b180788380d74__uRNvXs2O_uNtCsb7ytMsthdgm_u3std4pathNtB6_u7PathBufINtNtCs9kG8YiNG2f0_u4core3cmp9PartialEqNtNtNtB8_u3ffi6os_ustr8OsStringE2eq(
    ::rs::std::path::PathBuf const&, ::rs::std::ffi::OsString const&);
}
inline bool PathBuf::operator==(::rs::std::ffi::OsString const& other) const {
  auto&& self = *this;
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXs2O_uNtCsb7ytMsthdgm_u3std4pathNtB6_u7PathBufINtNtCs9kG8YiNG2f0_u4core3cmp9PartialEqNtNtNtB8_u3ffi6os_ustr8OsStringE2eq(
          self, other);
}
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std4path7PathBufINtNtCs9kG8YiNG2f0_u4core7convert4FromNtNtNtB6_u3ffi6os_ustr8OsStringE4fromB6_u(
    ::rs::std::ffi::OsString*, ::rs::std::path::PathBuf* __ret_ptr);
}
inline PathBuf::PathBuf(::rs::std::ffi::OsString value) {
  crubit::Slot value_slot((::std::move(value)));
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std4path7PathBufINtNtCs9kG8YiNG2f0_u4core7convert4FromNtNtNtB6_u3ffi6os_ustr8OsStringE4fromB6_u(
          value_slot.Get(), this);
}
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std4path7PathBufINtNtCs9kG8YiNG2f0_u4core7convert4FromNtNtCsaddbpR6HRqH_u5alloc6string6StringE4fromB6_u(
    ::rs::alloc::string::String*, ::rs::std::path::PathBuf* __ret_ptr);
}
inline PathBuf::PathBuf(::rs::alloc::string::String value) {
  crubit::Slot value_slot((::std::move(value)));
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std4path7PathBufINtNtCs9kG8YiNG2f0_u4core7convert4FromNtNtCsaddbpR6HRqH_u5alloc6string6StringE4fromB6_u(
          value_slot.Get(), this);
}
namespace __crubit_internal {
extern "C" ::std::int8_t
__crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std4path7PathBufNtNtCs9kG8YiNG2f0_u4core3cmp3Ord3cmpB6_u(
    ::rs::std::path::PathBuf const&, ::rs::std::path::PathBuf const&);
}
inline ::std::strong_ordering PathBuf::operator<=>(const PathBuf& other) const {
  auto val = __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std4path7PathBufNtNtCs9kG8YiNG2f0_u4core3cmp3Ord3cmpB6_u(
          *this, other);
  switch (val) {
    case -1:
      return ::std::strong_ordering::less;
    case 0:
      return ::std::strong_ordering::equal;
    case 1:
      return ::std::strong_ordering::greater;
    default:
      CRUBIT_UNREACHABLE();
  }
}
namespace __crubit_internal {
extern "C" ::std::int8_t
__crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std4path7PathBufINtNtCs9kG8YiNG2f0_u4core3cmp10PartialOrdNtNtNtB6_u3ffi6os_ustr8OsStringE11partial_ucmpB6_u(
    ::rs::std::path::PathBuf const&, ::rs::std::ffi::OsString const&);
}
inline ::std::partial_ordering PathBuf::operator<=>(
    ::rs::std::ffi::OsString const& other) const {
  auto val = __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std4path7PathBufINtNtCs9kG8YiNG2f0_u4core3cmp10PartialOrdNtNtNtB6_u3ffi6os_ustr8OsStringE11partial_ucmpB6_u(
          *this, other);
  switch (val) {
    case -1:
      return ::std::partial_ordering::less;
    case 0:
      return ::std::partial_ordering::equivalent;
    case 1:
      return ::std::partial_ordering::greater;
    case 2:
      return ::std::partial_ordering::unordered;
    default:
      CRUBIT_UNREACHABLE();
  }
}
inline void PathBuf::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(PathBuf, inner));
}
static_assert(
    sizeof(Prefix) == 40,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(Prefix) == 8,
    "Verify that ADT layout didn't change since this header got generated");

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNcNtNtNtCsb7ytMsthdgm_u3std4path6Prefix12VerbatimDisk0(
    ::std::uint8_t, ::rs::std::path::Prefix* __ret_ptr);
}
inline ::rs::std::path::Prefix Prefix::MakeVerbatimDisk(
    ::std::uint8_t __param_0) {
  crubit::Slot<::rs::std::path::Prefix> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNcNtNtNtCsb7ytMsthdgm_u3std4path6Prefix12VerbatimDisk0(
          __param_0, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNcNtNtNtCsb7ytMsthdgm_u3std4path6Prefix4Disk0(
    ::std::uint8_t, ::rs::std::path::Prefix* __ret_ptr);
}
inline ::rs::std::path::Prefix Prefix::MakeDisk(::std::uint8_t __param_0) {
  crubit::Slot<::rs::std::path::Prefix> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNcNtNtNtCsb7ytMsthdgm_u3std4path6Prefix4Disk0(
          __param_0, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}
static_assert(::std::is_trivially_destructible_v<Prefix>);
static_assert(
    ::std::is_trivially_move_constructible_v<::rs::std::path::Prefix>);
static_assert(::std::is_trivially_move_assignable_v<::rs::std::path::Prefix>);
static_assert(
    ::std::is_trivially_copy_constructible_v<::rs::std::path::Prefix>);
static_assert(::std::is_trivially_copy_assignable_v<::rs::std::path::Prefix>);
inline ::rs::std::path::Prefix::Prefix(::crubit::UnsafeRelocateTag,
                                       Prefix&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}

namespace __crubit_internal {
extern "C" bool
__crubit_thunk_818b180788380d74__uRNvMNtCsb7ytMsthdgm_u3std4pathNtB2_u6Prefix11is_uverbatim(
    ::rs::std::path::Prefix const&);
}
inline bool Prefix::is_verbatim() const {
  auto&& self = *this;
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMNtCsb7ytMsthdgm_u3std4pathNtB2_u6Prefix11is_uverbatim(
          self);
}

namespace __crubit_internal {
extern "C" bool
__crubit_thunk_818b180788380d74__uRNvXs1G_uNtCsb7ytMsthdgm_u3std4pathNtB6_u6PrefixNtNtCs9kG8YiNG2f0_u4core3cmp9PartialEq2eq(
    ::rs::std::path::Prefix const&, ::rs::std::path::Prefix const&);
}
inline bool Prefix::operator==(::rs::std::path::Prefix const& other) const {
  auto&& self = *this;
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXs1G_uNtCsb7ytMsthdgm_u3std4pathNtB6_u6PrefixNtNtCs9kG8YiNG2f0_u4core3cmp9PartialEq2eq(
          self, other);
}
namespace __crubit_internal {
extern "C" ::std::int8_t
__crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std4path6PrefixNtNtCs9kG8YiNG2f0_u4core3cmp3Ord3cmpB6_u(
    ::rs::std::path::Prefix const&, ::rs::std::path::Prefix const&);
}
inline ::std::strong_ordering Prefix::operator<=>(const Prefix& other) const {
  auto val = __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std4path6PrefixNtNtCs9kG8YiNG2f0_u4core3cmp3Ord3cmpB6_u(
          *this, other);
  switch (val) {
    case -1:
      return ::std::strong_ordering::less;
    case 0:
      return ::std::strong_ordering::equal;
    case 1:
      return ::std::strong_ordering::greater;
    default:
      CRUBIT_UNREACHABLE();
  }
}
inline void Prefix::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(Prefix, __opaque_blob_of_bytes));
}
static_assert(
    sizeof(PrefixComponent) == 56,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(PrefixComponent) == 8,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(::std::is_trivially_destructible_v<PrefixComponent>);
static_assert(
    ::std::is_trivially_move_constructible_v<::rs::std::path::PrefixComponent>);
static_assert(
    ::std::is_trivially_move_assignable_v<::rs::std::path::PrefixComponent>);
static_assert(
    ::std::is_trivially_copy_constructible_v<::rs::std::path::PrefixComponent>);
static_assert(
    ::std::is_trivially_copy_assignable_v<::rs::std::path::PrefixComponent>);
inline ::rs::std::path::PrefixComponent::PrefixComponent(
    ::crubit::UnsafeRelocateTag, PrefixComponent&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMs_uNtCsb7ytMsthdgm_u3std4pathNtB4_u15PrefixComponent4kind(
    ::rs::std::path::PrefixComponent const&,
    ::rs::std::path::Prefix* __ret_ptr);
}
inline ::rs::std::path::Prefix PrefixComponent::kind() const {
  auto&& self = *this;
  crubit::Slot<::rs::std::path::Prefix> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMs_uNtCsb7ytMsthdgm_u3std4pathNtB4_u15PrefixComponent4kind(
          self, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" bool
__crubit_thunk_818b180788380d74__uRNvXs0_uNtCsb7ytMsthdgm_u3std4pathNtB5_u15PrefixComponentNtNtCs9kG8YiNG2f0_u4core3cmp9PartialEq2eq(
    ::rs::std::path::PrefixComponent const&,
    ::rs::std::path::PrefixComponent const&);
}
inline bool PrefixComponent::operator==(
    ::rs::std::path::PrefixComponent const& other) const {
  auto&& self = *this;
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXs0_uNtCsb7ytMsthdgm_u3std4pathNtB5_u15PrefixComponentNtNtCs9kG8YiNG2f0_u4core3cmp9PartialEq2eq(
          self, other);
}
namespace __crubit_internal {
extern "C" ::std::int8_t
__crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std4path15PrefixComponentNtNtCs9kG8YiNG2f0_u4core3cmp3Ord3cmpB6_u(
    ::rs::std::path::PrefixComponent const&,
    ::rs::std::path::PrefixComponent const&);
}
inline ::std::strong_ordering PrefixComponent::operator<=>(
    const PrefixComponent& other) const {
  auto val = __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std4path15PrefixComponentNtNtCs9kG8YiNG2f0_u4core3cmp3Ord3cmpB6_u(
          *this, other);
  switch (val) {
    case -1:
      return ::std::strong_ordering::less;
    case 0:
      return ::std::strong_ordering::equal;
    case 1:
      return ::std::strong_ordering::greater;
    default:
      CRUBIT_UNREACHABLE();
  }
}
inline void PrefixComponent::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(PrefixComponent, parsed));
  static_assert(40 == offsetof(PrefixComponent, raw));
}
namespace __crubit_internal {
extern "C" bool
__crubit_thunk_818b180788380d74__uRNvNtCsb7ytMsthdgm_u3std4path12is_useparator(
    rs_std::char_*);
}
inline bool is_separator(rs_std::char_ c) {
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvNtCsb7ytMsthdgm_u3std4path12is_useparator(
          &c);
}

}  // namespace rs::std::path

namespace rs::std::process {

static_assert(
    sizeof(Child) == 24,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(Child) == 4,
    "Verify that ADT layout didn't change since this header got generated");
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std7process5ChildNtNtNtCs9kG8YiNG2f0_u4core3ops4drop4Drop4dropB6_u(
    ::rs::std::process::Child&);
}
inline Child::~Child() {
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std7process5ChildNtNtNtCs9kG8YiNG2f0_u4core3ops4drop4Drop4dropB6_u(
          *this);
}
inline ::rs::std::process::Child::Child(::crubit::UnsafeRelocateTag,
                                        Child&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}

namespace __crubit_internal {
extern "C" ::std::uint32_t
__crubit_thunk_818b180788380d74__uRNvMsT_uNtCsb7ytMsthdgm_u3std7processNtB5_u5Child2id(
    ::rs::std::process::Child const&);
}
inline ::std::uint32_t Child::id() const {
  auto&& self = *this;
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMsT_uNtCsb7ytMsthdgm_u3std7processNtB5_u5Child2id(
          self);
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMsT_uNtCsb7ytMsthdgm_u3std7processNtB5_u5Child4wait(
    ::rs::std::process::Child&,
    rs_std::Result<::rs::std::process::ExitStatus, ::rs::std::io::Error>*
        __ret_ptr);
}
inline rs_std::Result<::rs::std::process::ExitStatus, ::rs::std::io::Error>
Child::wait() {
  auto&& self = *this;
  crubit::Slot<
      rs_std::Result<::rs::std::process::ExitStatus, ::rs::std::io::Error>>
      __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMsT_uNtCsb7ytMsthdgm_u3std7processNtB5_u5Child4wait(
          self, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMsT_uNtCsb7ytMsthdgm_u3std7processNtB5_u5Child8try_uwait(
    ::rs::std::process::Child&,
    rs_std::Result<rs_std::Option<::rs::std::process::ExitStatus>,
                   ::rs::std::io::Error>* __ret_ptr);
}
inline rs_std::Result<rs_std::Option<::rs::std::process::ExitStatus>,
                      ::rs::std::io::Error>
Child::try_wait() {
  auto&& self = *this;
  crubit::Slot<rs_std::Result<rs_std::Option<::rs::std::process::ExitStatus>,
                              ::rs::std::io::Error>>
      __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMsT_uNtCsb7ytMsthdgm_u3std7processNtB5_u5Child8try_uwait(
          self, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}
inline void Child::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(Child, handle));
  static_assert(12 == offsetof(Child, stdin));
  static_assert(16 == offsetof(Child, stdout));
  static_assert(20 == offsetof(Child, stderr));
}
static_assert(
    sizeof(ChildStderr) == 4,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(ChildStderr) == 4,
    "Verify that ADT layout didn't change since this header got generated");
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std7process11ChildStderrNtNtNtCs9kG8YiNG2f0_u4core3ops4drop4Drop4dropB6_u(
    ::rs::std::process::ChildStderr&);
}
inline ChildStderr::~ChildStderr() {
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std7process11ChildStderrNtNtNtCs9kG8YiNG2f0_u4core3ops4drop4Drop4dropB6_u(
          *this);
}
inline ::rs::std::process::ChildStderr::ChildStderr(::crubit::UnsafeRelocateTag,
                                                    ChildStderr&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}
inline void ChildStderr::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(ChildStderr, inner));
}
static_assert(
    sizeof(ChildStdin) == 4,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(ChildStdin) == 4,
    "Verify that ADT layout didn't change since this header got generated");
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std7process10ChildStdinNtNtNtCs9kG8YiNG2f0_u4core3ops4drop4Drop4dropB6_u(
    ::rs::std::process::ChildStdin&);
}
inline ChildStdin::~ChildStdin() {
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std7process10ChildStdinNtNtNtCs9kG8YiNG2f0_u4core3ops4drop4Drop4dropB6_u(
          *this);
}
inline ::rs::std::process::ChildStdin::ChildStdin(::crubit::UnsafeRelocateTag,
                                                  ChildStdin&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}
inline void ChildStdin::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(ChildStdin, inner));
}
static_assert(
    sizeof(ChildStdout) == 4,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(ChildStdout) == 4,
    "Verify that ADT layout didn't change since this header got generated");
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std7process11ChildStdoutNtNtNtCs9kG8YiNG2f0_u4core3ops4drop4Drop4dropB6_u(
    ::rs::std::process::ChildStdout&);
}
inline ChildStdout::~ChildStdout() {
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std7process11ChildStdoutNtNtNtCs9kG8YiNG2f0_u4core3ops4drop4Drop4dropB6_u(
          *this);
}
inline ::rs::std::process::ChildStdout::ChildStdout(::crubit::UnsafeRelocateTag,
                                                    ChildStdout&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}
inline void ChildStdout::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(ChildStdout, inner));
}
static_assert(
    sizeof(Command) == 200,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(Command) == 8,
    "Verify that ADT layout didn't change since this header got generated");
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std7process7CommandNtNtNtCs9kG8YiNG2f0_u4core3ops4drop4Drop4dropB6_u(
    ::rs::std::process::Command&);
}
inline Command::~Command() {
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std7process7CommandNtNtNtCs9kG8YiNG2f0_u4core3ops4drop4Drop4dropB6_u(
          *this);
}
inline ::rs::std::process::Command::Command(::crubit::UnsafeRelocateTag,
                                            Command&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}

namespace __crubit_internal {
extern "C" ::rs::std::process::Command& $(__anon1)
    __crubit_thunk_818b180788380d74__uRNvMsi_uNtCsb7ytMsthdgm_u3std7processNtB5_u7Command9env_uclear(
        ::rs::std::process::Command&);
}
inline ::rs::std::process::Command& $(__anon1) Command::env_clear() &
    $(__anon1) CRUBIT_LIFETIME_BOUND {
  auto&& self = *this;
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMsi_uNtCsb7ytMsthdgm_u3std7processNtB5_u7Command9env_uclear(
          self);
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMsi_uNtCsb7ytMsthdgm_u3std7processNtB5_u7Command5spawn(
    ::rs::std::process::Command&,
    rs_std::Result<::rs::std::process::Child, ::rs::std::io::Error>* __ret_ptr);
}
inline rs_std::Result<::rs::std::process::Child, ::rs::std::io::Error>
Command::spawn() {
  auto&& self = *this;
  crubit::Slot<rs_std::Result<::rs::std::process::Child, ::rs::std::io::Error>>
      __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMsi_uNtCsb7ytMsthdgm_u3std7processNtB5_u7Command5spawn(
          self, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMsi_uNtCsb7ytMsthdgm_u3std7processNtB5_u7Command6output(
    ::rs::std::process::Command&,
    rs_std::Result<::rs::std::process::Output, ::rs::std::io::Error>*
        __ret_ptr);
}
inline rs_std::Result<::rs::std::process::Output, ::rs::std::io::Error>
Command::output() {
  auto&& self = *this;
  crubit::Slot<rs_std::Result<::rs::std::process::Output, ::rs::std::io::Error>>
      __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMsi_uNtCsb7ytMsthdgm_u3std7processNtB5_u7Command6output(
          self, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMsi_uNtCsb7ytMsthdgm_u3std7processNtB5_u7Command6status(
    ::rs::std::process::Command&,
    rs_std::Result<::rs::std::process::ExitStatus, ::rs::std::io::Error>*
        __ret_ptr);
}
inline rs_std::Result<::rs::std::process::ExitStatus, ::rs::std::io::Error>
Command::status() {
  auto&& self = *this;
  crubit::Slot<
      rs_std::Result<::rs::std::process::ExitStatus, ::rs::std::io::Error>>
      __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMsi_uNtCsb7ytMsthdgm_u3std7processNtB5_u7Command6status(
          self, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMsi_uNtCsb7ytMsthdgm_u3std7processNtB5_u7Command8get_uargs(
    ::rs::std::process::Command const&,
    ::rs::std::process::CommandArgs* __ret_ptr);
}
inline ::rs::std::process::CommandArgs Command::get_args() const& $(__anon1)
    CRUBIT_LIFETIME_BOUND {
  auto&& self = *this;
  crubit::Slot<::rs::std::process::CommandArgs> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMsi_uNtCsb7ytMsthdgm_u3std7processNtB5_u7Command8get_uargs(
          self, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMsi_uNtCsb7ytMsthdgm_u3std7processNtB5_u7Command8get_uenvs(
    ::rs::std::process::Command const&,
    ::rs::std::process::CommandEnvs* __ret_ptr);
}
inline ::rs::std::process::CommandEnvs Command::get_envs() const& $(__anon1)
    CRUBIT_LIFETIME_BOUND {
  auto&& self = *this;
  crubit::Slot<::rs::std::process::CommandEnvs> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMsi_uNtCsb7ytMsthdgm_u3std7processNtB5_u7Command8get_uenvs(
          self, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}
inline void Command::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(Command, inner));
}
static_assert(
    sizeof(CommandArgs) == 16,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(CommandArgs) == 8,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(::std::is_trivially_destructible_v<CommandArgs>);
static_assert(
    ::std::is_trivially_move_constructible_v<::rs::std::process::CommandArgs>);
static_assert(
    ::std::is_trivially_move_assignable_v<::rs::std::process::CommandArgs>);
inline ::rs::std::process::CommandArgs::CommandArgs(::crubit::UnsafeRelocateTag,
                                                    CommandArgs&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}
inline void CommandArgs::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(CommandArgs, inner));
}
static_assert(
    sizeof(CommandEnvs) == 72,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(CommandEnvs) == 8,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(::std::is_trivially_destructible_v<CommandEnvs>);
static_assert(
    ::std::is_trivially_move_constructible_v<::rs::std::process::CommandEnvs>);
static_assert(
    ::std::is_trivially_move_assignable_v<::rs::std::process::CommandEnvs>);
inline ::rs::std::process::CommandEnvs::CommandEnvs(::crubit::UnsafeRelocateTag,
                                                    CommandEnvs&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}
inline void CommandEnvs::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(CommandEnvs, iter));
}
static_assert(
    sizeof(ExitCode) == 1,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(ExitCode) == 1,
    "Verify that ADT layout didn't change since this header got generated");
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std7process8ExitCodeNtNtCs9kG8YiNG2f0_u4core7default7Default7defaultB6_u(
    ::rs::std::process::ExitCode* __ret_ptr);
}
inline ::rs::std::process::ExitCode::ExitCode() {
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std7process8ExitCodeNtNtCs9kG8YiNG2f0_u4core7default7Default7defaultB6_u(
          this);
}
static_assert(::std::is_trivially_destructible_v<ExitCode>);
static_assert(
    ::std::is_trivially_move_constructible_v<::rs::std::process::ExitCode>);
static_assert(
    ::std::is_trivially_move_assignable_v<::rs::std::process::ExitCode>);
static_assert(
    ::std::is_trivially_copy_constructible_v<::rs::std::process::ExitCode>);
static_assert(
    ::std::is_trivially_copy_assignable_v<::rs::std::process::ExitCode>);
inline ::rs::std::process::ExitCode::ExitCode(::crubit::UnsafeRelocateTag,
                                              ExitCode&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}

namespace __crubit_internal {
extern "C" bool
__crubit_thunk_818b180788380d74__uRNvXs1n_uNtCsb7ytMsthdgm_u3std7processNtB6_u8ExitCodeNtNtCs9kG8YiNG2f0_u4core3cmp9PartialEq2eq(
    ::rs::std::process::ExitCode const&, ::rs::std::process::ExitCode const&);
}
inline bool ExitCode::operator==(
    ::rs::std::process::ExitCode const& other) const {
  auto&& self = *this;
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXs1n_uNtCsb7ytMsthdgm_u3std7processNtB6_u8ExitCodeNtNtCs9kG8YiNG2f0_u4core3cmp9PartialEq2eq(
          self, other);
}
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std7process8ExitCodeINtNtCs9kG8YiNG2f0_u4core7convert4FromhE4fromB6_u(
    ::std::uint8_t, ::rs::std::process::ExitCode* __ret_ptr);
}
inline ExitCode::ExitCode(::std::uint8_t value) {
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std7process8ExitCodeINtNtCs9kG8YiNG2f0_u4core7convert4FromhE4fromB6_u(
          value, this);
}
inline void ExitCode::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(ExitCode, __field0));
}
static_assert(
    sizeof(ExitStatus) == 4,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(ExitStatus) == 4,
    "Verify that ADT layout didn't change since this header got generated");
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std7process10ExitStatusNtNtCs9kG8YiNG2f0_u4core7default7Default7defaultB6_u(
    ::rs::std::process::ExitStatus* __ret_ptr);
}
inline ::rs::std::process::ExitStatus::ExitStatus() {
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std7process10ExitStatusNtNtCs9kG8YiNG2f0_u4core7default7Default7defaultB6_u(
          this);
}
static_assert(::std::is_trivially_destructible_v<ExitStatus>);
static_assert(
    ::std::is_trivially_move_constructible_v<::rs::std::process::ExitStatus>);
static_assert(
    ::std::is_trivially_move_assignable_v<::rs::std::process::ExitStatus>);
static_assert(
    ::std::is_trivially_copy_constructible_v<::rs::std::process::ExitStatus>);
static_assert(
    ::std::is_trivially_copy_assignable_v<::rs::std::process::ExitStatus>);
inline ::rs::std::process::ExitStatus::ExitStatus(::crubit::UnsafeRelocateTag,
                                                  ExitStatus&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}

namespace __crubit_internal {
extern "C" bool
__crubit_thunk_818b180788380d74__uRNvMsF_uNtCsb7ytMsthdgm_u3std7processNtB5_u10ExitStatus7success(
    ::rs::std::process::ExitStatus const&);
}
inline bool ExitStatus::success() const {
  auto&& self = *this;
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMsF_uNtCsb7ytMsthdgm_u3std7processNtB5_u10ExitStatus7success(
          self);
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMsF_uNtCsb7ytMsthdgm_u3std7processNtB5_u10ExitStatus4code(
    ::rs::std::process::ExitStatus const&, unsigned char* __ret_ptr);
}
inline ::std::optional<::std::int32_t> ExitStatus::code() const {
  auto&& self = *this;
  unsigned char __return_value_storage
      [::crubit::OptionAbi<::crubit::TransmuteAbi<::std::int32_t>>::kSize];
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMsF_uNtCsb7ytMsthdgm_u3std7processNtB5_u10ExitStatus4code(
          self, __return_value_storage);
  return ::crubit::internal::Decode<
      ::crubit::OptionAbi<::crubit::TransmuteAbi<::std::int32_t>>>(
      ::crubit::OptionAbi<::crubit::TransmuteAbi<::std::int32_t>>(
          ::crubit::TransmuteAbi<::std::int32_t>()),
      __return_value_storage);
}

namespace __crubit_internal {
extern "C" bool
__crubit_thunk_818b180788380d74__uRNvXs15_uNtCsb7ytMsthdgm_u3std7processNtB6_u10ExitStatusNtNtCs9kG8YiNG2f0_u4core3cmp9PartialEq2eq(
    ::rs::std::process::ExitStatus const&,
    ::rs::std::process::ExitStatus const&);
}
inline bool ExitStatus::operator==(
    ::rs::std::process::ExitStatus const& other) const {
  auto&& self = *this;
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXs15_uNtCsb7ytMsthdgm_u3std7processNtB6_u10ExitStatusNtNtCs9kG8YiNG2f0_u4core3cmp9PartialEq2eq(
          self, other);
}
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std7process10ExitStatusNtNtCsaddbpR6HRqH_u5alloc6string8ToString9to_ustringB6_u(
    ::rs::std::process::ExitStatus const&,
    ::rs::alloc::string::String* __ret_ptr);
inline void ExitStatus::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(ExitStatus, __field0));
}
static_assert(
    sizeof(Output) == 56,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(Output) == 8,
    "Verify that ADT layout didn't change since this header got generated");
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std7process6OutputNtNtNtCs9kG8YiNG2f0_u4core3ops4drop4Drop4dropB6_u(
    ::rs::std::process::Output&);
}
inline Output::~Output() {
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std7process6OutputNtNtNtCs9kG8YiNG2f0_u4core3ops4drop4Drop4dropB6_u(
          *this);
}
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std7process6OutputNtNtCs9kG8YiNG2f0_u4core5clone5Clone5cloneB6_u(
    ::rs::std::process::Output const&, ::rs::std::process::Output* __ret_ptr);
}
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std7process6OutputNtNtCs9kG8YiNG2f0_u4core5clone5Clone10clone_ufromB6_u(
    ::rs::std::process::Output&, ::rs::std::process::Output const&);
}
inline ::rs::std::process::Output::Output(const Output& other) {
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std7process6OutputNtNtCs9kG8YiNG2f0_u4core5clone5Clone5cloneB6_u(
          other, this);
}
inline ::rs::std::process::Output& ::rs::std::process::Output::operator=(
    const Output& other) {
  if (this != &other) {
    __crubit_internal::
        __crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std7process6OutputNtNtCs9kG8YiNG2f0_u4core5clone5Clone10clone_ufromB6_u(
            *this, other);
  }
  return *this;
}
inline ::rs::std::process::Output::Output(::crubit::UnsafeRelocateTag,
                                          Output&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}

namespace __crubit_internal {
extern "C" bool
__crubit_thunk_818b180788380d74__uRNvXs11_uNtCsb7ytMsthdgm_u3std7processNtB6_u6OutputNtNtCs9kG8YiNG2f0_u4core3cmp9PartialEq2eq(
    ::rs::std::process::Output const&, ::rs::std::process::Output const&);
}
inline bool Output::operator==(::rs::std::process::Output const& other) const {
  auto&& self = *this;
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXs11_uNtCsb7ytMsthdgm_u3std7processNtB6_u6OutputNtNtCs9kG8YiNG2f0_u4core3cmp9PartialEq2eq(
          self, other);
}
inline void Output::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(Output, stdout));
  static_assert(24 == offsetof(Output, stderr));
  static_assert(48 == offsetof(Output, status));
}
static_assert(
    sizeof(Stdio) == 8,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(Stdio) == 4,
    "Verify that ADT layout didn't change since this header got generated");
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std7process5StdioNtNtNtCs9kG8YiNG2f0_u4core3ops4drop4Drop4dropB6_u(
    ::rs::std::process::Stdio&);
}
inline Stdio::~Stdio() {
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std7process5StdioNtNtNtCs9kG8YiNG2f0_u4core3ops4drop4Drop4dropB6_u(
          *this);
}
inline ::rs::std::process::Stdio::Stdio(::crubit::UnsafeRelocateTag,
                                        Stdio&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMst_uNtCsb7ytMsthdgm_u3std7processNtB5_u5Stdio5piped(
    ::rs::std::process::Stdio* __ret_ptr);
}
inline ::rs::std::process::Stdio Stdio::piped() {
  crubit::Slot<::rs::std::process::Stdio> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMst_uNtCsb7ytMsthdgm_u3std7processNtB5_u5Stdio5piped(
          __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMst_uNtCsb7ytMsthdgm_u3std7processNtB5_u5Stdio7inherit(
    ::rs::std::process::Stdio* __ret_ptr);
}
inline ::rs::std::process::Stdio Stdio::inherit() {
  crubit::Slot<::rs::std::process::Stdio> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMst_uNtCsb7ytMsthdgm_u3std7processNtB5_u5Stdio7inherit(
          __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMst_uNtCsb7ytMsthdgm_u3std7processNtB5_u5Stdio4null(
    ::rs::std::process::Stdio* __ret_ptr);
}
inline ::rs::std::process::Stdio Stdio::null() {
  crubit::Slot<::rs::std::process::Stdio> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMst_uNtCsb7ytMsthdgm_u3std7processNtB5_u5Stdio4null(
          __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std7process5StdioINtNtCs9kG8YiNG2f0_u4core7convert4FromNtNtNtB6_u2io5stdio6StdoutE4fromB6_u(
    ::rs::std::io::Stdout*, ::rs::std::process::Stdio* __ret_ptr);
}
inline Stdio::Stdio(::rs::std::io::Stdout value) {
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std7process5StdioINtNtCs9kG8YiNG2f0_u4core7convert4FromNtNtNtB6_u2io5stdio6StdoutE4fromB6_u(
          &value, this);
}
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std7process5StdioINtNtCs9kG8YiNG2f0_u4core7convert4FromNtNtNtB6_u2io5stdio6StderrE4fromB6_u(
    ::rs::std::io::Stderr*, ::rs::std::process::Stdio* __ret_ptr);
}
inline Stdio::Stdio(::rs::std::io::Stderr value) {
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std7process5StdioINtNtCs9kG8YiNG2f0_u4core7convert4FromNtNtNtB6_u2io5stdio6StderrE4fromB6_u(
          &value, this);
}
inline void Stdio::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(Stdio, __field0));
}
namespace __crubit_internal {
extern "C" [[noreturn]] void
__crubit_thunk_818b180788380d74__uRNvNtCsb7ytMsthdgm_u3std7process5abort();
}
inline void abort() {
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvNtCsb7ytMsthdgm_u3std7process5abort();
}

namespace __crubit_internal {
extern "C" [[noreturn]] void
__crubit_thunk_818b180788380d74__uRNvNtCsb7ytMsthdgm_u3std7process4exit(
    ::std::int32_t);
}
inline void exit(::std::int32_t code) {
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvNtCsb7ytMsthdgm_u3std7process4exit(
          code);
}

namespace __crubit_internal {
extern "C" ::std::uint32_t
__crubit_thunk_818b180788380d74__uRNvNtCsb7ytMsthdgm_u3std7process2id();
}
inline ::std::uint32_t id() {
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvNtCsb7ytMsthdgm_u3std7process2id();
}

}  // namespace rs::std::process

namespace rs::std::sync {

static_assert(
    sizeof(WaitTimeoutResult) == 1,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(WaitTimeoutResult) == 1,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(::std::is_trivially_destructible_v<WaitTimeoutResult>);
static_assert(::std::is_trivially_move_constructible_v<
              ::rs::std::sync::WaitTimeoutResult>);
static_assert(
    ::std::is_trivially_move_assignable_v<::rs::std::sync::WaitTimeoutResult>);
static_assert(::std::is_trivially_copy_constructible_v<
              ::rs::std::sync::WaitTimeoutResult>);
static_assert(
    ::std::is_trivially_copy_assignable_v<::rs::std::sync::WaitTimeoutResult>);
inline ::rs::std::sync::WaitTimeoutResult::WaitTimeoutResult(
    ::crubit::UnsafeRelocateTag, WaitTimeoutResult&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}

namespace __crubit_internal {
extern "C" bool
__crubit_thunk_818b180788380d74__uRNvMNtCsb7ytMsthdgm_u3std4syncNtB2_u17WaitTimeoutResult9timed_uout(
    ::rs::std::sync::WaitTimeoutResult const&);
}
inline bool WaitTimeoutResult::timed_out() const {
  auto&& self = *this;
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMNtCsb7ytMsthdgm_u3std4syncNtB2_u17WaitTimeoutResult9timed_uout(
          self);
}

namespace __crubit_internal {
extern "C" bool
__crubit_thunk_818b180788380d74__uRNvXs1_uNtCsb7ytMsthdgm_u3std4syncNtB5_u17WaitTimeoutResultNtNtCs9kG8YiNG2f0_u4core3cmp9PartialEq2eq(
    ::rs::std::sync::WaitTimeoutResult const&,
    ::rs::std::sync::WaitTimeoutResult const&);
}
inline bool WaitTimeoutResult::operator==(
    ::rs::std::sync::WaitTimeoutResult const& other) const {
  auto&& self = *this;
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXs1_uNtCsb7ytMsthdgm_u3std4syncNtB5_u17WaitTimeoutResultNtNtCs9kG8YiNG2f0_u4core3cmp9PartialEq2eq(
          self, other);
}
inline void WaitTimeoutResult::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(WaitTimeoutResult, __field0));
}
}  // namespace rs::std::sync

namespace rs::std::sync {

static_assert(
    sizeof(Barrier) == 40,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(Barrier) == 8,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(::std::is_trivially_destructible_v<Barrier>);
static_assert(
    ::std::is_trivially_move_constructible_v<::rs::std::sync::Barrier>);
static_assert(::std::is_trivially_move_assignable_v<::rs::std::sync::Barrier>);
inline ::rs::std::sync::Barrier::Barrier(::crubit::UnsafeRelocateTag,
                                         Barrier&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMs0_uNtNtCsb7ytMsthdgm_u3std4sync7barrierNtB5_u7Barrier3new(
    ::std::uintptr_t, ::rs::std::sync::Barrier* __ret_ptr);
}
inline ::rs::std::sync::Barrier Barrier::new_(::std::uintptr_t n) {
  crubit::Slot<::rs::std::sync::Barrier> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMs0_uNtNtCsb7ytMsthdgm_u3std4sync7barrierNtB5_u7Barrier3new(
          n, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMs0_uNtNtCsb7ytMsthdgm_u3std4sync7barrierNtB5_u7Barrier4wait(
    ::rs::std::sync::Barrier const&,
    ::rs::std::sync::BarrierWaitResult* __ret_ptr);
}
inline ::rs::std::sync::BarrierWaitResult Barrier::wait() const {
  auto&& self = *this;
  crubit::Slot<::rs::std::sync::BarrierWaitResult>
      __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMs0_uNtNtCsb7ytMsthdgm_u3std4sync7barrierNtB5_u7Barrier4wait(
          self, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}
inline void Barrier::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(Barrier, lock));
  static_assert(24 == offsetof(Barrier, num_threads));
  static_assert(32 == offsetof(Barrier, cvar));
}
static_assert(
    sizeof(BarrierWaitResult) == 1,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(BarrierWaitResult) == 1,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(::std::is_trivially_destructible_v<BarrierWaitResult>);
static_assert(::std::is_trivially_move_constructible_v<
              ::rs::std::sync::BarrierWaitResult>);
static_assert(
    ::std::is_trivially_move_assignable_v<::rs::std::sync::BarrierWaitResult>);
inline ::rs::std::sync::BarrierWaitResult::BarrierWaitResult(
    ::crubit::UnsafeRelocateTag, BarrierWaitResult&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}

namespace __crubit_internal {
extern "C" bool
__crubit_thunk_818b180788380d74__uRNvMs2_uNtNtCsb7ytMsthdgm_u3std4sync7barrierNtB5_u17BarrierWaitResult9is_uleader(
    ::rs::std::sync::BarrierWaitResult const&);
}
inline bool BarrierWaitResult::is_leader() const {
  auto&& self = *this;
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMs2_uNtNtCsb7ytMsthdgm_u3std4sync7barrierNtB5_u17BarrierWaitResult9is_uleader(
          self);
}
inline void BarrierWaitResult::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(BarrierWaitResult, __field0));
}
}  // namespace rs::std::sync

namespace rs::std::sync::mpsc {

static_assert(
    sizeof(RecvTimeoutError) == 1,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(RecvTimeoutError) == 1,
    "Verify that ADT layout didn't change since this header got generated");

// `static` constructor
inline constexpr RecvTimeoutError RecvTimeoutError::MakeTimeout() {
  return RecvTimeoutError(PrivateBytesTag{}, {0});
}

// `static` constructor
inline constexpr RecvTimeoutError RecvTimeoutError::MakeDisconnected() {
  return RecvTimeoutError(PrivateBytesTag{}, {1});
}
static_assert(::std::is_trivially_destructible_v<RecvTimeoutError>);
static_assert(::std::is_trivially_move_constructible_v<
              ::rs::std::sync::mpsc::RecvTimeoutError>);
static_assert(::std::is_trivially_move_assignable_v<
              ::rs::std::sync::mpsc::RecvTimeoutError>);
static_assert(::std::is_trivially_copy_constructible_v<
              ::rs::std::sync::mpsc::RecvTimeoutError>);
static_assert(::std::is_trivially_copy_assignable_v<
              ::rs::std::sync::mpsc::RecvTimeoutError>);
inline ::rs::std::sync::mpsc::RecvTimeoutError::RecvTimeoutError(
    ::crubit::UnsafeRelocateTag, RecvTimeoutError&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}

namespace __crubit_internal {
extern "C" bool
__crubit_thunk_818b180788380d74__uRNvXsU_uNtNtCsb7ytMsthdgm_u3std4sync4mpscNtB5_u16RecvTimeoutErrorNtNtCs9kG8YiNG2f0_u4core3cmp9PartialEq2eq(
    ::rs::std::sync::mpsc::RecvTimeoutError const&,
    ::rs::std::sync::mpsc::RecvTimeoutError const&);
}
inline bool RecvTimeoutError::operator==(
    ::rs::std::sync::mpsc::RecvTimeoutError const& other) const {
  auto&& self = *this;
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXsU_uNtNtCsb7ytMsthdgm_u3std4sync4mpscNtB5_u16RecvTimeoutErrorNtNtCs9kG8YiNG2f0_u4core3cmp9PartialEq2eq(
          self, other);
}
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtNtCsb7ytMsthdgm_u3std4sync4mpsc16RecvTimeoutErrorNtNtCsaddbpR6HRqH_u5alloc6string8ToString9to_ustringB8_u(
    ::rs::std::sync::mpsc::RecvTimeoutError const&,
    ::rs::alloc::string::String* __ret_ptr);
inline void RecvTimeoutError::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(RecvTimeoutError, __opaque_blob_of_bytes));
}
static_assert(
    sizeof(TryRecvError) == 1,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(TryRecvError) == 1,
    "Verify that ADT layout didn't change since this header got generated");

// `static` constructor
inline constexpr TryRecvError TryRecvError::MakeEmpty() {
  return TryRecvError(PrivateBytesTag{}, {0});
}

// `static` constructor
inline constexpr TryRecvError TryRecvError::MakeDisconnected() {
  return TryRecvError(PrivateBytesTag{}, {1});
}
static_assert(::std::is_trivially_destructible_v<TryRecvError>);
static_assert(::std::is_trivially_move_constructible_v<
              ::rs::std::sync::mpsc::TryRecvError>);
static_assert(
    ::std::is_trivially_move_assignable_v<::rs::std::sync::mpsc::TryRecvError>);
static_assert(::std::is_trivially_copy_constructible_v<
              ::rs::std::sync::mpsc::TryRecvError>);
static_assert(
    ::std::is_trivially_copy_assignable_v<::rs::std::sync::mpsc::TryRecvError>);
inline ::rs::std::sync::mpsc::TryRecvError::TryRecvError(
    ::crubit::UnsafeRelocateTag, TryRecvError&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}

namespace __crubit_internal {
extern "C" bool
__crubit_thunk_818b180788380d74__uRNvXsN_uNtNtCsb7ytMsthdgm_u3std4sync4mpscNtB5_u12TryRecvErrorNtNtCs9kG8YiNG2f0_u4core3cmp9PartialEq2eq(
    ::rs::std::sync::mpsc::TryRecvError const&,
    ::rs::std::sync::mpsc::TryRecvError const&);
}
inline bool TryRecvError::operator==(
    ::rs::std::sync::mpsc::TryRecvError const& other) const {
  auto&& self = *this;
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXsN_uNtNtCsb7ytMsthdgm_u3std4sync4mpscNtB5_u12TryRecvErrorNtNtCs9kG8YiNG2f0_u4core3cmp9PartialEq2eq(
          self, other);
}
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtNtCsb7ytMsthdgm_u3std4sync4mpsc12TryRecvErrorNtNtCsaddbpR6HRqH_u5alloc6string8ToString9to_ustringB8_u(
    ::rs::std::sync::mpsc::TryRecvError const&,
    ::rs::alloc::string::String* __ret_ptr);
inline void TryRecvError::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(TryRecvError, __opaque_blob_of_bytes));
}
}  // namespace rs::std::sync::mpsc

namespace rs::std::sync {

static_assert(
    sizeof(Once) == 4,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(Once) == 4,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(::std::is_trivially_destructible_v<Once>);
static_assert(::std::is_trivially_move_constructible_v<::rs::std::sync::Once>);
static_assert(::std::is_trivially_move_assignable_v<::rs::std::sync::Once>);
inline ::rs::std::sync::Once::Once(::crubit::UnsafeRelocateTag, Once&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMs0_uNtNtCsb7ytMsthdgm_u3std4sync4onceNtB5_u4Once3new(
    ::rs::std::sync::Once* __ret_ptr);
}
inline ::rs::std::sync::Once Once::new_() {
  crubit::Slot<::rs::std::sync::Once> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMs0_uNtNtCsb7ytMsthdgm_u3std4sync4onceNtB5_u4Once3new(
          __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" bool
__crubit_thunk_818b180788380d74__uRNvMs0_uNtNtCsb7ytMsthdgm_u3std4sync4onceNtB5_u4Once12is_ucompleted(
    ::rs::std::sync::Once const&);
}
inline bool Once::is_completed() const {
  auto&& self = *this;
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMs0_uNtNtCsb7ytMsthdgm_u3std4sync4onceNtB5_u4Once12is_ucompleted(
          self);
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMs0_uNtNtCsb7ytMsthdgm_u3std4sync4onceNtB5_u4Once4wait(
    ::rs::std::sync::Once const&);
}
inline void Once::wait() const {
  auto&& self = *this;
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMs0_uNtNtCsb7ytMsthdgm_u3std4sync4onceNtB5_u4Once4wait(
          self);
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMs0_uNtNtCsb7ytMsthdgm_u3std4sync4onceNtB5_u4Once10wait_uforce(
    ::rs::std::sync::Once const&);
}
inline void Once::wait_force() const {
  auto&& self = *this;
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMs0_uNtNtCsb7ytMsthdgm_u3std4sync4onceNtB5_u4Once10wait_uforce(
          self);
}
inline void Once::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(Once, inner));
}
static_assert(
    sizeof(OnceState) == 8,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(OnceState) == 4,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(::std::is_trivially_destructible_v<OnceState>);
static_assert(
    ::std::is_trivially_move_constructible_v<::rs::std::sync::OnceState>);
static_assert(
    ::std::is_trivially_move_assignable_v<::rs::std::sync::OnceState>);
inline ::rs::std::sync::OnceState::OnceState(::crubit::UnsafeRelocateTag,
                                             OnceState&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}

namespace __crubit_internal {
extern "C" bool
__crubit_thunk_818b180788380d74__uRNvMs2_uNtNtCsb7ytMsthdgm_u3std4sync4onceNtB5_u9OnceState11is_upoisoned(
    ::rs::std::sync::OnceState const&);
}
inline bool OnceState::is_poisoned() const {
  auto&& self = *this;
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMs2_uNtNtCsb7ytMsthdgm_u3std4sync4onceNtB5_u9OnceState11is_upoisoned(
          self);
}
inline void OnceState::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(OnceState, inner));
}
}  // namespace rs::std::sync

namespace rs::std::sync {

static_assert(
    sizeof(Condvar) == 4,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(Condvar) == 4,
    "Verify that ADT layout didn't change since this header got generated");
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtNtNtCsb7ytMsthdgm_u3std4sync6poison7condvar7CondvarNtNtCs9kG8YiNG2f0_u4core7default7Default7defaultBa_u(
    ::rs::std::sync::Condvar* __ret_ptr);
}
inline ::rs::std::sync::Condvar::Condvar() {
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtNtNtCsb7ytMsthdgm_u3std4sync6poison7condvar7CondvarNtNtCs9kG8YiNG2f0_u4core7default7Default7defaultBa_u(
          this);
}
static_assert(::std::is_trivially_destructible_v<Condvar>);
static_assert(
    ::std::is_trivially_move_constructible_v<::rs::std::sync::Condvar>);
static_assert(::std::is_trivially_move_assignable_v<::rs::std::sync::Condvar>);
inline ::rs::std::sync::Condvar::Condvar(::crubit::UnsafeRelocateTag,
                                         Condvar&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMNtNtNtCsb7ytMsthdgm_u3std4sync6poison7condvarNtB2_u7Condvar3new(
    ::rs::std::sync::Condvar* __ret_ptr);
}
inline ::rs::std::sync::Condvar Condvar::new_() {
  crubit::Slot<::rs::std::sync::Condvar> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMNtNtNtCsb7ytMsthdgm_u3std4sync6poison7condvarNtB2_u7Condvar3new(
          __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMNtNtNtCsb7ytMsthdgm_u3std4sync6poison7condvarNtB2_u7Condvar10notify_uone(
    ::rs::std::sync::Condvar const&);
}
inline void Condvar::notify_one() const {
  auto&& self = *this;
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMNtNtNtCsb7ytMsthdgm_u3std4sync6poison7condvarNtB2_u7Condvar10notify_uone(
          self);
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMNtNtNtCsb7ytMsthdgm_u3std4sync6poison7condvarNtB2_u7Condvar10notify_uall(
    ::rs::std::sync::Condvar const&);
}
inline void Condvar::notify_all() const {
  auto&& self = *this;
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMNtNtNtCsb7ytMsthdgm_u3std4sync6poison7condvarNtB2_u7Condvar10notify_uall(
          self);
}
inline void Condvar::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(Condvar, inner));
}
}  // namespace rs::std::sync

namespace rs::std::thread {

static_assert(
    sizeof(Builder) == 48,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(Builder) == 8,
    "Verify that ADT layout didn't change since this header got generated");
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtNtCsb7ytMsthdgm_u3std6thread7builder7BuilderNtNtNtCs9kG8YiNG2f0_u4core3ops4drop4Drop4dropB8_u(
    ::rs::std::thread::Builder&);
}
inline Builder::~Builder() {
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtNtCsb7ytMsthdgm_u3std6thread7builder7BuilderNtNtNtCs9kG8YiNG2f0_u4core3ops4drop4Drop4dropB8_u(
          *this);
}
inline ::rs::std::thread::Builder::Builder(::crubit::UnsafeRelocateTag,
                                           Builder&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMNtNtCsb7ytMsthdgm_u3std6thread7builderNtB2_u7Builder3new(
    ::rs::std::thread::Builder* __ret_ptr);
}
inline ::rs::std::thread::Builder Builder::new_() {
  crubit::Slot<::rs::std::thread::Builder> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMNtNtCsb7ytMsthdgm_u3std6thread7builderNtB2_u7Builder3new(
          __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}
inline void Builder::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(Builder, stack_size));
  static_assert(16 == offsetof(Builder, name));
  static_assert(40 == offsetof(Builder, no_hooks));
}
}  // namespace rs::std::thread

namespace rs::std::thread {

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvNtNtCsb7ytMsthdgm_u3std6thread7current7current(
    ::rs::std::thread::Thread* __ret_ptr);
}
inline ::rs::std::thread::Thread current() {
  crubit::Slot<::rs::std::thread::Thread> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvNtNtCsb7ytMsthdgm_u3std6thread7current7current(
          __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

}  // namespace rs::std::thread

namespace rs::std::thread {

namespace __crubit_internal {
extern "C" bool
__crubit_thunk_818b180788380d74__uRNvNtNtCsb7ytMsthdgm_u3std6thread9functions9panicking();
}
inline bool panicking() {
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvNtNtCsb7ytMsthdgm_u3std6thread9functions9panicking();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvNtNtCsb7ytMsthdgm_u3std6thread9functions4park();
}
inline void park() {
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvNtNtCsb7ytMsthdgm_u3std6thread9functions4park();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvNtNtCsb7ytMsthdgm_u3std6thread9functions12park_utimeout(
    ::rs::core::time::Duration*);
}
inline void park_timeout(::rs::core::time::Duration dur) {
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvNtNtCsb7ytMsthdgm_u3std6thread9functions12park_utimeout(
          &dur);
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvNtNtCsb7ytMsthdgm_u3std6thread9functions15park_utimeout_ums(
    ::std::uint32_t);
}
inline void park_timeout_ms(::std::uint32_t ms) {
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvNtNtCsb7ytMsthdgm_u3std6thread9functions15park_utimeout_ums(
          ms);
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvNtNtCsb7ytMsthdgm_u3std6thread9functions5sleep(
    ::rs::core::time::Duration*);
}
inline void sleep(::rs::core::time::Duration dur) {
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvNtNtCsb7ytMsthdgm_u3std6thread9functions5sleep(
          &dur);
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvNtNtCsb7ytMsthdgm_u3std6thread9functions8sleep_ums(
    ::std::uint32_t);
}
inline void sleep_ms(::std::uint32_t ms) {
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvNtNtCsb7ytMsthdgm_u3std6thread9functions8sleep_ums(
          ms);
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvNtNtCsb7ytMsthdgm_u3std6thread9functions9yield_unow();
}
inline void yield_now() {
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvNtNtCsb7ytMsthdgm_u3std6thread9functions9yield_unow();
}

}  // namespace rs::std::thread

namespace rs::std::thread {

static_assert(
    sizeof(ThreadId) == 8,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(ThreadId) == 8,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(::std::is_trivially_destructible_v<ThreadId>);
static_assert(
    ::std::is_trivially_move_constructible_v<::rs::std::thread::ThreadId>);
static_assert(
    ::std::is_trivially_move_assignable_v<::rs::std::thread::ThreadId>);
static_assert(
    ::std::is_trivially_copy_constructible_v<::rs::std::thread::ThreadId>);
static_assert(
    ::std::is_trivially_copy_assignable_v<::rs::std::thread::ThreadId>);
inline ::rs::std::thread::ThreadId::ThreadId(::crubit::UnsafeRelocateTag,
                                             ThreadId&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}

namespace __crubit_internal {
extern "C" bool
__crubit_thunk_818b180788380d74__uRNvXs1_uNtNtCsb7ytMsthdgm_u3std6thread2idNtB5_u8ThreadIdNtNtCs9kG8YiNG2f0_u4core3cmp9PartialEq2eq(
    ::rs::std::thread::ThreadId const&, ::rs::std::thread::ThreadId const&);
}
inline bool ThreadId::operator==(
    ::rs::std::thread::ThreadId const& other) const {
  auto&& self = *this;
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXs1_uNtNtCsb7ytMsthdgm_u3std6thread2idNtB5_u8ThreadIdNtNtCs9kG8YiNG2f0_u4core3cmp9PartialEq2eq(
          self, other);
}
inline void ThreadId::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(ThreadId, __field0));
}
}  // namespace rs::std::thread

namespace rs::std::thread {

static_assert(
    sizeof(Scope) == 8,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(Scope) == 8,
    "Verify that ADT layout didn't change since this header got generated");
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtNtCsb7ytMsthdgm_u3std6thread6scoped5ScopeNtNtNtCs9kG8YiNG2f0_u4core3ops4drop4Drop4dropB8_u(
    ::rs::std::thread::Scope&);
}
inline Scope::~Scope() {
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtNtCsb7ytMsthdgm_u3std6thread6scoped5ScopeNtNtNtCs9kG8YiNG2f0_u4core3ops4drop4Drop4dropB8_u(
          *this);
}
inline ::rs::std::thread::Scope::Scope(::crubit::UnsafeRelocateTag,
                                       Scope&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}
inline void Scope::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(Scope, data));
}
}  // namespace rs::std::thread

namespace rs::std::thread {

static_assert(
    sizeof(Thread) == 8,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(Thread) == 8,
    "Verify that ADT layout didn't change since this header got generated");
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtNtCsb7ytMsthdgm_u3std6thread6thread6ThreadNtNtNtCs9kG8YiNG2f0_u4core3ops4drop4Drop4dropB8_u(
    ::rs::std::thread::Thread&);
}
inline Thread::~Thread() {
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtNtCsb7ytMsthdgm_u3std6thread6thread6ThreadNtNtNtCs9kG8YiNG2f0_u4core3ops4drop4Drop4dropB8_u(
          *this);
}
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtNtCsb7ytMsthdgm_u3std6thread6thread6ThreadNtNtCs9kG8YiNG2f0_u4core5clone5Clone5cloneB8_u(
    ::rs::std::thread::Thread const&, ::rs::std::thread::Thread* __ret_ptr);
}
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtNtCsb7ytMsthdgm_u3std6thread6thread6ThreadNtNtCs9kG8YiNG2f0_u4core5clone5Clone10clone_ufromB8_u(
    ::rs::std::thread::Thread&, ::rs::std::thread::Thread const&);
}
inline ::rs::std::thread::Thread::Thread(const Thread& other) {
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtNtCsb7ytMsthdgm_u3std6thread6thread6ThreadNtNtCs9kG8YiNG2f0_u4core5clone5Clone5cloneB8_u(
          other, this);
}
inline ::rs::std::thread::Thread& ::rs::std::thread::Thread::operator=(
    const Thread& other) {
  if (this != &other) {
    __crubit_internal::
        __crubit_thunk_818b180788380d74__uRNvYNtNtNtCsb7ytMsthdgm_u3std6thread6thread6ThreadNtNtCs9kG8YiNG2f0_u4core5clone5Clone10clone_ufromB8_u(
            *this, other);
  }
  return *this;
}
inline ::rs::std::thread::Thread::Thread(::crubit::UnsafeRelocateTag,
                                         Thread&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMs_uNtNtCsb7ytMsthdgm_u3std6thread6threadNtB4_u6Thread6unpark(
    ::rs::std::thread::Thread const&);
}
inline void Thread::unpark() const {
  auto&& self = *this;
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMs_uNtNtCsb7ytMsthdgm_u3std6thread6threadNtB4_u6Thread6unpark(
          self);
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMs_uNtNtCsb7ytMsthdgm_u3std6thread6threadNtB4_u6Thread2id(
    ::rs::std::thread::Thread const&, ::rs::std::thread::ThreadId* __ret_ptr);
}
inline ::rs::std::thread::ThreadId Thread::id() const {
  auto&& self = *this;
  crubit::Slot<::rs::std::thread::ThreadId> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMs_uNtNtCsb7ytMsthdgm_u3std6thread6threadNtB4_u6Thread2id(
          self, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMs_uNtNtCsb7ytMsthdgm_u3std6thread6threadNtB4_u6Thread4name(
    ::rs::std::thread::Thread const&, unsigned char* __ret_ptr);
}
inline ::std::optional<rs_std::StrRef> Thread::name() const& $(__anon1)
    CRUBIT_LIFETIME_BOUND {
  auto&& self = *this;
  unsigned char __return_value_storage
      [::crubit::OptionAbi<::crubit::TransmuteAbi<rs_std::StrRef>>::kSize];
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMs_uNtNtCsb7ytMsthdgm_u3std6thread6threadNtB4_u6Thread4name(
          self, __return_value_storage);
  return ::crubit::internal::Decode<
      ::crubit::OptionAbi<::crubit::TransmuteAbi<rs_std::StrRef>>>(
      ::crubit::OptionAbi<::crubit::TransmuteAbi<rs_std::StrRef>>(
          ::crubit::TransmuteAbi<rs_std::StrRef>()),
      __return_value_storage);
}
inline void Thread::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(Thread, inner));
}
}  // namespace rs::std::thread

namespace rs::std::time {

static_assert(
    sizeof(Instant) == 16,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(Instant) == 8,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(::std::is_trivially_destructible_v<Instant>);
static_assert(
    ::std::is_trivially_move_constructible_v<::rs::std::time::Instant>);
static_assert(::std::is_trivially_move_assignable_v<::rs::std::time::Instant>);
static_assert(
    ::std::is_trivially_copy_constructible_v<::rs::std::time::Instant>);
static_assert(::std::is_trivially_copy_assignable_v<::rs::std::time::Instant>);
inline ::rs::std::time::Instant::Instant(::crubit::UnsafeRelocateTag,
                                         Instant&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMNtCsb7ytMsthdgm_u3std4timeNtB2_u7Instant3now(
    ::rs::std::time::Instant* __ret_ptr);
}
inline ::rs::std::time::Instant Instant::now() {
  crubit::Slot<::rs::std::time::Instant> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMNtCsb7ytMsthdgm_u3std4timeNtB2_u7Instant3now(
          __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMNtCsb7ytMsthdgm_u3std4timeNtB2_u7Instant14duration_usince(
    ::rs::std::time::Instant const&, ::rs::std::time::Instant*,
    ::rs::core::time::Duration* __ret_ptr);
}
inline ::rs::core::time::Duration Instant::duration_since(
    ::rs::std::time::Instant earlier) const {
  auto&& self = *this;
  crubit::Slot<::rs::core::time::Duration> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMNtCsb7ytMsthdgm_u3std4timeNtB2_u7Instant14duration_usince(
          self, &earlier, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMNtCsb7ytMsthdgm_u3std4timeNtB2_u7Instant22checked_uduration_usince(
    ::rs::std::time::Instant const&, ::rs::std::time::Instant*,
    unsigned char* __ret_ptr);
}
inline ::std::optional<::rs::core::time::Duration>
Instant::checked_duration_since(::rs::std::time::Instant earlier) const {
  auto&& self = *this;
  unsigned char __return_value_storage[::crubit::OptionAbi<
      ::crubit::TransmuteAbi<::rs::core::time::Duration>>::kSize];
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMNtCsb7ytMsthdgm_u3std4timeNtB2_u7Instant22checked_uduration_usince(
          self, &earlier, __return_value_storage);
  return ::crubit::internal::Decode<
      ::crubit::OptionAbi<::crubit::TransmuteAbi<::rs::core::time::Duration>>>(
      ::crubit::OptionAbi<::crubit::TransmuteAbi<::rs::core::time::Duration>>(
          ::crubit::TransmuteAbi<::rs::core::time::Duration>()),
      __return_value_storage);
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMNtCsb7ytMsthdgm_u3std4timeNtB2_u7Instant25saturating_uduration_usince(
    ::rs::std::time::Instant const&, ::rs::std::time::Instant*,
    ::rs::core::time::Duration* __ret_ptr);
}
inline ::rs::core::time::Duration Instant::saturating_duration_since(
    ::rs::std::time::Instant earlier) const {
  auto&& self = *this;
  crubit::Slot<::rs::core::time::Duration> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMNtCsb7ytMsthdgm_u3std4timeNtB2_u7Instant25saturating_uduration_usince(
          self, &earlier, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMNtCsb7ytMsthdgm_u3std4timeNtB2_u7Instant7elapsed(
    ::rs::std::time::Instant const&, ::rs::core::time::Duration* __ret_ptr);
}
inline ::rs::core::time::Duration Instant::elapsed() const {
  auto&& self = *this;
  crubit::Slot<::rs::core::time::Duration> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMNtCsb7ytMsthdgm_u3std4timeNtB2_u7Instant7elapsed(
          self, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMNtCsb7ytMsthdgm_u3std4timeNtB2_u7Instant11checked_uadd(
    ::rs::std::time::Instant const&, ::rs::core::time::Duration*,
    unsigned char* __ret_ptr);
}
inline ::std::optional<::rs::std::time::Instant> Instant::checked_add(
    ::rs::core::time::Duration duration) const {
  auto&& self = *this;
  unsigned char __return_value_storage[::crubit::OptionAbi<
      ::crubit::TransmuteAbi<::rs::std::time::Instant>>::kSize];
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMNtCsb7ytMsthdgm_u3std4timeNtB2_u7Instant11checked_uadd(
          self, &duration, __return_value_storage);
  return ::crubit::internal::Decode<
      ::crubit::OptionAbi<::crubit::TransmuteAbi<::rs::std::time::Instant>>>(
      ::crubit::OptionAbi<::crubit::TransmuteAbi<::rs::std::time::Instant>>(
          ::crubit::TransmuteAbi<::rs::std::time::Instant>()),
      __return_value_storage);
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMNtCsb7ytMsthdgm_u3std4timeNtB2_u7Instant11checked_usub(
    ::rs::std::time::Instant const&, ::rs::core::time::Duration*,
    unsigned char* __ret_ptr);
}
inline ::std::optional<::rs::std::time::Instant> Instant::checked_sub(
    ::rs::core::time::Duration duration) const {
  auto&& self = *this;
  unsigned char __return_value_storage[::crubit::OptionAbi<
      ::crubit::TransmuteAbi<::rs::std::time::Instant>>::kSize];
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMNtCsb7ytMsthdgm_u3std4timeNtB2_u7Instant11checked_usub(
          self, &duration, __return_value_storage);
  return ::crubit::internal::Decode<
      ::crubit::OptionAbi<::crubit::TransmuteAbi<::rs::std::time::Instant>>>(
      ::crubit::OptionAbi<::crubit::TransmuteAbi<::rs::std::time::Instant>>(
          ::crubit::TransmuteAbi<::rs::std::time::Instant>()),
      __return_value_storage);
}

namespace __crubit_internal {
extern "C" bool
__crubit_thunk_818b180788380d74__uRNvXsk_uNtCsb7ytMsthdgm_u3std4timeNtB5_u7InstantNtNtCs9kG8YiNG2f0_u4core3cmp9PartialEq2eq(
    ::rs::std::time::Instant const&, ::rs::std::time::Instant const&);
}
inline bool Instant::operator==(::rs::std::time::Instant const& other) const {
  auto&& self = *this;
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXsk_uNtCsb7ytMsthdgm_u3std4timeNtB5_u7InstantNtNtCs9kG8YiNG2f0_u4core3cmp9PartialEq2eq(
          self, other);
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvXs_uNtCsb7ytMsthdgm_u3std4timeNtB4_u7InstantINtNtNtCs9kG8YiNG2f0_u4core3ops5arith3AddNtNtBN_u4time8DurationE3add(
    ::rs::std::time::Instant*, ::rs::core::time::Duration*,
    ::rs::std::time::Instant* __ret_ptr);
}
inline ::rs::std::time::Instant Instant::operator+(
    ::rs::core::time::Duration other) const {
  auto& self = const_cast<::std::remove_cvref_t<decltype(*this)>&>(*this);
  crubit::Slot<::rs::std::time::Instant> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXs_uNtCsb7ytMsthdgm_u3std4timeNtB4_u7InstantINtNtNtCs9kG8YiNG2f0_u4core3ops5arith3AddNtNtBN_u4time8DurationE3add(
          &self, &other, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvXs0_uNtCsb7ytMsthdgm_u3std4timeNtB5_u7InstantINtNtNtCs9kG8YiNG2f0_u4core3ops5arith9AddAssignNtNtBO_u4time8DurationE10add_uassign(
    ::rs::std::time::Instant&, ::rs::core::time::Duration*);
}
inline void Instant::operator+=(::rs::core::time::Duration other) {
  auto&& self = *this;
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXs0_uNtCsb7ytMsthdgm_u3std4timeNtB5_u7InstantINtNtNtCs9kG8YiNG2f0_u4core3ops5arith9AddAssignNtNtBO_u4time8DurationE10add_uassign(
          self, &other);
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvXs1_uNtCsb7ytMsthdgm_u3std4timeNtB5_u7InstantINtNtNtCs9kG8YiNG2f0_u4core3ops5arith3SubNtNtBO_u4time8DurationE3sub(
    ::rs::std::time::Instant*, ::rs::core::time::Duration*,
    ::rs::std::time::Instant* __ret_ptr);
}
inline ::rs::std::time::Instant Instant::operator-(
    ::rs::core::time::Duration other) const {
  auto& self = const_cast<::std::remove_cvref_t<decltype(*this)>&>(*this);
  crubit::Slot<::rs::std::time::Instant> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXs1_uNtCsb7ytMsthdgm_u3std4timeNtB5_u7InstantINtNtNtCs9kG8YiNG2f0_u4core3ops5arith3SubNtNtBO_u4time8DurationE3sub(
          &self, &other, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvXs3_uNtCsb7ytMsthdgm_u3std4timeNtB5_u7InstantNtNtNtCs9kG8YiNG2f0_u4core3ops5arith3Sub3sub(
    ::rs::std::time::Instant*, ::rs::std::time::Instant*,
    ::rs::core::time::Duration* __ret_ptr);
}
inline ::rs::core::time::Duration Instant::operator-(
    ::rs::std::time::Instant other) const {
  auto& self = const_cast<::std::remove_cvref_t<decltype(*this)>&>(*this);
  crubit::Slot<::rs::core::time::Duration> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXs3_uNtCsb7ytMsthdgm_u3std4timeNtB5_u7InstantNtNtNtCs9kG8YiNG2f0_u4core3ops5arith3Sub3sub(
          &self, &other, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvXs2_uNtCsb7ytMsthdgm_u3std4timeNtB5_u7InstantINtNtNtCs9kG8YiNG2f0_u4core3ops5arith9SubAssignNtNtBO_u4time8DurationE10sub_uassign(
    ::rs::std::time::Instant&, ::rs::core::time::Duration*);
}
inline void Instant::operator-=(::rs::core::time::Duration other) {
  auto&& self = *this;
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXs2_uNtCsb7ytMsthdgm_u3std4timeNtB5_u7InstantINtNtNtCs9kG8YiNG2f0_u4core3ops5arith9SubAssignNtNtBO_u4time8DurationE10sub_uassign(
          self, &other);
}
namespace __crubit_internal {
extern "C" ::std::int8_t
__crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std4time7InstantNtNtCs9kG8YiNG2f0_u4core3cmp3Ord3cmpB6_u(
    ::rs::std::time::Instant const&, ::rs::std::time::Instant const&);
}
inline ::std::strong_ordering Instant::operator<=>(const Instant& other) const {
  auto val = __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std4time7InstantNtNtCs9kG8YiNG2f0_u4core3cmp3Ord3cmpB6_u(
          *this, other);
  switch (val) {
    case -1:
      return ::std::strong_ordering::less;
    case 0:
      return ::std::strong_ordering::equal;
    case 1:
      return ::std::strong_ordering::greater;
    default:
      CRUBIT_UNREACHABLE();
  }
}
inline void Instant::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(Instant, __field0));
}
static_assert(
    sizeof(SystemTime) == 16,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(SystemTime) == 8,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(::std::is_trivially_destructible_v<SystemTime>);
static_assert(
    ::std::is_trivially_move_constructible_v<::rs::std::time::SystemTime>);
static_assert(
    ::std::is_trivially_move_assignable_v<::rs::std::time::SystemTime>);
static_assert(
    ::std::is_trivially_copy_constructible_v<::rs::std::time::SystemTime>);
static_assert(
    ::std::is_trivially_copy_assignable_v<::rs::std::time::SystemTime>);
inline ::rs::std::time::SystemTime::SystemTime(::crubit::UnsafeRelocateTag,
                                               SystemTime&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMs5_uNtCsb7ytMsthdgm_u3std4timeNtB5_u10SystemTime3now(
    ::rs::std::time::SystemTime* __ret_ptr);
}
inline ::rs::std::time::SystemTime SystemTime::now() {
  crubit::Slot<::rs::std::time::SystemTime> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMs5_uNtCsb7ytMsthdgm_u3std4timeNtB5_u10SystemTime3now(
          __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMs5_uNtCsb7ytMsthdgm_u3std4timeNtB5_u10SystemTime14duration_usince(
    ::rs::std::time::SystemTime const&, ::rs::std::time::SystemTime*,
    rs_std::Result<::rs::core::time::Duration,
                   ::rs::std::time::SystemTimeError>* __ret_ptr);
}
inline rs_std::Result<::rs::core::time::Duration,
                      ::rs::std::time::SystemTimeError>
SystemTime::duration_since(::rs::std::time::SystemTime earlier) const {
  auto&& self = *this;
  crubit::Slot<rs_std::Result<::rs::core::time::Duration,
                              ::rs::std::time::SystemTimeError>>
      __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMs5_uNtCsb7ytMsthdgm_u3std4timeNtB5_u10SystemTime14duration_usince(
          self, &earlier, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMs5_uNtCsb7ytMsthdgm_u3std4timeNtB5_u10SystemTime7elapsed(
    ::rs::std::time::SystemTime const&,
    rs_std::Result<::rs::core::time::Duration,
                   ::rs::std::time::SystemTimeError>* __ret_ptr);
}
inline rs_std::Result<::rs::core::time::Duration,
                      ::rs::std::time::SystemTimeError>
SystemTime::elapsed() const {
  auto&& self = *this;
  crubit::Slot<rs_std::Result<::rs::core::time::Duration,
                              ::rs::std::time::SystemTimeError>>
      __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMs5_uNtCsb7ytMsthdgm_u3std4timeNtB5_u10SystemTime7elapsed(
          self, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMs5_uNtCsb7ytMsthdgm_u3std4timeNtB5_u10SystemTime11checked_uadd(
    ::rs::std::time::SystemTime const&, ::rs::core::time::Duration*,
    unsigned char* __ret_ptr);
}
inline ::std::optional<::rs::std::time::SystemTime> SystemTime::checked_add(
    ::rs::core::time::Duration duration) const {
  auto&& self = *this;
  unsigned char __return_value_storage[::crubit::OptionAbi<
      ::crubit::TransmuteAbi<::rs::std::time::SystemTime>>::kSize];
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMs5_uNtCsb7ytMsthdgm_u3std4timeNtB5_u10SystemTime11checked_uadd(
          self, &duration, __return_value_storage);
  return ::crubit::internal::Decode<
      ::crubit::OptionAbi<::crubit::TransmuteAbi<::rs::std::time::SystemTime>>>(
      ::crubit::OptionAbi<::crubit::TransmuteAbi<::rs::std::time::SystemTime>>(
          ::crubit::TransmuteAbi<::rs::std::time::SystemTime>()),
      __return_value_storage);
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMs5_uNtCsb7ytMsthdgm_u3std4timeNtB5_u10SystemTime11checked_usub(
    ::rs::std::time::SystemTime const&, ::rs::core::time::Duration*,
    unsigned char* __ret_ptr);
}
inline ::std::optional<::rs::std::time::SystemTime> SystemTime::checked_sub(
    ::rs::core::time::Duration duration) const {
  auto&& self = *this;
  unsigned char __return_value_storage[::crubit::OptionAbi<
      ::crubit::TransmuteAbi<::rs::std::time::SystemTime>>::kSize];
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMs5_uNtCsb7ytMsthdgm_u3std4timeNtB5_u10SystemTime11checked_usub(
          self, &duration, __return_value_storage);
  return ::crubit::internal::Decode<
      ::crubit::OptionAbi<::crubit::TransmuteAbi<::rs::std::time::SystemTime>>>(
      ::crubit::OptionAbi<::crubit::TransmuteAbi<::rs::std::time::SystemTime>>(
          ::crubit::TransmuteAbi<::rs::std::time::SystemTime>()),
      __return_value_storage);
}

namespace __crubit_internal {
extern "C" bool
__crubit_thunk_818b180788380d74__uRNvXst_uNtCsb7ytMsthdgm_u3std4timeNtB5_u10SystemTimeNtNtCs9kG8YiNG2f0_u4core3cmp9PartialEq2eq(
    ::rs::std::time::SystemTime const&, ::rs::std::time::SystemTime const&);
}
inline bool SystemTime::operator==(
    ::rs::std::time::SystemTime const& other) const {
  auto&& self = *this;
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXst_uNtCsb7ytMsthdgm_u3std4timeNtB5_u10SystemTimeNtNtCs9kG8YiNG2f0_u4core3cmp9PartialEq2eq(
          self, other);
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvXs6_uNtCsb7ytMsthdgm_u3std4timeNtB5_u10SystemTimeINtNtNtCs9kG8YiNG2f0_u4core3ops5arith3AddNtNtBS_u4time8DurationE3add(
    ::rs::std::time::SystemTime*, ::rs::core::time::Duration*,
    ::rs::std::time::SystemTime* __ret_ptr);
}
inline ::rs::std::time::SystemTime SystemTime::operator+(
    ::rs::core::time::Duration dur) const {
  auto& self = const_cast<::std::remove_cvref_t<decltype(*this)>&>(*this);
  crubit::Slot<::rs::std::time::SystemTime> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXs6_uNtCsb7ytMsthdgm_u3std4timeNtB5_u10SystemTimeINtNtNtCs9kG8YiNG2f0_u4core3ops5arith3AddNtNtBS_u4time8DurationE3add(
          &self, &dur, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvXs7_uNtCsb7ytMsthdgm_u3std4timeNtB5_u10SystemTimeINtNtNtCs9kG8YiNG2f0_u4core3ops5arith9AddAssignNtNtBS_u4time8DurationE10add_uassign(
    ::rs::std::time::SystemTime&, ::rs::core::time::Duration*);
}
inline void SystemTime::operator+=(::rs::core::time::Duration other) {
  auto&& self = *this;
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXs7_uNtCsb7ytMsthdgm_u3std4timeNtB5_u10SystemTimeINtNtNtCs9kG8YiNG2f0_u4core3ops5arith9AddAssignNtNtBS_u4time8DurationE10add_uassign(
          self, &other);
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvXs8_uNtCsb7ytMsthdgm_u3std4timeNtB5_u10SystemTimeINtNtNtCs9kG8YiNG2f0_u4core3ops5arith3SubNtNtBS_u4time8DurationE3sub(
    ::rs::std::time::SystemTime*, ::rs::core::time::Duration*,
    ::rs::std::time::SystemTime* __ret_ptr);
}
inline ::rs::std::time::SystemTime SystemTime::operator-(
    ::rs::core::time::Duration dur) const {
  auto& self = const_cast<::std::remove_cvref_t<decltype(*this)>&>(*this);
  crubit::Slot<::rs::std::time::SystemTime> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXs8_uNtCsb7ytMsthdgm_u3std4timeNtB5_u10SystemTimeINtNtNtCs9kG8YiNG2f0_u4core3ops5arith3SubNtNtBS_u4time8DurationE3sub(
          &self, &dur, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvXs9_uNtCsb7ytMsthdgm_u3std4timeNtB5_u10SystemTimeINtNtNtCs9kG8YiNG2f0_u4core3ops5arith9SubAssignNtNtBS_u4time8DurationE10sub_uassign(
    ::rs::std::time::SystemTime&, ::rs::core::time::Duration*);
}
inline void SystemTime::operator-=(::rs::core::time::Duration other) {
  auto&& self = *this;
  return __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXs9_uNtCsb7ytMsthdgm_u3std4timeNtB5_u10SystemTimeINtNtNtCs9kG8YiNG2f0_u4core3ops5arith9SubAssignNtNtBS_u4time8DurationE10sub_uassign(
          self, &other);
}
namespace __crubit_internal {
extern "C" ::std::int8_t
__crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std4time10SystemTimeNtNtCs9kG8YiNG2f0_u4core3cmp3Ord3cmpB6_u(
    ::rs::std::time::SystemTime const&, ::rs::std::time::SystemTime const&);
}
inline ::std::strong_ordering SystemTime::operator<=>(
    const SystemTime& other) const {
  auto val = __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std4time10SystemTimeNtNtCs9kG8YiNG2f0_u4core3cmp3Ord3cmpB6_u(
          *this, other);
  switch (val) {
    case -1:
      return ::std::strong_ordering::less;
    case 0:
      return ::std::strong_ordering::equal;
    case 1:
      return ::std::strong_ordering::greater;
    default:
      CRUBIT_UNREACHABLE();
  }
}
inline void SystemTime::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(SystemTime, __field0));
}
static_assert(
    sizeof(SystemTimeError) == 16,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(
    alignof(SystemTimeError) == 8,
    "Verify that ADT layout didn't change since this header got generated");
static_assert(::std::is_trivially_destructible_v<SystemTimeError>);
static_assert(
    ::std::is_trivially_move_constructible_v<::rs::std::time::SystemTimeError>);
static_assert(
    ::std::is_trivially_move_assignable_v<::rs::std::time::SystemTimeError>);
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std4time15SystemTimeErrorNtNtCs9kG8YiNG2f0_u4core5clone5Clone5cloneB6_u(
    ::rs::std::time::SystemTimeError const&,
    ::rs::std::time::SystemTimeError* __ret_ptr);
}
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std4time15SystemTimeErrorNtNtCs9kG8YiNG2f0_u4core5clone5Clone10clone_ufromB6_u(
    ::rs::std::time::SystemTimeError&, ::rs::std::time::SystemTimeError const&);
}
inline ::rs::std::time::SystemTimeError::SystemTimeError(
    const SystemTimeError& other) {
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std4time15SystemTimeErrorNtNtCs9kG8YiNG2f0_u4core5clone5Clone5cloneB6_u(
          other, this);
}
inline ::rs::std::time::SystemTimeError& ::rs::std::time::SystemTimeError::
operator=(const SystemTimeError& other) {
  if (this != &other) {
    __crubit_internal::
        __crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std4time15SystemTimeErrorNtNtCs9kG8YiNG2f0_u4core5clone5Clone10clone_ufromB6_u(
            *this, other);
  }
  return *this;
}
inline ::rs::std::time::SystemTimeError::SystemTimeError(
    ::crubit::UnsafeRelocateTag, SystemTimeError&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}

namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvMsb_uNtCsb7ytMsthdgm_u3std4timeNtB5_u15SystemTimeError8duration(
    ::rs::std::time::SystemTimeError const&,
    ::rs::core::time::Duration* __ret_ptr);
}
inline ::rs::core::time::Duration SystemTimeError::duration() const {
  auto&& self = *this;
  crubit::Slot<::rs::core::time::Duration> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvMsb_uNtCsb7ytMsthdgm_u3std4timeNtB5_u15SystemTimeError8duration(
          self, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYNtNtCsb7ytMsthdgm_u3std4time15SystemTimeErrorNtNtCsaddbpR6HRqH_u5alloc6string8ToString9to_ustringB6_u(
    ::rs::std::time::SystemTimeError const&,
    ::rs::alloc::string::String* __ret_ptr);
inline void SystemTimeError::__crubit_field_offset_assertions() {
  static_assert(0 == offsetof(SystemTimeError, __field0));
}
}  // namespace rs::std::time

#ifndef _CRUBIT_BINDINGS_FOR_IMPL__x0000003a_x0000003a_x00000020rs_ustd_x00000020_x0000003a_x0000003a_x00000020Tuple_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020PipeReader_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020PipeWriter_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR_IMPL__x0000003a_x0000003a_x00000020rs_ustd_x00000020_x0000003a_x0000003a_x00000020Tuple_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020PipeReader_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020PipeWriter_x00000020_x0000003e
inline ::rs_std::Tuple<::rs::std::io::PipeReader, ::rs::std::io::PipeWriter>::
    Tuple(::crubit::UnsafeRelocateTag, Tuple&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}

inline rs_std::Tuple<::rs::std::io::PipeReader,
                     ::rs::std::io::PipeWriter>::~Tuple() {
  std::destroy_at(reinterpret_cast<::rs::std::io::PipeReader*>(storage_ + 0));
  std::destroy_at(reinterpret_cast<::rs::std::io::PipeWriter*>(storage_ + 4));
}

#endif

#ifndef _CRUBIT_BINDINGS_FOR_IMPL__x0000003a_x0000003a_x00000020rs_ustd_x00000020_x0000003a_x0000003a_x00000020Tuple_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020net_x00000020_x0000003a_x0000003a_x00000020TcpStream_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020core_x00000020_x0000003a_x0000003a_x00000020net_x00000020_x0000003a_x0000003a_x00000020SocketAddr_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR_IMPL__x0000003a_x0000003a_x00000020rs_ustd_x00000020_x0000003a_x0000003a_x00000020Tuple_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020net_x00000020_x0000003a_x0000003a_x00000020TcpStream_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020core_x00000020_x0000003a_x0000003a_x00000020net_x00000020_x0000003a_x0000003a_x00000020SocketAddr_x00000020_x0000003e
inline ::rs_std::Tuple<::rs::std::net::TcpStream, ::rs::core::net::SocketAddr>::
    Tuple(::crubit::UnsafeRelocateTag, Tuple&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}

inline rs_std::Tuple<::rs::std::net::TcpStream,
                     ::rs::core::net::SocketAddr>::~Tuple() {
  std::destroy_at(reinterpret_cast<::rs::std::net::TcpStream*>(storage_ + 0));
  std::destroy_at(reinterpret_cast<::rs::core::net::SocketAddr*>(storage_ + 4));
}

#endif

namespace rs::std {
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvXse_uNtCsb7ytMsthdgm_u3std3envNtB5_u4ArgsNtNtNtNtCs9kG8YiNG2f0_u4core4iter6traits12double_uended19DoubleEndedIterator9next_uback(
    ::rs::std::env::Args&, unsigned char* __ret_ptr);
}
}  // namespace rs::std
inline ::std::optional<::rs::alloc::string::String>
rs_std::impl<::rs::std::env::Args, ::rs::core::iter::DoubleEndedIterator>::
    next_back(::rs::std::env::Args& self) {
  unsigned char __return_value_storage[::crubit::OptionAbi<
      ::crubit::TransmuteAbi<::rs::alloc::string::String>>::kSize];
  rs::std::__crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXse_uNtCsb7ytMsthdgm_u3std3envNtB5_u4ArgsNtNtNtNtCs9kG8YiNG2f0_u4core4iter6traits12double_uended19DoubleEndedIterator9next_uback(
          self, __return_value_storage);
  return ::crubit::internal::Decode<
      ::crubit::OptionAbi<::crubit::TransmuteAbi<::rs::alloc::string::String>>>(
      ::crubit::OptionAbi<::crubit::TransmuteAbi<::rs::alloc::string::String>>(
          ::crubit::TransmuteAbi<::rs::alloc::string::String>()),
      __return_value_storage);
}

namespace rs::std {
namespace __crubit_internal {
extern "C" ::std::uintptr_t
__crubit_thunk_818b180788380d74__uRNvXsd_uNtCsb7ytMsthdgm_u3std3envNtB5_u4ArgsNtNtNtNtCs9kG8YiNG2f0_u4core4iter6traits10exact_usize17ExactSizeIterator3len(
    ::rs::std::env::Args const&);
}
}  // namespace rs::std
inline ::std::uintptr_t
rs_std::impl<::rs::std::env::Args, ::rs::core::iter::ExactSizeIterator>::len(
    ::rs::std::env::Args const& self) {
  return rs::std::__crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXsd_uNtCsb7ytMsthdgm_u3std3envNtB5_u4ArgsNtNtNtNtCs9kG8YiNG2f0_u4core4iter6traits10exact_usize17ExactSizeIterator3len(
          self);
}

namespace rs::std {
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvXsc_uNtCsb7ytMsthdgm_u3std3envNtB5_u4ArgsNtNtNtNtCs9kG8YiNG2f0_u4core4iter6traits8iterator8Iterator4next(
    ::rs::std::env::Args&, unsigned char* __ret_ptr);
}
}  // namespace rs::std
inline ::std::optional<::rs::alloc::string::String>
rs_std::impl<::rs::std::env::Args, ::rs::core::iter::Iterator>::next(
    ::rs::std::env::Args& self) {
  unsigned char __return_value_storage[::crubit::OptionAbi<
      ::crubit::TransmuteAbi<::rs::alloc::string::String>>::kSize];
  rs::std::__crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXsc_uNtCsb7ytMsthdgm_u3std3envNtB5_u4ArgsNtNtNtNtCs9kG8YiNG2f0_u4core4iter6traits8iterator8Iterator4next(
          self, __return_value_storage);
  return ::crubit::internal::Decode<
      ::crubit::OptionAbi<::crubit::TransmuteAbi<::rs::alloc::string::String>>>(
      ::crubit::OptionAbi<::crubit::TransmuteAbi<::rs::alloc::string::String>>(
          ::crubit::TransmuteAbi<::rs::alloc::string::String>()),
      __return_value_storage);
}

namespace rs::std {
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvXsc_uNtCsb7ytMsthdgm_u3std3envNtB5_u4ArgsNtNtNtNtCs9kG8YiNG2f0_u4core4iter6traits8iterator8Iterator9size_uhint(
    ::rs::std::env::Args const&, void** __ret_ptr);
}
}  // namespace rs::std
inline ::std::tuple<::std::uintptr_t, ::std::optional<::std::uintptr_t>>
rs_std::impl<::rs::std::env::Args, ::rs::core::iter::Iterator>::size_hint(
    ::rs::std::env::Args const& self) {
  ::std::uintptr_t __return_value_0_ret_val_holder;
  ::std::uintptr_t* __return_value_0_storage = &__return_value_0_ret_val_holder;
  unsigned char __return_value_1_storage
      [::crubit::OptionAbi<::crubit::TransmuteAbi<::std::uintptr_t>>::kSize];
  void* __return_value_storage[] = {__return_value_0_storage,
                                    __return_value_1_storage};
  rs::std::__crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXsc_uNtCsb7ytMsthdgm_u3std3envNtB5_u4ArgsNtNtNtNtCs9kG8YiNG2f0_u4core4iter6traits8iterator8Iterator9size_uhint(
          self, __return_value_storage);
  return ::std::make_tuple(
      *__return_value_0_storage,
      ::crubit::internal::Decode<
          ::crubit::OptionAbi<::crubit::TransmuteAbi<::std::uintptr_t>>>(
          ::crubit::OptionAbi<::crubit::TransmuteAbi<::std::uintptr_t>>(
              ::crubit::TransmuteAbi<::std::uintptr_t>()),
          __return_value_1_storage));
}

namespace rs::std {
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvXsk_uNtCsb7ytMsthdgm_u3std3envNtB5_u6ArgsOsNtNtNtNtCs9kG8YiNG2f0_u4core4iter6traits12double_uended19DoubleEndedIterator9next_uback(
    ::rs::std::env::ArgsOs&, unsigned char* __ret_ptr);
}
}  // namespace rs::std
inline ::std::optional<::rs::std::ffi::OsString>
rs_std::impl<::rs::std::env::ArgsOs, ::rs::core::iter::DoubleEndedIterator>::
    next_back(::rs::std::env::ArgsOs& self) {
  unsigned char __return_value_storage[::crubit::OptionAbi<
      ::crubit::TransmuteAbi<::rs::std::ffi::OsString>>::kSize];
  rs::std::__crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXsk_uNtCsb7ytMsthdgm_u3std3envNtB5_u6ArgsOsNtNtNtNtCs9kG8YiNG2f0_u4core4iter6traits12double_uended19DoubleEndedIterator9next_uback(
          self, __return_value_storage);
  return ::crubit::internal::Decode<
      ::crubit::OptionAbi<::crubit::TransmuteAbi<::rs::std::ffi::OsString>>>(
      ::crubit::OptionAbi<::crubit::TransmuteAbi<::rs::std::ffi::OsString>>(
          ::crubit::TransmuteAbi<::rs::std::ffi::OsString>()),
      __return_value_storage);
}

namespace rs::std {
namespace __crubit_internal {
extern "C" ::std::uintptr_t
__crubit_thunk_818b180788380d74__uRNvXsj_uNtCsb7ytMsthdgm_u3std3envNtB5_u6ArgsOsNtNtNtNtCs9kG8YiNG2f0_u4core4iter6traits10exact_usize17ExactSizeIterator3len(
    ::rs::std::env::ArgsOs const&);
}
}  // namespace rs::std
inline ::std::uintptr_t
rs_std::impl<::rs::std::env::ArgsOs, ::rs::core::iter::ExactSizeIterator>::len(
    ::rs::std::env::ArgsOs const& self) {
  return rs::std::__crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXsj_uNtCsb7ytMsthdgm_u3std3envNtB5_u6ArgsOsNtNtNtNtCs9kG8YiNG2f0_u4core4iter6traits10exact_usize17ExactSizeIterator3len(
          self);
}

namespace rs::std {
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvXsi_uNtCsb7ytMsthdgm_u3std3envNtB5_u6ArgsOsNtNtNtNtCs9kG8YiNG2f0_u4core4iter6traits8iterator8Iterator4next(
    ::rs::std::env::ArgsOs&, unsigned char* __ret_ptr);
}
}  // namespace rs::std
inline ::std::optional<::rs::std::ffi::OsString>
rs_std::impl<::rs::std::env::ArgsOs, ::rs::core::iter::Iterator>::next(
    ::rs::std::env::ArgsOs& self) {
  unsigned char __return_value_storage[::crubit::OptionAbi<
      ::crubit::TransmuteAbi<::rs::std::ffi::OsString>>::kSize];
  rs::std::__crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXsi_uNtCsb7ytMsthdgm_u3std3envNtB5_u6ArgsOsNtNtNtNtCs9kG8YiNG2f0_u4core4iter6traits8iterator8Iterator4next(
          self, __return_value_storage);
  return ::crubit::internal::Decode<
      ::crubit::OptionAbi<::crubit::TransmuteAbi<::rs::std::ffi::OsString>>>(
      ::crubit::OptionAbi<::crubit::TransmuteAbi<::rs::std::ffi::OsString>>(
          ::crubit::TransmuteAbi<::rs::std::ffi::OsString>()),
      __return_value_storage);
}

namespace rs::std {
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvXsi_uNtCsb7ytMsthdgm_u3std3envNtB5_u6ArgsOsNtNtNtNtCs9kG8YiNG2f0_u4core4iter6traits8iterator8Iterator9size_uhint(
    ::rs::std::env::ArgsOs const&, void** __ret_ptr);
}
}  // namespace rs::std
inline ::std::tuple<::std::uintptr_t, ::std::optional<::std::uintptr_t>>
rs_std::impl<::rs::std::env::ArgsOs, ::rs::core::iter::Iterator>::size_hint(
    ::rs::std::env::ArgsOs const& self) {
  ::std::uintptr_t __return_value_0_ret_val_holder;
  ::std::uintptr_t* __return_value_0_storage = &__return_value_0_ret_val_holder;
  unsigned char __return_value_1_storage
      [::crubit::OptionAbi<::crubit::TransmuteAbi<::std::uintptr_t>>::kSize];
  void* __return_value_storage[] = {__return_value_0_storage,
                                    __return_value_1_storage};
  rs::std::__crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXsi_uNtCsb7ytMsthdgm_u3std3envNtB5_u6ArgsOsNtNtNtNtCs9kG8YiNG2f0_u4core4iter6traits8iterator8Iterator9size_uhint(
          self, __return_value_storage);
  return ::std::make_tuple(
      *__return_value_0_storage,
      ::crubit::internal::Decode<
          ::crubit::OptionAbi<::crubit::TransmuteAbi<::std::uintptr_t>>>(
          ::crubit::OptionAbi<::crubit::TransmuteAbi<::std::uintptr_t>>(
              ::crubit::TransmuteAbi<::std::uintptr_t>()),
          __return_value_1_storage));
}

namespace rs::std {
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvXs6_uNtCsb7ytMsthdgm_u3std3envNtB5_u10SplitPathsNtNtNtNtCs9kG8YiNG2f0_u4core4iter6traits8iterator8Iterator4next(
    ::rs::std::env::SplitPaths&, unsigned char* __ret_ptr);
}
}  // namespace rs::std
inline ::std::optional<::rs::std::path::PathBuf>
rs_std::impl<::rs::std::env::SplitPaths, ::rs::core::iter::Iterator>::next(
    ::rs::std::env::SplitPaths& self) {
  unsigned char __return_value_storage[::crubit::OptionAbi<
      ::crubit::TransmuteAbi<::rs::std::path::PathBuf>>::kSize];
  rs::std::__crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXs6_uNtCsb7ytMsthdgm_u3std3envNtB5_u10SplitPathsNtNtNtNtCs9kG8YiNG2f0_u4core4iter6traits8iterator8Iterator4next(
          self, __return_value_storage);
  return ::crubit::internal::Decode<
      ::crubit::OptionAbi<::crubit::TransmuteAbi<::rs::std::path::PathBuf>>>(
      ::crubit::OptionAbi<::crubit::TransmuteAbi<::rs::std::path::PathBuf>>(
          ::crubit::TransmuteAbi<::rs::std::path::PathBuf>()),
      __return_value_storage);
}

namespace rs::std {
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvXs6_uNtCsb7ytMsthdgm_u3std3envNtB5_u10SplitPathsNtNtNtNtCs9kG8YiNG2f0_u4core4iter6traits8iterator8Iterator9size_uhint(
    ::rs::std::env::SplitPaths const&, void** __ret_ptr);
}
}  // namespace rs::std
inline ::std::tuple<::std::uintptr_t, ::std::optional<::std::uintptr_t>>
rs_std::impl<::rs::std::env::SplitPaths, ::rs::core::iter::Iterator>::size_hint(
    ::rs::std::env::SplitPaths const& self) {
  ::std::uintptr_t __return_value_0_ret_val_holder;
  ::std::uintptr_t* __return_value_0_storage = &__return_value_0_ret_val_holder;
  unsigned char __return_value_1_storage
      [::crubit::OptionAbi<::crubit::TransmuteAbi<::std::uintptr_t>>::kSize];
  void* __return_value_storage[] = {__return_value_0_storage,
                                    __return_value_1_storage};
  rs::std::__crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXs6_uNtCsb7ytMsthdgm_u3std3envNtB5_u10SplitPathsNtNtNtNtCs9kG8YiNG2f0_u4core4iter6traits8iterator8Iterator9size_uhint(
          self, __return_value_storage);
  return ::std::make_tuple(
      *__return_value_0_storage,
      ::crubit::internal::Decode<
          ::crubit::OptionAbi<::crubit::TransmuteAbi<::std::uintptr_t>>>(
          ::crubit::OptionAbi<::crubit::TransmuteAbi<::std::uintptr_t>>(
              ::crubit::TransmuteAbi<::std::uintptr_t>()),
          __return_value_1_storage));
}

namespace rs::std {
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvXs0_uNtCsb7ytMsthdgm_u3std3envNtB5_u4VarsNtNtNtNtCs9kG8YiNG2f0_u4core4iter6traits8iterator8Iterator9size_uhint(
    ::rs::std::env::Vars const&, void** __ret_ptr);
}
}  // namespace rs::std
inline ::std::tuple<::std::uintptr_t, ::std::optional<::std::uintptr_t>>
rs_std::impl<::rs::std::env::Vars, ::rs::core::iter::Iterator>::size_hint(
    ::rs::std::env::Vars const& self) {
  ::std::uintptr_t __return_value_0_ret_val_holder;
  ::std::uintptr_t* __return_value_0_storage = &__return_value_0_ret_val_holder;
  unsigned char __return_value_1_storage
      [::crubit::OptionAbi<::crubit::TransmuteAbi<::std::uintptr_t>>::kSize];
  void* __return_value_storage[] = {__return_value_0_storage,
                                    __return_value_1_storage};
  rs::std::__crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXs0_uNtCsb7ytMsthdgm_u3std3envNtB5_u4VarsNtNtNtNtCs9kG8YiNG2f0_u4core4iter6traits8iterator8Iterator9size_uhint(
          self, __return_value_storage);
  return ::std::make_tuple(
      *__return_value_0_storage,
      ::crubit::internal::Decode<
          ::crubit::OptionAbi<::crubit::TransmuteAbi<::std::uintptr_t>>>(
          ::crubit::OptionAbi<::crubit::TransmuteAbi<::std::uintptr_t>>(
              ::crubit::TransmuteAbi<::std::uintptr_t>()),
          __return_value_1_storage));
}

namespace rs::std {
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvXs2_uNtCsb7ytMsthdgm_u3std3envNtB5_u6VarsOsNtNtNtNtCs9kG8YiNG2f0_u4core4iter6traits8iterator8Iterator9size_uhint(
    ::rs::std::env::VarsOs const&, void** __ret_ptr);
}
}  // namespace rs::std
inline ::std::tuple<::std::uintptr_t, ::std::optional<::std::uintptr_t>>
rs_std::impl<::rs::std::env::VarsOs, ::rs::core::iter::Iterator>::size_hint(
    ::rs::std::env::VarsOs const& self) {
  ::std::uintptr_t __return_value_0_ret_val_holder;
  ::std::uintptr_t* __return_value_0_storage = &__return_value_0_ret_val_holder;
  unsigned char __return_value_1_storage
      [::crubit::OptionAbi<::crubit::TransmuteAbi<::std::uintptr_t>>::kSize];
  void* __return_value_storage[] = {__return_value_0_storage,
                                    __return_value_1_storage};
  rs::std::__crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXs2_uNtCsb7ytMsthdgm_u3std3envNtB5_u6VarsOsNtNtNtNtCs9kG8YiNG2f0_u4core4iter6traits8iterator8Iterator9size_uhint(
          self, __return_value_storage);
  return ::std::make_tuple(
      *__return_value_0_storage,
      ::crubit::internal::Decode<
          ::crubit::OptionAbi<::crubit::TransmuteAbi<::std::uintptr_t>>>(
          ::crubit::OptionAbi<::crubit::TransmuteAbi<::std::uintptr_t>>(
              ::crubit::TransmuteAbi<::std::uintptr_t>()),
          __return_value_1_storage));
}

namespace rs::std {
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvXsg_uNtNtCsb7ytMsthdgm_u3std3ffi6os_ustrNtB5_u8OsStringNtNtCs9kG8YiNG2f0_u4core3cmp3Ord3cmp(
    ::rs::std::ffi::OsString const&, ::rs::std::ffi::OsString const&,
    ::rs::core::cmp::Ordering* __ret_ptr);
}
}  // namespace rs::std
inline ::rs::core::cmp::Ordering
rs_std::impl<::rs::std::ffi::OsString, ::rs::core::cmp::Ord>::cmp(
    ::rs::std::ffi::OsString const& self,
    ::rs::std::ffi::OsString const& other) {
  crubit::Slot<::rs::core::cmp::Ordering> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  rs::std::__crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXsg_uNtNtCsb7ytMsthdgm_u3std3ffi6os_ustrNtB5_u8OsStringNtNtCs9kG8YiNG2f0_u4core3cmp3Ord3cmp(
          self, other, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace rs::std {
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvXsc_uNtCsb7ytMsthdgm_u3std2fsNtB5_u4FileNtNtNtCs9kG8YiNG2f0_u4core2io4seek4Seek4seek(
    ::rs::std::fs::File&, ::rs::std::io::SeekFrom*,
    rs_std::Result<::std::uint64_t, ::rs::std::io::Error>* __ret_ptr);
}
}  // namespace rs::std
inline rs_std::Result<::std::uint64_t, ::rs::std::io::Error>
rs_std::impl<::rs::std::fs::File, ::rs::std::io::Seek>::seek(
    ::rs::std::fs::File& self, ::rs::std::io::SeekFrom pos) {
  crubit::Slot<rs_std::Result<::std::uint64_t, ::rs::std::io::Error>>
      __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  rs::std::__crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXsc_uNtCsb7ytMsthdgm_u3std2fsNtB5_u4FileNtNtNtCs9kG8YiNG2f0_u4core2io4seek4Seek4seek(
          self, &pos, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace rs::std {
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvXsc_uNtCsb7ytMsthdgm_u3std2fsNtB5_u4FileNtNtNtCs9kG8YiNG2f0_u4core2io4seek4Seek15stream_uposition(
    ::rs::std::fs::File&,
    rs_std::Result<::std::uint64_t, ::rs::std::io::Error>* __ret_ptr);
}
}  // namespace rs::std
inline rs_std::Result<::std::uint64_t, ::rs::std::io::Error>
rs_std::impl<::rs::std::fs::File, ::rs::std::io::Seek>::stream_position(
    ::rs::std::fs::File& self) {
  crubit::Slot<rs_std::Result<::std::uint64_t, ::rs::std::io::Error>>
      __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  rs::std::__crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXsc_uNtCsb7ytMsthdgm_u3std2fsNtB5_u4FileNtNtNtCs9kG8YiNG2f0_u4core2io4seek4Seek15stream_uposition(
          self, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace rs::std {
namespace __crubit_internal {
extern "C" bool
__crubit_thunk_818b180788380d74__uRNvXsu_uNtNtCsb7ytMsthdgm_u3std2io5stdioNtNtB9_u2fs4FileNtB5_u10IsTerminal11is_uterminal(
    ::rs::std::fs::File const&);
}
}  // namespace rs::std
inline bool
rs_std::impl<::rs::std::fs::File, ::rs::std::io::IsTerminal>::is_terminal(
    ::rs::std::fs::File const& self) {
  return rs::std::__crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXsu_uNtNtCsb7ytMsthdgm_u3std2io5stdioNtNtB9_u2fs4FileNtB5_u10IsTerminal11is_uterminal(
          self);
}

namespace rs::std {
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvXs2_uNtNtCsb7ytMsthdgm_u3std4hash6randomNtB5_u13DefaultHasherNtNtCs9kG8YiNG2f0_u4core4hash6Hasher5write(
    ::rs::std::hash::DefaultHasher&, rs_std::SliceRef<const ::std::uint8_t>*);
}
}  // namespace rs::std
inline void
rs_std::impl<::rs::std::hash::DefaultHasher, ::rs::core::hash::Hasher>::write(
    ::rs::std::hash::DefaultHasher& self,
    rs_std::SliceRef<const ::std::uint8_t> msg) {
  crubit::internal::CheckNoMutableAliasing(
      crubit::internal::AsMutPtrDatas<::rs::std::hash::DefaultHasher&>(self),
      crubit::internal::AsPtrDatas<rs_std::SliceRef<const ::std::uint8_t>>(
          msg));
  return rs::std::__crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXs2_uNtNtCsb7ytMsthdgm_u3std4hash6randomNtB5_u13DefaultHasherNtNtCs9kG8YiNG2f0_u4core4hash6Hasher5write(
          self, &msg);
}

namespace rs::std {
namespace __crubit_internal {
extern "C" ::std::uint64_t
__crubit_thunk_818b180788380d74__uRNvXs2_uNtNtCsb7ytMsthdgm_u3std4hash6randomNtB5_u13DefaultHasherNtNtCs9kG8YiNG2f0_u4core4hash6Hasher6finish(
    ::rs::std::hash::DefaultHasher const&);
}
}  // namespace rs::std
inline ::std::uint64_t
rs_std::impl<::rs::std::hash::DefaultHasher, ::rs::core::hash::Hasher>::finish(
    ::rs::std::hash::DefaultHasher const& self) {
  return rs::std::__crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXs2_uNtNtCsb7ytMsthdgm_u3std4hash6randomNtB5_u13DefaultHasherNtNtCs9kG8YiNG2f0_u4core4hash6Hasher6finish(
          self);
}

namespace rs::std {
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvXs_uNtNtCsb7ytMsthdgm_u3std4hash6randomNtB4_u11RandomStateNtNtCs9kG8YiNG2f0_u4core4hash11BuildHasher12build_uhasher(
    ::rs::std::hash::RandomState const&,
    ::rs::std::hash::DefaultHasher* __ret_ptr);
}
}  // namespace rs::std
inline ::rs::std::hash::DefaultHasher
rs_std::impl<::rs::std::hash::RandomState, ::rs::core::hash::BuildHasher>::
    build_hasher(::rs::std::hash::RandomState const& self) {
  crubit::Slot<::rs::std::hash::DefaultHasher> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  rs::std::__crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXs_uNtNtCsb7ytMsthdgm_u3std4hash6randomNtB4_u11RandomStateNtNtCs9kG8YiNG2f0_u4core4hash11BuildHasher12build_uhasher(
          self, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace rs::std {
namespace __crubit_internal {
extern "C" bool
__crubit_thunk_818b180788380d74__uRNvXsz_uNtNtCsb7ytMsthdgm_u3std2io5stdioNtB5_u6StderrNtB5_u10IsTerminal11is_uterminal(
    ::rs::std::io::Stderr const&);
}
}  // namespace rs::std
inline bool
rs_std::impl<::rs::std::io::Stderr, ::rs::std::io::IsTerminal>::is_terminal(
    ::rs::std::io::Stderr const& self) {
  return rs::std::__crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXsz_uNtNtCsb7ytMsthdgm_u3std2io5stdioNtB5_u6StderrNtB5_u10IsTerminal11is_uterminal(
          self);
}

namespace rs::std {
namespace __crubit_internal {
extern "C" bool
__crubit_thunk_818b180788380d74__uRNvXsA_uNtNtCsb7ytMsthdgm_u3std2io5stdioNtB5_u10StderrLockNtB5_u10IsTerminal11is_uterminal(
    ::rs::std::io::StderrLock const&);
}
}  // namespace rs::std
inline bool
rs_std::impl<::rs::std::io::StderrLock, ::rs::std::io::IsTerminal>::is_terminal(
    ::rs::std::io::StderrLock const& self) {
  return rs::std::__crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXsA_uNtNtCsb7ytMsthdgm_u3std2io5stdioNtB5_u10StderrLockNtB5_u10IsTerminal11is_uterminal(
          self);
}

namespace rs::std {
namespace __crubit_internal {
extern "C" bool
__crubit_thunk_818b180788380d74__uRNvXsv_uNtNtCsb7ytMsthdgm_u3std2io5stdioNtB5_u5StdinNtB5_u10IsTerminal11is_uterminal(
    ::rs::std::io::Stdin const&);
}
}  // namespace rs::std
inline bool
rs_std::impl<::rs::std::io::Stdin, ::rs::std::io::IsTerminal>::is_terminal(
    ::rs::std::io::Stdin const& self) {
  return rs::std::__crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXsv_uNtNtCsb7ytMsthdgm_u3std2io5stdioNtB5_u5StdinNtB5_u10IsTerminal11is_uterminal(
          self);
}

namespace rs::std {
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvXs8_uNtNtCsb7ytMsthdgm_u3std2io5stdioNtB5_u9StdinLockNtNtNtCsaddbpR6HRqH_u5alloc2io8buf_uread7BufRead8fill_ubuf(
    ::rs::std::io::StdinLock&,
    rs_std::Result<rs_std::SliceRef<const ::std::uint8_t>,
                   ::rs::std::io::Error>* __ret_ptr);
}
}  // namespace rs::std
inline rs_std::Result<rs_std::SliceRef<const ::std::uint8_t>,
                      ::rs::std::io::Error>
rs_std::impl<::rs::std::io::StdinLock, ::rs::std::io::BufRead>::fill_buf(
    ::rs::std::io::StdinLock& self) {
  crubit::Slot<rs_std::Result<rs_std::SliceRef<const ::std::uint8_t>,
                              ::rs::std::io::Error>>
      __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  rs::std::__crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXs8_uNtNtCsb7ytMsthdgm_u3std2io5stdioNtB5_u9StdinLockNtNtNtCsaddbpR6HRqH_u5alloc2io8buf_uread7BufRead8fill_ubuf(
          self, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace rs::std {
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvXs8_uNtNtCsb7ytMsthdgm_u3std2io5stdioNtB5_u9StdinLockNtNtNtCsaddbpR6HRqH_u5alloc2io8buf_uread7BufRead7consume(
    ::rs::std::io::StdinLock&, ::std::uintptr_t);
}
}  // namespace rs::std
inline void
rs_std::impl<::rs::std::io::StdinLock, ::rs::std::io::BufRead>::consume(
    ::rs::std::io::StdinLock& self, ::std::uintptr_t n) {
  return rs::std::__crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXs8_uNtNtCsb7ytMsthdgm_u3std2io5stdioNtB5_u9StdinLockNtNtNtCsaddbpR6HRqH_u5alloc2io8buf_uread7BufRead7consume(
          self, n);
}

namespace rs::std {
namespace __crubit_internal {
extern "C" bool
__crubit_thunk_818b180788380d74__uRNvXsw_uNtNtCsb7ytMsthdgm_u3std2io5stdioNtB5_u9StdinLockNtB5_u10IsTerminal11is_uterminal(
    ::rs::std::io::StdinLock const&);
}
}  // namespace rs::std
inline bool
rs_std::impl<::rs::std::io::StdinLock, ::rs::std::io::IsTerminal>::is_terminal(
    ::rs::std::io::StdinLock const& self) {
  return rs::std::__crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXsw_uNtNtCsb7ytMsthdgm_u3std2io5stdioNtB5_u9StdinLockNtB5_u10IsTerminal11is_uterminal(
          self);
}

namespace rs::std {
namespace __crubit_internal {
extern "C" bool
__crubit_thunk_818b180788380d74__uRNvXsx_uNtNtCsb7ytMsthdgm_u3std2io5stdioNtB5_u6StdoutNtB5_u10IsTerminal11is_uterminal(
    ::rs::std::io::Stdout const&);
}
}  // namespace rs::std
inline bool
rs_std::impl<::rs::std::io::Stdout, ::rs::std::io::IsTerminal>::is_terminal(
    ::rs::std::io::Stdout const& self) {
  return rs::std::__crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXsx_uNtNtCsb7ytMsthdgm_u3std2io5stdioNtB5_u6StdoutNtB5_u10IsTerminal11is_uterminal(
          self);
}

namespace rs::std {
namespace __crubit_internal {
extern "C" bool
__crubit_thunk_818b180788380d74__uRNvXsy_uNtNtCsb7ytMsthdgm_u3std2io5stdioNtB5_u10StdoutLockNtB5_u10IsTerminal11is_uterminal(
    ::rs::std::io::StdoutLock const&);
}
}  // namespace rs::std
inline bool
rs_std::impl<::rs::std::io::StdoutLock, ::rs::std::io::IsTerminal>::is_terminal(
    ::rs::std::io::StdoutLock const& self) {
  return rs::std::__crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXsy_uNtNtCsb7ytMsthdgm_u3std2io5stdioNtB5_u10StdoutLockNtB5_u10IsTerminal11is_uterminal(
          self);
}

namespace rs::std {
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvXs21_uNtCsb7ytMsthdgm_u3std4pathNtB6_u9ComponentNtNtCs9kG8YiNG2f0_u4core3cmp3Ord3cmp(
    ::rs::std::path::Component const&, ::rs::std::path::Component const&,
    ::rs::core::cmp::Ordering* __ret_ptr);
}
}  // namespace rs::std
inline ::rs::core::cmp::Ordering
rs_std::impl<::rs::std::path::Component, ::rs::core::cmp::Ord>::cmp(
    ::rs::std::path::Component const& self,
    ::rs::std::path::Component const& other) {
  crubit::Slot<::rs::core::cmp::Ordering> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  rs::std::__crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXs21_uNtCsb7ytMsthdgm_u3std4pathNtB6_u9ComponentNtNtCs9kG8YiNG2f0_u4core3cmp3Ord3cmp(
          self, other, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace rs::std {
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvXso_uNtCsb7ytMsthdgm_u3std4pathNtB5_u10ComponentsNtNtCs9kG8YiNG2f0_u4core3cmp3Ord3cmp(
    ::rs::std::path::Components const&, ::rs::std::path::Components const&,
    ::rs::core::cmp::Ordering* __ret_ptr);
}
}  // namespace rs::std
inline ::rs::core::cmp::Ordering
rs_std::impl<::rs::std::path::Components, ::rs::core::cmp::Ord>::cmp(
    ::rs::std::path::Components const& self,
    ::rs::std::path::Components const& other) {
  crubit::Slot<::rs::core::cmp::Ordering> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  rs::std::__crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXso_uNtCsb7ytMsthdgm_u3std4pathNtB5_u10ComponentsNtNtCs9kG8YiNG2f0_u4core3cmp3Ord3cmp(
          self, other, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace rs::std {
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvXsj_uNtCsb7ytMsthdgm_u3std4pathNtB5_u10ComponentsNtNtNtNtCs9kG8YiNG2f0_u4core4iter6traits12double_uended19DoubleEndedIterator9next_uback(
    ::rs::std::path::Components&, unsigned char* __ret_ptr);
}
}  // namespace rs::std
inline ::std::optional<::rs::std::path::Component> rs_std::impl<
    ::rs::std::path::Components, ::rs::core::iter::DoubleEndedIterator>::
    next_back(::rs::std::path::Components& self) {
  unsigned char __return_value_storage[::crubit::OptionAbi<
      ::crubit::TransmuteAbi<::rs::std::path::Component>>::kSize];
  rs::std::__crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXsj_uNtCsb7ytMsthdgm_u3std4pathNtB5_u10ComponentsNtNtNtNtCs9kG8YiNG2f0_u4core4iter6traits12double_uended19DoubleEndedIterator9next_uback(
          self, __return_value_storage);
  return ::crubit::internal::Decode<
      ::crubit::OptionAbi<::crubit::TransmuteAbi<::rs::std::path::Component>>>(
      ::crubit::OptionAbi<::crubit::TransmuteAbi<::rs::std::path::Component>>(
          ::crubit::TransmuteAbi<::rs::std::path::Component>()),
      __return_value_storage);
}

namespace rs::std {
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvXsi_uNtCsb7ytMsthdgm_u3std4pathNtB5_u10ComponentsNtNtNtNtCs9kG8YiNG2f0_u4core4iter6traits8iterator8Iterator4next(
    ::rs::std::path::Components&, unsigned char* __ret_ptr);
}
}  // namespace rs::std
inline ::std::optional<::rs::std::path::Component>
rs_std::impl<::rs::std::path::Components, ::rs::core::iter::Iterator>::next(
    ::rs::std::path::Components& self) {
  unsigned char __return_value_storage[::crubit::OptionAbi<
      ::crubit::TransmuteAbi<::rs::std::path::Component>>::kSize];
  rs::std::__crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXsi_uNtCsb7ytMsthdgm_u3std4pathNtB5_u10ComponentsNtNtNtNtCs9kG8YiNG2f0_u4core4iter6traits8iterator8Iterator4next(
          self, __return_value_storage);
  return ::crubit::internal::Decode<
      ::crubit::OptionAbi<::crubit::TransmuteAbi<::rs::std::path::Component>>>(
      ::crubit::OptionAbi<::crubit::TransmuteAbi<::rs::std::path::Component>>(
          ::crubit::TransmuteAbi<::rs::std::path::Component>()),
      __return_value_storage);
}

namespace rs::std {
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvXs14_uNtCsb7ytMsthdgm_u3std4pathNtB6_u7PathBufNtNtCs9kG8YiNG2f0_u4core3cmp3Ord3cmp(
    ::rs::std::path::PathBuf const&, ::rs::std::path::PathBuf const&,
    ::rs::core::cmp::Ordering* __ret_ptr);
}
}  // namespace rs::std
inline ::rs::core::cmp::Ordering
rs_std::impl<::rs::std::path::PathBuf, ::rs::core::cmp::Ord>::cmp(
    ::rs::std::path::PathBuf const& self,
    ::rs::std::path::PathBuf const& other) {
  crubit::Slot<::rs::core::cmp::Ordering> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  rs::std::__crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXs14_uNtCsb7ytMsthdgm_u3std4pathNtB6_u7PathBufNtNtCs9kG8YiNG2f0_u4core3cmp3Ord3cmp(
          self, other, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace rs::std {
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvXs1E_uNtCsb7ytMsthdgm_u3std4pathNtB6_u6PrefixNtNtCs9kG8YiNG2f0_u4core3cmp3Ord3cmp(
    ::rs::std::path::Prefix const&, ::rs::std::path::Prefix const&,
    ::rs::core::cmp::Ordering* __ret_ptr);
}
}  // namespace rs::std
inline ::rs::core::cmp::Ordering
rs_std::impl<::rs::std::path::Prefix, ::rs::core::cmp::Ord>::cmp(
    ::rs::std::path::Prefix const& self, ::rs::std::path::Prefix const& other) {
  crubit::Slot<::rs::core::cmp::Ordering> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  rs::std::__crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXs1E_uNtCsb7ytMsthdgm_u3std4pathNtB6_u6PrefixNtNtCs9kG8YiNG2f0_u4core3cmp3Ord3cmp(
          self, other, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace rs::std {
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvXs2_uNtCsb7ytMsthdgm_u3std4pathNtB5_u15PrefixComponentNtNtCs9kG8YiNG2f0_u4core3cmp3Ord3cmp(
    ::rs::std::path::PrefixComponent const&,
    ::rs::std::path::PrefixComponent const&,
    ::rs::core::cmp::Ordering* __ret_ptr);
}
}  // namespace rs::std
inline ::rs::core::cmp::Ordering
rs_std::impl<::rs::std::path::PrefixComponent, ::rs::core::cmp::Ord>::cmp(
    ::rs::std::path::PrefixComponent const& self,
    ::rs::std::path::PrefixComponent const& other) {
  crubit::Slot<::rs::core::cmp::Ordering> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  rs::std::__crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXs2_uNtCsb7ytMsthdgm_u3std4pathNtB5_u15PrefixComponentNtNtCs9kG8YiNG2f0_u4core3cmp3Ord3cmp(
          self, other, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace rs::std {
namespace __crubit_internal {
extern "C" ::std::uintptr_t
__crubit_thunk_818b180788380d74__uRNvXsn_uNtCsb7ytMsthdgm_u3std7processNtB5_u11CommandArgsNtNtNtNtCs9kG8YiNG2f0_u4core4iter6traits10exact_usize17ExactSizeIterator3len(
    ::rs::std::process::CommandArgs const&);
}
}  // namespace rs::std
inline ::std::uintptr_t rs_std::impl<::rs::std::process::CommandArgs,
                                     ::rs::core::iter::ExactSizeIterator>::
    len(::rs::std::process::CommandArgs const& self) {
  return rs::std::__crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXsn_uNtCsb7ytMsthdgm_u3std7processNtB5_u11CommandArgsNtNtNtNtCs9kG8YiNG2f0_u4core4iter6traits10exact_usize17ExactSizeIterator3len(
          self);
}

namespace rs::std {
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvXsm_uNtCsb7ytMsthdgm_u3std7processNtB5_u11CommandArgsNtNtNtNtCs9kG8YiNG2f0_u4core4iter6traits8iterator8Iterator9size_uhint(
    ::rs::std::process::CommandArgs const&, void** __ret_ptr);
}
}  // namespace rs::std
inline ::std::tuple<::std::uintptr_t, ::std::optional<::std::uintptr_t>>
rs_std::impl<::rs::std::process::CommandArgs, ::rs::core::iter::Iterator>::
    size_hint(::rs::std::process::CommandArgs const& self) {
  ::std::uintptr_t __return_value_0_ret_val_holder;
  ::std::uintptr_t* __return_value_0_storage = &__return_value_0_ret_val_holder;
  unsigned char __return_value_1_storage
      [::crubit::OptionAbi<::crubit::TransmuteAbi<::std::uintptr_t>>::kSize];
  void* __return_value_storage[] = {__return_value_0_storage,
                                    __return_value_1_storage};
  rs::std::__crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXsm_uNtCsb7ytMsthdgm_u3std7processNtB5_u11CommandArgsNtNtNtNtCs9kG8YiNG2f0_u4core4iter6traits8iterator8Iterator9size_uhint(
          self, __return_value_storage);
  return ::std::make_tuple(
      *__return_value_0_storage,
      ::crubit::internal::Decode<
          ::crubit::OptionAbi<::crubit::TransmuteAbi<::std::uintptr_t>>>(
          ::crubit::OptionAbi<::crubit::TransmuteAbi<::std::uintptr_t>>(
              ::crubit::TransmuteAbi<::std::uintptr_t>()),
          __return_value_1_storage));
}

namespace rs::std {
namespace __crubit_internal {
extern "C" ::std::uintptr_t
__crubit_thunk_818b180788380d74__uRNvXsp_uNtCsb7ytMsthdgm_u3std7processNtB5_u11CommandEnvsNtNtNtNtCs9kG8YiNG2f0_u4core4iter6traits10exact_usize17ExactSizeIterator3len(
    ::rs::std::process::CommandEnvs const&);
}
}  // namespace rs::std
inline ::std::uintptr_t rs_std::impl<::rs::std::process::CommandEnvs,
                                     ::rs::core::iter::ExactSizeIterator>::
    len(::rs::std::process::CommandEnvs const& self) {
  return rs::std::__crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXsp_uNtCsb7ytMsthdgm_u3std7processNtB5_u11CommandEnvsNtNtNtNtCs9kG8YiNG2f0_u4core4iter6traits10exact_usize17ExactSizeIterator3len(
          self);
}

namespace rs::std {
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvXso_uNtCsb7ytMsthdgm_u3std7processNtB5_u11CommandEnvsNtNtNtNtCs9kG8YiNG2f0_u4core4iter6traits8iterator8Iterator9size_uhint(
    ::rs::std::process::CommandEnvs const&, void** __ret_ptr);
}
}  // namespace rs::std
inline ::std::tuple<::std::uintptr_t, ::std::optional<::std::uintptr_t>>
rs_std::impl<::rs::std::process::CommandEnvs, ::rs::core::iter::Iterator>::
    size_hint(::rs::std::process::CommandEnvs const& self) {
  ::std::uintptr_t __return_value_0_ret_val_holder;
  ::std::uintptr_t* __return_value_0_storage = &__return_value_0_ret_val_holder;
  unsigned char __return_value_1_storage
      [::crubit::OptionAbi<::crubit::TransmuteAbi<::std::uintptr_t>>::kSize];
  void* __return_value_storage[] = {__return_value_0_storage,
                                    __return_value_1_storage};
  rs::std::__crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXso_uNtCsb7ytMsthdgm_u3std7processNtB5_u11CommandEnvsNtNtNtNtCs9kG8YiNG2f0_u4core4iter6traits8iterator8Iterator9size_uhint(
          self, __return_value_storage);
  return ::std::make_tuple(
      *__return_value_0_storage,
      ::crubit::internal::Decode<
          ::crubit::OptionAbi<::crubit::TransmuteAbi<::std::uintptr_t>>>(
          ::crubit::OptionAbi<::crubit::TransmuteAbi<::std::uintptr_t>>(
              ::crubit::TransmuteAbi<::std::uintptr_t>()),
          __return_value_1_storage));
}

namespace rs::std {
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvXsX_uNtCsb7ytMsthdgm_u3std7processNtB5_u8ExitCodeNtB5_u11Termination6report(
    ::rs::std::process::ExitCode*, ::rs::std::process::ExitCode* __ret_ptr);
}
}  // namespace rs::std
inline ::rs::std::process::ExitCode rs_std::
    impl<::rs::std::process::ExitCode, ::rs::std::process::Termination>::report(
        ::rs::std::process::ExitCode self) {
  crubit::Slot<::rs::std::process::ExitCode> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  rs::std::__crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXsX_uNtCsb7ytMsthdgm_u3std7processNtB5_u8ExitCodeNtB5_u11Termination6report(
          &self, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace rs::std {
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvXsn_uNtCsb7ytMsthdgm_u3std4timeNtB5_u7InstantNtNtCs9kG8YiNG2f0_u4core3cmp3Ord3cmp(
    ::rs::std::time::Instant const&, ::rs::std::time::Instant const&,
    ::rs::core::cmp::Ordering* __ret_ptr);
}
}  // namespace rs::std
inline ::rs::core::cmp::Ordering
rs_std::impl<::rs::std::time::Instant, ::rs::core::cmp::Ord>::cmp(
    ::rs::std::time::Instant const& self,
    ::rs::std::time::Instant const& other) {
  crubit::Slot<::rs::core::cmp::Ordering> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  rs::std::__crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXsn_uNtCsb7ytMsthdgm_u3std4timeNtB5_u7InstantNtNtCs9kG8YiNG2f0_u4core3cmp3Ord3cmp(
          self, other, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

namespace rs::std {
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvXsw_uNtCsb7ytMsthdgm_u3std4timeNtB5_u10SystemTimeNtNtCs9kG8YiNG2f0_u4core3cmp3Ord3cmp(
    ::rs::std::time::SystemTime const&, ::rs::std::time::SystemTime const&,
    ::rs::core::cmp::Ordering* __ret_ptr);
}
}  // namespace rs::std
inline ::rs::core::cmp::Ordering
rs_std::impl<::rs::std::time::SystemTime, ::rs::core::cmp::Ord>::cmp(
    ::rs::std::time::SystemTime const& self,
    ::rs::std::time::SystemTime const& other) {
  crubit::Slot<::rs::core::cmp::Ordering> __return_value_ret_val_holder;
  auto* __return_value_storage = __return_value_ret_val_holder.Get();
  rs::std::__crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvXsw_uNtCsb7ytMsthdgm_u3std4timeNtB5_u10SystemTimeNtNtCs9kG8YiNG2f0_u4core3cmp3Ord3cmp(
          self, other, __return_value_storage);
  return ::std::move(__return_value_ret_val_holder).AssumeInitAndTakeValue();
}

#ifndef _CRUBIT_BINDINGS_FOR_IMPL_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Vec_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020uint8_ut_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR_IMPL_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Vec_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020uint8_ut_x00000020_x0000003e
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYINtNtCsaddbpR6HRqH_u5alloc3vec3VechENtNtCs9kG8YiNG2f0_u4core7default7Default7defaultCsb7ytMsthdgm_u3std(
    rs_std::Vec<::std::uint8_t>* __ret_ptr);
}
inline rs_std::Vec<::std::uint8_t>::Vec() {
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYINtNtCsaddbpR6HRqH_u5alloc3vec3VechENtNtCs9kG8YiNG2f0_u4core7default7Default7defaultCsb7ytMsthdgm_u3std(
          this);
}
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYINtNtCsaddbpR6HRqH_u5alloc3vec3VechENtNtCs9kG8YiNG2f0_u4core5clone5Clone5cloneCsb7ytMsthdgm_u3std(
    rs_std::Vec<::std::uint8_t> const&, rs_std::Vec<::std::uint8_t>* __ret_ptr);
}
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYINtNtCsaddbpR6HRqH_u5alloc3vec3VechENtNtCs9kG8YiNG2f0_u4core5clone5Clone10clone_ufromCsb7ytMsthdgm_u3std(
    rs_std::Vec<::std::uint8_t>&, rs_std::Vec<::std::uint8_t> const&);
}
inline rs_std::Vec<::std::uint8_t>::Vec(const Vec& other) {
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYINtNtCsaddbpR6HRqH_u5alloc3vec3VechENtNtCs9kG8YiNG2f0_u4core5clone5Clone5cloneCsb7ytMsthdgm_u3std(
          other, this);
}
inline rs_std::Vec<::std::uint8_t>& rs_std::Vec<::std::uint8_t>::operator=(
    const Vec& other) {
  if (this != &other) {
    __crubit_internal::
        __crubit_thunk_818b180788380d74__uRNvYINtNtCsaddbpR6HRqH_u5alloc3vec3VechENtNtCs9kG8YiNG2f0_u4core5clone5Clone10clone_ufromCsb7ytMsthdgm_u3std(
            *this, other);
  }
  return *this;
}
inline rs_std::Vec<::std::uint8_t>::Vec(Vec&& other) : Vec() {
  *this = ::std::move(other);
}
inline rs_std::Vec<::std::uint8_t>& rs_std::Vec<::std::uint8_t>::operator=(
    Vec&& other) {
  crubit::MemSwap(*this, other);
  return *this;
}
inline rs_std::Vec<::std::uint8_t>::Vec(::crubit::UnsafeRelocateTag,
                                        Vec&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}

extern "C" void
__crubit_thunk_818b180788380d74__uRNvYINtNtCsaddbpR6HRqH_u5alloc3vec3VechENtNtNtCs9kG8YiNG2f0_u4core3ops4drop4Drop4dropCsb7ytMsthdgm_u3std(
    void* vec) noexcept;
inline rs_std::Vec<::std::uint8_t>::~Vec() noexcept {
  __crubit_thunk_818b180788380d74__uRNvYINtNtCsaddbpR6HRqH_u5alloc3vec3VechENtNtNtCs9kG8YiNG2f0_u4core3ops4drop4Drop4dropCsb7ytMsthdgm_u3std(
      this);
}
inline ::std::uint8_t* rs_std::Vec<::std::uint8_t>::data() noexcept {
  return std::bit_cast<::std::uint8_t*>(
      *reinterpret_cast<const std::uintptr_t*>(&storage_[8]));
}
inline ::std::uint8_t const* rs_std::Vec<::std::uint8_t>::data()
    const noexcept {
  return std::bit_cast<::std::uint8_t*>(
      *reinterpret_cast<const std::uintptr_t*>(&storage_[8]));
}
inline std::size_t rs_std::Vec<::std::uint8_t>::size() const noexcept {
  return std::bit_cast<std::size_t>(
      *reinterpret_cast<const std::size_t*>(&storage_[16]));
}
inline ::std::uint8_t& rs_std::Vec<::std::uint8_t>::operator[](
    std::size_t index) noexcept {
  CRUBIT_CHECK(index < size());
  return data()[index];
}
inline ::std::uint8_t const& rs_std::Vec<::std::uint8_t>::operator[](
    std::size_t index) const noexcept {
  CRUBIT_CHECK(index < size());
  return data()[index];
}
inline ::std::uint8_t* rs_std::Vec<::std::uint8_t>::begin() noexcept {
  return data();
}
inline ::std::uint8_t const* rs_std::Vec<::std::uint8_t>::begin()
    const noexcept {
  return data();
}
inline ::std::uint8_t* rs_std::Vec<::std::uint8_t>::end() noexcept {
  return data() + size();
}
inline ::std::uint8_t const* rs_std::Vec<::std::uint8_t>::end() const noexcept {
  return data() + size();
}
#endif

#ifndef _CRUBIT_BINDINGS_FOR_IMPL_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Option_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020alloc_x00000020_x0000003a_x0000003a_x00000020string_x00000020_x0000003a_x0000003a_x00000020String_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR_IMPL_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Option_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020alloc_x00000020_x0000003a_x0000003a_x00000020string_x00000020_x0000003a_x0000003a_x00000020String_x00000020_x0000003e
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYINtNtCs9kG8YiNG2f0_u4core6option6OptionNtNtCsaddbpR6HRqH_u5alloc6string6StringENtNtB7_u5clone5Clone5cloneCsb7ytMsthdgm_u3std(
    rs_std::Option<::rs::alloc::string::String> const&,
    rs_std::Option<::rs::alloc::string::String>* __ret_ptr);
}
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYINtNtCs9kG8YiNG2f0_u4core6option6OptionNtNtCsaddbpR6HRqH_u5alloc6string6StringENtNtB7_u5clone5Clone10clone_ufromCsb7ytMsthdgm_u3std(
    rs_std::Option<::rs::alloc::string::String>&,
    rs_std::Option<::rs::alloc::string::String> const&);
}
inline rs_std::Option<::rs::alloc::string::String>::Option(
    const Option& other) {
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYINtNtCs9kG8YiNG2f0_u4core6option6OptionNtNtCsaddbpR6HRqH_u5alloc6string6StringENtNtB7_u5clone5Clone5cloneCsb7ytMsthdgm_u3std(
          other, this);
}
inline rs_std::Option<::rs::alloc::string::String>&
rs_std::Option<::rs::alloc::string::String>::operator=(const Option& other) {
  if (this != &other) {
    __crubit_internal::
        __crubit_thunk_818b180788380d74__uRNvYINtNtCs9kG8YiNG2f0_u4core6option6OptionNtNtCsaddbpR6HRqH_u5alloc6string6StringENtNtB7_u5clone5Clone10clone_ufromCsb7ytMsthdgm_u3std(
            *this, other);
  }
  return *this;
}
inline rs_std::Option<::rs::alloc::string::String>::Option(Option&& other)
    : Option() {
  *this = ::std::move(other);
}
inline rs_std::Option<::rs::alloc::string::String>&
rs_std::Option<::rs::alloc::string::String>::operator=(Option&& other) {
  crubit::MemSwap(*this, other);
  return *this;
}
inline rs_std::Option<::rs::alloc::string::String>::Option(
    ::crubit::UnsafeRelocateTag, Option&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}
inline constexpr rs_std::Option<
    ::rs::alloc::string::String>::~Option() noexcept {
  this->reset();
}
inline constexpr ::std::uint64_t
rs_std::Option<::rs::alloc::string::String>::tag() const& noexcept {
  ::std::array<unsigned char, sizeof(::std::uint64_t)> __bytes = {};
  for (::std::size_t i = 0; i < sizeof(::std::uint64_t); ++i) {
    __bytes[i] = storage_[0 + i];
  }
  return ::std::bit_cast<::std::uint64_t>(__bytes);
}
inline constexpr void rs_std::Option<::rs::alloc::string::String>::set_tag(
    ::std::uint64_t tag) noexcept {
  auto __bytes =
      ::std::bit_cast<::std::array<unsigned char, sizeof(::std::uint64_t)>>(
          tag);
  for (::std::size_t i = 0; i < sizeof(::std::uint64_t); ++i) {
    storage_[0 + i] = __bytes[i];
  }
}

inline constexpr rs_std::Option<::rs::alloc::string::String>::Option(
    ::std::nullopt_t) noexcept
    : base_type(::std::nullopt) {}
inline constexpr rs_std::Option<::rs::alloc::string::String>& rs_std::Option<
    ::rs::alloc::string::String>::operator=(::std::nullopt_t) noexcept {
  base_type::operator=(::std::nullopt);
  return *this;
}
template <typename U>
  requires(rs_std::OptionForwardConstructible<
           rs_std::Option<::rs::alloc::string::String>,
           ::rs::alloc::string::String, U>)
inline rs_std::Option<::rs::alloc::string::String>::Option(U&& value) noexcept
    : base_type(::std::forward<U>(value)) {}
template <typename U>
  requires(rs_std::OptionForwardConstructible<
           rs_std::Option<::rs::alloc::string::String>,
           ::rs::alloc::string::String, U>)
inline rs_std::Option<::rs::alloc::string::String>&
rs_std::Option<::rs::alloc::string::String>::operator=(U&& value) noexcept {
  base_type::operator=(::std::forward<U>(value));
  return *this;
}
template <typename Opt>
  requires(rs_std::OptionFromStdOptional<::rs::alloc::string::String, Opt>)
inline rs_std::Option<::rs::alloc::string::String>::Option(Opt&& value) noexcept
    : base_type(::std::forward<Opt>(value)) {}
template <typename Opt>
  requires(rs_std::OptionFromStdOptional<::rs::alloc::string::String, Opt>)
inline rs_std::Option<::rs::alloc::string::String>&
rs_std::Option<::rs::alloc::string::String>::operator=(Opt&& value) noexcept {
  base_type::operator=(::std::forward<Opt>(value));
  return *this;
}
template <typename... Args>
inline rs_std::Option<::rs::alloc::string::String>::Option(
    ::std::in_place_t ip, Args&&... args) noexcept
    : base_type(ip, ::std::forward<Args>(args)...) {}

#endif

#ifndef _CRUBIT_BINDINGS_FOR_IMPL_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Option_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020core_x00000020_x0000003a_x0000003a_x00000020time_x00000020_x0000003a_x0000003a_x00000020Duration_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR_IMPL_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Option_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020core_x00000020_x0000003a_x0000003a_x00000020time_x00000020_x0000003a_x0000003a_x00000020Duration_x00000020_x0000003e
static_assert(::std::is_trivially_copy_constructible_v<
              rs_std::Option<::rs::core::time::Duration>>);
static_assert(::std::is_trivially_copy_assignable_v<
              rs_std::Option<::rs::core::time::Duration>>);
static_assert(::std::is_trivially_move_constructible_v<
              rs_std::Option<::rs::core::time::Duration>>);
static_assert(::std::is_trivially_move_assignable_v<
              rs_std::Option<::rs::core::time::Duration>>);
inline rs_std::Option<::rs::core::time::Duration>::Option(
    ::crubit::UnsafeRelocateTag, Option&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}
static_assert(::std::is_trivially_destructible_v<
              rs_std::Option<::rs::core::time::Duration>>);
inline constexpr ::std::uint32_t
rs_std::Option<::rs::core::time::Duration>::tag() const& noexcept {
  ::std::array<unsigned char, sizeof(::std::uint32_t)> __bytes = {};
  for (::std::size_t i = 0; i < sizeof(::std::uint32_t); ++i) {
    __bytes[i] = storage_[8 + i];
  }
  return ::std::bit_cast<::std::uint32_t>(__bytes);
}
inline constexpr void rs_std::Option<::rs::core::time::Duration>::set_tag(
    ::std::uint32_t tag) noexcept {
  auto __bytes =
      ::std::bit_cast<::std::array<unsigned char, sizeof(::std::uint32_t)>>(
          tag);
  for (::std::size_t i = 0; i < sizeof(::std::uint32_t); ++i) {
    storage_[8 + i] = __bytes[i];
  }
}

inline constexpr rs_std::Option<::rs::core::time::Duration>::Option(
    ::std::nullopt_t) noexcept
    : base_type(::std::nullopt) {}
inline constexpr rs_std::Option<::rs::core::time::Duration>& rs_std::Option<
    ::rs::core::time::Duration>::operator=(::std::nullopt_t) noexcept {
  base_type::operator=(::std::nullopt);
  return *this;
}
template <typename U>
  requires(rs_std::OptionForwardConstructible<
           rs_std::Option<::rs::core::time::Duration>,
           ::rs::core::time::Duration, U>)
inline rs_std::Option<::rs::core::time::Duration>::Option(U&& value) noexcept
    : base_type(::std::forward<U>(value)) {}
template <typename U>
  requires(rs_std::OptionForwardConstructible<
           rs_std::Option<::rs::core::time::Duration>,
           ::rs::core::time::Duration, U>)
inline rs_std::Option<::rs::core::time::Duration>&
rs_std::Option<::rs::core::time::Duration>::operator=(U&& value) noexcept {
  base_type::operator=(::std::forward<U>(value));
  return *this;
}
template <typename Opt>
  requires(rs_std::OptionFromStdOptional<::rs::core::time::Duration, Opt>)
inline rs_std::Option<::rs::core::time::Duration>::Option(Opt&& value) noexcept
    : base_type(::std::forward<Opt>(value)) {}
template <typename Opt>
  requires(rs_std::OptionFromStdOptional<::rs::core::time::Duration, Opt>)
inline rs_std::Option<::rs::core::time::Duration>&
rs_std::Option<::rs::core::time::Duration>::operator=(Opt&& value) noexcept {
  base_type::operator=(::std::forward<Opt>(value));
  return *this;
}
template <typename... Args>
inline rs_std::Option<::rs::core::time::Duration>::Option(
    ::std::in_place_t ip, Args&&... args) noexcept
    : base_type(ip, ::std::forward<Args>(args)...) {}

#endif

#ifndef _CRUBIT_BINDINGS_FOR_IMPL_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Option_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020path_x00000020_x0000003a_x0000003a_x00000020Prefix_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR_IMPL_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Option_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020path_x00000020_x0000003a_x0000003a_x00000020Prefix_x00000020_x0000003e
static_assert(::std::is_trivially_copy_constructible_v<
              rs_std::Option<::rs::std::path::Prefix>>);
static_assert(::std::is_trivially_copy_assignable_v<
              rs_std::Option<::rs::std::path::Prefix>>);
static_assert(::std::is_trivially_move_constructible_v<
              rs_std::Option<::rs::std::path::Prefix>>);
static_assert(::std::is_trivially_move_assignable_v<
              rs_std::Option<::rs::std::path::Prefix>>);
inline rs_std::Option<::rs::std::path::Prefix>::Option(
    ::crubit::UnsafeRelocateTag, Option&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}
static_assert(::std::is_trivially_destructible_v<
              rs_std::Option<::rs::std::path::Prefix>>);
inline constexpr ::std::uint8_t rs_std::Option<::rs::std::path::Prefix>::tag()
    const& noexcept {
  ::std::array<unsigned char, sizeof(::std::uint8_t)> __bytes = {};
  for (::std::size_t i = 0; i < sizeof(::std::uint8_t); ++i) {
    __bytes[i] = storage_[0 + i];
  }
  return ::std::bit_cast<::std::uint8_t>(__bytes);
}
inline constexpr void rs_std::Option<::rs::std::path::Prefix>::set_tag(
    ::std::uint8_t tag) noexcept {
  auto __bytes =
      ::std::bit_cast<::std::array<unsigned char, sizeof(::std::uint8_t)>>(tag);
  for (::std::size_t i = 0; i < sizeof(::std::uint8_t); ++i) {
    storage_[0 + i] = __bytes[i];
  }
}

inline constexpr rs_std::Option<::rs::std::path::Prefix>::Option(
    ::std::nullopt_t) noexcept
    : base_type(::std::nullopt) {}
inline constexpr rs_std::Option<::rs::std::path::Prefix>&
rs_std::Option<::rs::std::path::Prefix>::operator=(::std::nullopt_t) noexcept {
  base_type::operator=(::std::nullopt);
  return *this;
}
template <typename U>
  requires(rs_std::OptionForwardConstructible<
           rs_std::Option<::rs::std::path::Prefix>, ::rs::std::path::Prefix, U>)
inline rs_std::Option<::rs::std::path::Prefix>::Option(U&& value) noexcept
    : base_type(::std::forward<U>(value)) {}
template <typename U>
  requires(rs_std::OptionForwardConstructible<
           rs_std::Option<::rs::std::path::Prefix>, ::rs::std::path::Prefix, U>)
inline rs_std::Option<::rs::std::path::Prefix>&
rs_std::Option<::rs::std::path::Prefix>::operator=(U&& value) noexcept {
  base_type::operator=(::std::forward<U>(value));
  return *this;
}
template <typename Opt>
  requires(rs_std::OptionFromStdOptional<::rs::std::path::Prefix, Opt>)
inline rs_std::Option<::rs::std::path::Prefix>::Option(Opt&& value) noexcept
    : base_type(::std::forward<Opt>(value)) {}
template <typename Opt>
  requires(rs_std::OptionFromStdOptional<::rs::std::path::Prefix, Opt>)
inline rs_std::Option<::rs::std::path::Prefix>&
rs_std::Option<::rs::std::path::Prefix>::operator=(Opt&& value) noexcept {
  base_type::operator=(::std::forward<Opt>(value));
  return *this;
}
template <typename... Args>
inline rs_std::Option<::rs::std::path::Prefix>::Option(::std::in_place_t ip,
                                                       Args&&... args) noexcept
    : base_type(ip, ::std::forward<Args>(args)...) {}

#endif

#ifndef _CRUBIT_BINDINGS_FOR_IMPL_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Option_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020process_x00000020_x0000003a_x0000003a_x00000020ChildStderr_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR_IMPL_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Option_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020process_x00000020_x0000003a_x0000003a_x00000020ChildStderr_x00000020_x0000003e
inline rs_std::Option<::rs::std::process::ChildStderr>::Option(Option&& other)
    : Option() {
  *this = ::std::move(other);
}
inline rs_std::Option<::rs::std::process::ChildStderr>&
rs_std::Option<::rs::std::process::ChildStderr>::operator=(Option&& other) {
  crubit::MemSwap(*this, other);
  return *this;
}
inline rs_std::Option<::rs::std::process::ChildStderr>::Option(
    ::crubit::UnsafeRelocateTag, Option&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}
inline constexpr rs_std::Option<
    ::rs::std::process::ChildStderr>::~Option() noexcept {
  this->reset();
}
inline constexpr ::std::int32_t
rs_std::Option<::rs::std::process::ChildStderr>::tag() const& noexcept {
  ::std::array<unsigned char, sizeof(::std::int32_t)> __bytes = {};
  for (::std::size_t i = 0; i < sizeof(::std::int32_t); ++i) {
    __bytes[i] = storage_[0 + i];
  }
  return ::std::bit_cast<::std::int32_t>(__bytes);
}
inline constexpr void rs_std::Option<::rs::std::process::ChildStderr>::set_tag(
    ::std::int32_t tag) noexcept {
  auto __bytes =
      ::std::bit_cast<::std::array<unsigned char, sizeof(::std::int32_t)>>(tag);
  for (::std::size_t i = 0; i < sizeof(::std::int32_t); ++i) {
    storage_[0 + i] = __bytes[i];
  }
}

inline constexpr rs_std::Option<::rs::std::process::ChildStderr>::Option(
    ::std::nullopt_t) noexcept
    : base_type(::std::nullopt) {}
inline constexpr rs_std::Option<::rs::std::process::ChildStderr>&
rs_std::Option<::rs::std::process::ChildStderr>::operator=(
    ::std::nullopt_t) noexcept {
  base_type::operator=(::std::nullopt);
  return *this;
}
template <typename U>
  requires(rs_std::OptionForwardConstructible<
           rs_std::Option<::rs::std::process::ChildStderr>,
           ::rs::std::process::ChildStderr, U>)
inline rs_std::Option<::rs::std::process::ChildStderr>::Option(
    U&& value) noexcept
    : base_type(::std::forward<U>(value)) {}
template <typename U>
  requires(rs_std::OptionForwardConstructible<
           rs_std::Option<::rs::std::process::ChildStderr>,
           ::rs::std::process::ChildStderr, U>)
inline rs_std::Option<::rs::std::process::ChildStderr>&
rs_std::Option<::rs::std::process::ChildStderr>::operator=(U&& value) noexcept {
  base_type::operator=(::std::forward<U>(value));
  return *this;
}
template <typename Opt>
  requires(rs_std::OptionFromStdOptional<::rs::std::process::ChildStderr, Opt>)
inline rs_std::Option<::rs::std::process::ChildStderr>::Option(
    Opt&& value) noexcept
    : base_type(::std::forward<Opt>(value)) {}
template <typename Opt>
  requires(rs_std::OptionFromStdOptional<::rs::std::process::ChildStderr, Opt>)
inline rs_std::Option<::rs::std::process::ChildStderr>&
rs_std::Option<::rs::std::process::ChildStderr>::operator=(
    Opt&& value) noexcept {
  base_type::operator=(::std::forward<Opt>(value));
  return *this;
}
template <typename... Args>
inline rs_std::Option<::rs::std::process::ChildStderr>::Option(
    ::std::in_place_t ip, Args&&... args) noexcept
    : base_type(ip, ::std::forward<Args>(args)...) {}

#endif

#ifndef _CRUBIT_BINDINGS_FOR_IMPL_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Option_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020process_x00000020_x0000003a_x0000003a_x00000020ChildStdin_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR_IMPL_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Option_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020process_x00000020_x0000003a_x0000003a_x00000020ChildStdin_x00000020_x0000003e
inline rs_std::Option<::rs::std::process::ChildStdin>::Option(Option&& other)
    : Option() {
  *this = ::std::move(other);
}
inline rs_std::Option<::rs::std::process::ChildStdin>&
rs_std::Option<::rs::std::process::ChildStdin>::operator=(Option&& other) {
  crubit::MemSwap(*this, other);
  return *this;
}
inline rs_std::Option<::rs::std::process::ChildStdin>::Option(
    ::crubit::UnsafeRelocateTag, Option&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}
inline constexpr rs_std::Option<
    ::rs::std::process::ChildStdin>::~Option() noexcept {
  this->reset();
}
inline constexpr ::std::int32_t
rs_std::Option<::rs::std::process::ChildStdin>::tag() const& noexcept {
  ::std::array<unsigned char, sizeof(::std::int32_t)> __bytes = {};
  for (::std::size_t i = 0; i < sizeof(::std::int32_t); ++i) {
    __bytes[i] = storage_[0 + i];
  }
  return ::std::bit_cast<::std::int32_t>(__bytes);
}
inline constexpr void rs_std::Option<::rs::std::process::ChildStdin>::set_tag(
    ::std::int32_t tag) noexcept {
  auto __bytes =
      ::std::bit_cast<::std::array<unsigned char, sizeof(::std::int32_t)>>(tag);
  for (::std::size_t i = 0; i < sizeof(::std::int32_t); ++i) {
    storage_[0 + i] = __bytes[i];
  }
}

inline constexpr rs_std::Option<::rs::std::process::ChildStdin>::Option(
    ::std::nullopt_t) noexcept
    : base_type(::std::nullopt) {}
inline constexpr rs_std::Option<::rs::std::process::ChildStdin>& rs_std::Option<
    ::rs::std::process::ChildStdin>::operator=(::std::nullopt_t) noexcept {
  base_type::operator=(::std::nullopt);
  return *this;
}
template <typename U>
  requires(rs_std::OptionForwardConstructible<
           rs_std::Option<::rs::std::process::ChildStdin>,
           ::rs::std::process::ChildStdin, U>)
inline rs_std::Option<::rs::std::process::ChildStdin>::Option(
    U&& value) noexcept
    : base_type(::std::forward<U>(value)) {}
template <typename U>
  requires(rs_std::OptionForwardConstructible<
           rs_std::Option<::rs::std::process::ChildStdin>,
           ::rs::std::process::ChildStdin, U>)
inline rs_std::Option<::rs::std::process::ChildStdin>&
rs_std::Option<::rs::std::process::ChildStdin>::operator=(U&& value) noexcept {
  base_type::operator=(::std::forward<U>(value));
  return *this;
}
template <typename Opt>
  requires(rs_std::OptionFromStdOptional<::rs::std::process::ChildStdin, Opt>)
inline rs_std::Option<::rs::std::process::ChildStdin>::Option(
    Opt&& value) noexcept
    : base_type(::std::forward<Opt>(value)) {}
template <typename Opt>
  requires(rs_std::OptionFromStdOptional<::rs::std::process::ChildStdin, Opt>)
inline rs_std::Option<::rs::std::process::ChildStdin>&
rs_std::Option<::rs::std::process::ChildStdin>::operator=(
    Opt&& value) noexcept {
  base_type::operator=(::std::forward<Opt>(value));
  return *this;
}
template <typename... Args>
inline rs_std::Option<::rs::std::process::ChildStdin>::Option(
    ::std::in_place_t ip, Args&&... args) noexcept
    : base_type(ip, ::std::forward<Args>(args)...) {}

#endif

#ifndef _CRUBIT_BINDINGS_FOR_IMPL_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Option_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020process_x00000020_x0000003a_x0000003a_x00000020ChildStdout_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR_IMPL_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Option_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020process_x00000020_x0000003a_x0000003a_x00000020ChildStdout_x00000020_x0000003e
inline rs_std::Option<::rs::std::process::ChildStdout>::Option(Option&& other)
    : Option() {
  *this = ::std::move(other);
}
inline rs_std::Option<::rs::std::process::ChildStdout>&
rs_std::Option<::rs::std::process::ChildStdout>::operator=(Option&& other) {
  crubit::MemSwap(*this, other);
  return *this;
}
inline rs_std::Option<::rs::std::process::ChildStdout>::Option(
    ::crubit::UnsafeRelocateTag, Option&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}
inline constexpr rs_std::Option<
    ::rs::std::process::ChildStdout>::~Option() noexcept {
  this->reset();
}
inline constexpr ::std::int32_t
rs_std::Option<::rs::std::process::ChildStdout>::tag() const& noexcept {
  ::std::array<unsigned char, sizeof(::std::int32_t)> __bytes = {};
  for (::std::size_t i = 0; i < sizeof(::std::int32_t); ++i) {
    __bytes[i] = storage_[0 + i];
  }
  return ::std::bit_cast<::std::int32_t>(__bytes);
}
inline constexpr void rs_std::Option<::rs::std::process::ChildStdout>::set_tag(
    ::std::int32_t tag) noexcept {
  auto __bytes =
      ::std::bit_cast<::std::array<unsigned char, sizeof(::std::int32_t)>>(tag);
  for (::std::size_t i = 0; i < sizeof(::std::int32_t); ++i) {
    storage_[0 + i] = __bytes[i];
  }
}

inline constexpr rs_std::Option<::rs::std::process::ChildStdout>::Option(
    ::std::nullopt_t) noexcept
    : base_type(::std::nullopt) {}
inline constexpr rs_std::Option<::rs::std::process::ChildStdout>&
rs_std::Option<::rs::std::process::ChildStdout>::operator=(
    ::std::nullopt_t) noexcept {
  base_type::operator=(::std::nullopt);
  return *this;
}
template <typename U>
  requires(rs_std::OptionForwardConstructible<
           rs_std::Option<::rs::std::process::ChildStdout>,
           ::rs::std::process::ChildStdout, U>)
inline rs_std::Option<::rs::std::process::ChildStdout>::Option(
    U&& value) noexcept
    : base_type(::std::forward<U>(value)) {}
template <typename U>
  requires(rs_std::OptionForwardConstructible<
           rs_std::Option<::rs::std::process::ChildStdout>,
           ::rs::std::process::ChildStdout, U>)
inline rs_std::Option<::rs::std::process::ChildStdout>&
rs_std::Option<::rs::std::process::ChildStdout>::operator=(U&& value) noexcept {
  base_type::operator=(::std::forward<U>(value));
  return *this;
}
template <typename Opt>
  requires(rs_std::OptionFromStdOptional<::rs::std::process::ChildStdout, Opt>)
inline rs_std::Option<::rs::std::process::ChildStdout>::Option(
    Opt&& value) noexcept
    : base_type(::std::forward<Opt>(value)) {}
template <typename Opt>
  requires(rs_std::OptionFromStdOptional<::rs::std::process::ChildStdout, Opt>)
inline rs_std::Option<::rs::std::process::ChildStdout>&
rs_std::Option<::rs::std::process::ChildStdout>::operator=(
    Opt&& value) noexcept {
  base_type::operator=(::std::forward<Opt>(value));
  return *this;
}
template <typename... Args>
inline rs_std::Option<::rs::std::process::ChildStdout>::Option(
    ::std::in_place_t ip, Args&&... args) noexcept
    : base_type(ip, ::std::forward<Args>(args)...) {}

#endif

#ifndef _CRUBIT_BINDINGS_FOR_IMPL_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Option_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020process_x00000020_x0000003a_x0000003a_x00000020ExitStatus_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR_IMPL_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Option_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020process_x00000020_x0000003a_x0000003a_x00000020ExitStatus_x00000020_x0000003e
static_assert(::std::is_trivially_copy_constructible_v<
              rs_std::Option<::rs::std::process::ExitStatus>>);
static_assert(::std::is_trivially_copy_assignable_v<
              rs_std::Option<::rs::std::process::ExitStatus>>);
static_assert(::std::is_trivially_move_constructible_v<
              rs_std::Option<::rs::std::process::ExitStatus>>);
static_assert(::std::is_trivially_move_assignable_v<
              rs_std::Option<::rs::std::process::ExitStatus>>);
inline rs_std::Option<::rs::std::process::ExitStatus>::Option(
    ::crubit::UnsafeRelocateTag, Option&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}
static_assert(::std::is_trivially_destructible_v<
              rs_std::Option<::rs::std::process::ExitStatus>>);
inline constexpr ::std::uint32_t
rs_std::Option<::rs::std::process::ExitStatus>::tag() const& noexcept {
  ::std::array<unsigned char, sizeof(::std::uint32_t)> __bytes = {};
  for (::std::size_t i = 0; i < sizeof(::std::uint32_t); ++i) {
    __bytes[i] = storage_[0 + i];
  }
  return ::std::bit_cast<::std::uint32_t>(__bytes);
}
inline constexpr void rs_std::Option<::rs::std::process::ExitStatus>::set_tag(
    ::std::uint32_t tag) noexcept {
  auto __bytes =
      ::std::bit_cast<::std::array<unsigned char, sizeof(::std::uint32_t)>>(
          tag);
  for (::std::size_t i = 0; i < sizeof(::std::uint32_t); ++i) {
    storage_[0 + i] = __bytes[i];
  }
}

inline constexpr rs_std::Option<::rs::std::process::ExitStatus>::Option(
    ::std::nullopt_t) noexcept
    : base_type(::std::nullopt) {}
inline constexpr rs_std::Option<::rs::std::process::ExitStatus>& rs_std::Option<
    ::rs::std::process::ExitStatus>::operator=(::std::nullopt_t) noexcept {
  base_type::operator=(::std::nullopt);
  return *this;
}
template <typename U>
  requires(rs_std::OptionForwardConstructible<
           rs_std::Option<::rs::std::process::ExitStatus>,
           ::rs::std::process::ExitStatus, U>)
inline rs_std::Option<::rs::std::process::ExitStatus>::Option(
    U&& value) noexcept
    : base_type(::std::forward<U>(value)) {}
template <typename U>
  requires(rs_std::OptionForwardConstructible<
           rs_std::Option<::rs::std::process::ExitStatus>,
           ::rs::std::process::ExitStatus, U>)
inline rs_std::Option<::rs::std::process::ExitStatus>&
rs_std::Option<::rs::std::process::ExitStatus>::operator=(U&& value) noexcept {
  base_type::operator=(::std::forward<U>(value));
  return *this;
}
template <typename Opt>
  requires(rs_std::OptionFromStdOptional<::rs::std::process::ExitStatus, Opt>)
inline rs_std::Option<::rs::std::process::ExitStatus>::Option(
    Opt&& value) noexcept
    : base_type(::std::forward<Opt>(value)) {}
template <typename Opt>
  requires(rs_std::OptionFromStdOptional<::rs::std::process::ExitStatus, Opt>)
inline rs_std::Option<::rs::std::process::ExitStatus>&
rs_std::Option<::rs::std::process::ExitStatus>::operator=(
    Opt&& value) noexcept {
  base_type::operator=(::std::forward<Opt>(value));
  return *this;
}
template <typename... Args>
inline rs_std::Option<::rs::std::process::ExitStatus>::Option(
    ::std::in_place_t ip, Args&&... args) noexcept
    : base_type(ip, ::std::forward<Args>(args)...) {}

#endif

#ifndef _CRUBIT_BINDINGS_FOR_IMPL_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020rs_ustd_x00000020_x0000003a_x0000003a_x00000020StrRef_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020core_x00000020_x0000003a_x0000003a_x00000020str_x00000020_x0000003a_x0000003a_x00000020Utf8Error_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR_IMPL_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020rs_ustd_x00000020_x0000003a_x0000003a_x00000020StrRef_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020core_x00000020_x0000003a_x0000003a_x00000020str_x00000020_x0000003a_x0000003a_x00000020Utf8Error_x00000020_x0000003e
static_assert(::std::is_trivially_copy_constructible_v<
              rs_std::Result<rs_std::StrRef, ::rs::core::str::Utf8Error>>);
static_assert(::std::is_trivially_copy_assignable_v<
              rs_std::Result<rs_std::StrRef, ::rs::core::str::Utf8Error>>);
static_assert(::std::is_trivially_move_constructible_v<
              rs_std::Result<rs_std::StrRef, ::rs::core::str::Utf8Error>>);
static_assert(::std::is_trivially_move_assignable_v<
              rs_std::Result<rs_std::StrRef, ::rs::core::str::Utf8Error>>);
inline rs_std::Result<rs_std::StrRef, ::rs::core::str::Utf8Error>::Result(
    ::crubit::UnsafeRelocateTag, Result&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}
static_assert(::std::is_trivially_destructible_v<
              rs_std::Result<rs_std::StrRef, ::rs::core::str::Utf8Error>>);
inline constexpr ::std::uint64_t rs_std::Result<
    rs_std::StrRef, ::rs::core::str::Utf8Error>::tag() const& noexcept {
  std::array<unsigned char, sizeof(::std::uint64_t)> __bytes = {};
  for (std::size_t i = 0; i < sizeof(::std::uint64_t); ++i) {
    __bytes[i] = __storage[0 + i];
  }
  return std::bit_cast<::std::uint64_t>(__bytes);
}
inline constexpr void
rs_std::Result<rs_std::StrRef, ::rs::core::str::Utf8Error>::set_tag(
    ::std::uint64_t tag) noexcept {
  auto __bytes =
      std::bit_cast<std::array<unsigned char, sizeof(::std::uint64_t)>>(tag);
  for (std::size_t i = 0; i < sizeof(::std::uint64_t); ++i) {
    __storage[0 + i] = __bytes[i];
  }
}

template <typename U>
  requires(rs_std::ResultForwardConstructible<
           rs_std::Result<rs_std::StrRef, ::rs::core::str::Utf8Error>,
           rs_std::StrRef, U>)
inline constexpr rs_std::Result<
    rs_std::StrRef, ::rs::core::str::Utf8Error>::Result(U&& ok) noexcept
    : base_type(::std::forward<U>(ok)) {}
template <typename U>
  requires(rs_std::ResultForwardConstructible<
           rs_std::Result<rs_std::StrRef, ::rs::core::str::Utf8Error>,
           rs_std::StrRef, U>)
inline constexpr rs_std::Result<rs_std::StrRef, ::rs::core::str::Utf8Error>&
rs_std::Result<rs_std::StrRef, ::rs::core::str::Utf8Error>::operator=(
    U&& ok) noexcept {
  base_type::operator=(::std::forward<U>(ok));
  return *this;
}
template <typename F>
  requires(rs_std::ResultUnexpectedConstructible<::rs::core::str::Utf8Error, F>)
inline constexpr rs_std::Result<rs_std::StrRef, ::rs::core::str::Utf8Error>::
    Result(rs_std::unexpected<F>&& err) noexcept
    : base_type(::std::move(err)) {}
template <typename F>
  requires(rs_std::ResultUnexpectedConstructible<::rs::core::str::Utf8Error, F>)
inline constexpr rs_std::Result<rs_std::StrRef, ::rs::core::str::Utf8Error>&
rs_std::Result<rs_std::StrRef, ::rs::core::str::Utf8Error>::operator=(
    rs_std::unexpected<F>&& err) noexcept {
  base_type::operator=(::std::move(err));
  return *this;
}
template <typename... Args>
inline constexpr rs_std::Result<
    rs_std::StrRef, ::rs::core::str::Utf8Error>::Result(::std::in_place_t ip,
                                                        Args&&... args) noexcept
    : base_type(ip, ::std::forward<Args>(args)...) {}
template <typename... Args>
inline constexpr rs_std::Result<
    rs_std::StrRef, ::rs::core::str::Utf8Error>::Result(rs_std::unexpect_t u,
                                                        Args&&... args) noexcept
    : base_type(u, ::std::forward<Args>(args)...) {}

#endif

#ifndef _CRUBIT_BINDINGS_FOR_IMPL_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020rs_ustd_x00000020_x0000003a_x0000003a_x00000020Tuple_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020PipeReader_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020PipeWriter_x00000020_x0000003e_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR_IMPL_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020rs_ustd_x00000020_x0000003a_x0000003a_x00000020Tuple_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020PipeReader_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020PipeWriter_x00000020_x0000003e_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
inline rs_std::Result<
    rs_std::Tuple<::rs::std::io::PipeReader, ::rs::std::io::PipeWriter>,
    ::rs::std::io::Error>::Result(::crubit::UnsafeRelocateTag, Result&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}
inline rs_std::Result<
    rs_std::Tuple<::rs::std::io::PipeReader, ::rs::std::io::PipeWriter>,
    ::rs::std::io::Error>::~Result() noexcept {
  this->Reset();
}
inline constexpr ::std::uint32_t rs_std::Result<
    rs_std::Tuple<::rs::std::io::PipeReader, ::rs::std::io::PipeWriter>,
    ::rs::std::io::Error>::tag() const& noexcept {
  std::array<unsigned char, sizeof(::std::uint32_t)> __bytes = {};
  for (std::size_t i = 0; i < sizeof(::std::uint32_t); ++i) {
    __bytes[i] = __storage[0 + i];
  }
  return std::bit_cast<::std::uint32_t>(__bytes);
}
inline constexpr void rs_std::Result<
    rs_std::Tuple<::rs::std::io::PipeReader, ::rs::std::io::PipeWriter>,
    ::rs::std::io::Error>::set_tag(::std::uint32_t tag) noexcept {
  auto __bytes =
      std::bit_cast<std::array<unsigned char, sizeof(::std::uint32_t)>>(tag);
  for (std::size_t i = 0; i < sizeof(::std::uint32_t); ++i) {
    __storage[0 + i] = __bytes[i];
  }
}

template <typename U>
  requires(rs_std::ResultForwardConstructible<
           rs_std::Result<rs_std::Tuple<::rs::std::io::PipeReader,
                                        ::rs::std::io::PipeWriter>,
                          ::rs::std::io::Error>,
           rs_std::Tuple<::rs::std::io::PipeReader, ::rs::std::io::PipeWriter>,
           U>)
inline constexpr rs_std::Result<
    rs_std::Tuple<::rs::std::io::PipeReader, ::rs::std::io::PipeWriter>,
    ::rs::std::io::Error>::Result(U&& ok) noexcept
    : base_type(::std::forward<U>(ok)) {}
template <typename U>
  requires(rs_std::ResultForwardConstructible<
           rs_std::Result<rs_std::Tuple<::rs::std::io::PipeReader,
                                        ::rs::std::io::PipeWriter>,
                          ::rs::std::io::Error>,
           rs_std::Tuple<::rs::std::io::PipeReader, ::rs::std::io::PipeWriter>,
           U>)
inline constexpr rs_std::Result<
    rs_std::Tuple<::rs::std::io::PipeReader, ::rs::std::io::PipeWriter>,
    ::rs::std::io::Error>&
rs_std::Result<
    rs_std::Tuple<::rs::std::io::PipeReader, ::rs::std::io::PipeWriter>,
    ::rs::std::io::Error>::operator=(U&& ok) noexcept {
  base_type::operator=(::std::forward<U>(ok));
  return *this;
}
template <typename F>
  requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
inline constexpr rs_std::Result<
    rs_std::Tuple<::rs::std::io::PipeReader, ::rs::std::io::PipeWriter>,
    ::rs::std::io::Error>::Result(rs_std::unexpected<F>&& err) noexcept
    : base_type(::std::move(err)) {}
template <typename F>
  requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
inline constexpr rs_std::Result<
    rs_std::Tuple<::rs::std::io::PipeReader, ::rs::std::io::PipeWriter>,
    ::rs::std::io::Error>&
rs_std::Result<
    rs_std::Tuple<::rs::std::io::PipeReader, ::rs::std::io::PipeWriter>,
    ::rs::std::io::Error>::operator=(rs_std::unexpected<F>&& err) noexcept {
  base_type::operator=(::std::move(err));
  return *this;
}
template <typename... Args>
inline constexpr rs_std::Result<
    rs_std::Tuple<::rs::std::io::PipeReader, ::rs::std::io::PipeWriter>,
    ::rs::std::io::Error>::Result(::std::in_place_t ip, Args&&... args) noexcept
    : base_type(ip, ::std::forward<Args>(args)...) {}
template <typename... Args>
inline constexpr rs_std::Result<
    rs_std::Tuple<::rs::std::io::PipeReader, ::rs::std::io::PipeWriter>,
    ::rs::std::io::Error>::Result(rs_std::unexpect_t u, Args&&... args) noexcept
    : base_type(u, ::std::forward<Args>(args)...) {}

#endif

#ifndef _CRUBIT_BINDINGS_FOR_IMPL_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020rs_ustd_x00000020_x0000003a_x0000003a_x00000020Tuple_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020net_x00000020_x0000003a_x0000003a_x00000020TcpStream_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020core_x00000020_x0000003a_x0000003a_x00000020net_x00000020_x0000003a_x0000003a_x00000020SocketAddr_x00000020_x0000003e_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR_IMPL_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020rs_ustd_x00000020_x0000003a_x0000003a_x00000020Tuple_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020net_x00000020_x0000003a_x0000003a_x00000020TcpStream_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020core_x00000020_x0000003a_x0000003a_x00000020net_x00000020_x0000003a_x0000003a_x00000020SocketAddr_x00000020_x0000003e_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
inline rs_std::Result<
    rs_std::Tuple<::rs::std::net::TcpStream, ::rs::core::net::SocketAddr>,
    ::rs::std::io::Error>::Result(::crubit::UnsafeRelocateTag, Result&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}
inline rs_std::Result<
    rs_std::Tuple<::rs::std::net::TcpStream, ::rs::core::net::SocketAddr>,
    ::rs::std::io::Error>::~Result() noexcept {
  this->Reset();
}
inline constexpr ::std::uint32_t rs_std::Result<
    rs_std::Tuple<::rs::std::net::TcpStream, ::rs::core::net::SocketAddr>,
    ::rs::std::io::Error>::tag() const& noexcept {
  std::array<unsigned char, sizeof(::std::uint32_t)> __bytes = {};
  for (std::size_t i = 0; i < sizeof(::std::uint32_t); ++i) {
    __bytes[i] = __storage[0 + i];
  }
  return std::bit_cast<::std::uint32_t>(__bytes);
}
inline constexpr void rs_std::Result<
    rs_std::Tuple<::rs::std::net::TcpStream, ::rs::core::net::SocketAddr>,
    ::rs::std::io::Error>::set_tag(::std::uint32_t tag) noexcept {
  auto __bytes =
      std::bit_cast<std::array<unsigned char, sizeof(::std::uint32_t)>>(tag);
  for (std::size_t i = 0; i < sizeof(::std::uint32_t); ++i) {
    __storage[0 + i] = __bytes[i];
  }
}

template <typename U>
  requires(
      rs_std::ResultForwardConstructible<
          rs_std::Result<rs_std::Tuple<::rs::std::net::TcpStream,
                                       ::rs::core::net::SocketAddr>,
                         ::rs::std::io::Error>,
          rs_std::Tuple<::rs::std::net::TcpStream, ::rs::core::net::SocketAddr>,
          U>)
inline constexpr rs_std::Result<
    rs_std::Tuple<::rs::std::net::TcpStream, ::rs::core::net::SocketAddr>,
    ::rs::std::io::Error>::Result(U&& ok) noexcept
    : base_type(::std::forward<U>(ok)) {}
template <typename U>
  requires(
      rs_std::ResultForwardConstructible<
          rs_std::Result<rs_std::Tuple<::rs::std::net::TcpStream,
                                       ::rs::core::net::SocketAddr>,
                         ::rs::std::io::Error>,
          rs_std::Tuple<::rs::std::net::TcpStream, ::rs::core::net::SocketAddr>,
          U>)
inline constexpr rs_std::Result<
    rs_std::Tuple<::rs::std::net::TcpStream, ::rs::core::net::SocketAddr>,
    ::rs::std::io::Error>&
rs_std::Result<
    rs_std::Tuple<::rs::std::net::TcpStream, ::rs::core::net::SocketAddr>,
    ::rs::std::io::Error>::operator=(U&& ok) noexcept {
  base_type::operator=(::std::forward<U>(ok));
  return *this;
}
template <typename F>
  requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
inline constexpr rs_std::Result<
    rs_std::Tuple<::rs::std::net::TcpStream, ::rs::core::net::SocketAddr>,
    ::rs::std::io::Error>::Result(rs_std::unexpected<F>&& err) noexcept
    : base_type(::std::move(err)) {}
template <typename F>
  requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
inline constexpr rs_std::Result<
    rs_std::Tuple<::rs::std::net::TcpStream, ::rs::core::net::SocketAddr>,
    ::rs::std::io::Error>&
rs_std::Result<
    rs_std::Tuple<::rs::std::net::TcpStream, ::rs::core::net::SocketAddr>,
    ::rs::std::io::Error>::operator=(rs_std::unexpected<F>&& err) noexcept {
  base_type::operator=(::std::move(err));
  return *this;
}
template <typename... Args>
inline constexpr rs_std::Result<
    rs_std::Tuple<::rs::std::net::TcpStream, ::rs::core::net::SocketAddr>,
    ::rs::std::io::Error>::Result(::std::in_place_t ip, Args&&... args) noexcept
    : base_type(ip, ::std::forward<Args>(args)...) {}
template <typename... Args>
inline constexpr rs_std::Result<
    rs_std::Tuple<::rs::std::net::TcpStream, ::rs::core::net::SocketAddr>,
    ::rs::std::io::Error>::Result(rs_std::unexpect_t u, Args&&... args) noexcept
    : base_type(u, ::std::forward<Args>(args)...) {}

#endif

#ifndef _CRUBIT_BINDINGS_FOR_IMPL_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020alloc_x00000020_x0000003a_x0000003a_x00000020string_x00000020_x0000003a_x0000003a_x00000020String_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020ffi_x00000020_x0000003a_x0000003a_x00000020OsString_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR_IMPL_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020alloc_x00000020_x0000003a_x0000003a_x00000020string_x00000020_x0000003a_x0000003a_x00000020String_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020ffi_x00000020_x0000003a_x0000003a_x00000020OsString_x00000020_x0000003e
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYINtNtCs9kG8YiNG2f0_u4core6result6ResultNtNtCsaddbpR6HRqH_u5alloc6string6StringNtNtNtCsb7ytMsthdgm_u3std3ffi6os_ustr8OsStringENtNtB7_u5clone5Clone5cloneB1m_u(
    rs_std::Result<::rs::alloc::string::String,
                   ::rs::std::ffi::OsString> const&,
    rs_std::Result<::rs::alloc::string::String, ::rs::std::ffi::OsString>*
        __ret_ptr);
}
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYINtNtCs9kG8YiNG2f0_u4core6result6ResultNtNtCsaddbpR6HRqH_u5alloc6string6StringNtNtNtCsb7ytMsthdgm_u3std3ffi6os_ustr8OsStringENtNtB7_u5clone5Clone10clone_ufromB1m_u(
    rs_std::Result<::rs::alloc::string::String, ::rs::std::ffi::OsString>&,
    rs_std::Result<::rs::alloc::string::String,
                   ::rs::std::ffi::OsString> const&);
}
inline rs_std::Result<::rs::alloc::string::String,
                      ::rs::std::ffi::OsString>::Result(const Result& other) {
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYINtNtCs9kG8YiNG2f0_u4core6result6ResultNtNtCsaddbpR6HRqH_u5alloc6string6StringNtNtNtCsb7ytMsthdgm_u3std3ffi6os_ustr8OsStringENtNtB7_u5clone5Clone5cloneB1m_u(
          other, this);
}
inline rs_std::Result<::rs::alloc::string::String, ::rs::std::ffi::OsString>&
rs_std::Result<::rs::alloc::string::String,
               ::rs::std::ffi::OsString>::operator=(const Result& other) {
  if (this != &other) {
    __crubit_internal::
        __crubit_thunk_818b180788380d74__uRNvYINtNtCs9kG8YiNG2f0_u4core6result6ResultNtNtCsaddbpR6HRqH_u5alloc6string6StringNtNtNtCsb7ytMsthdgm_u3std3ffi6os_ustr8OsStringENtNtB7_u5clone5Clone10clone_ufromB1m_u(
            *this, other);
  }
  return *this;
}
inline rs_std::Result<::rs::alloc::string::String, ::rs::std::ffi::OsString>::
    Result(::crubit::UnsafeRelocateTag, Result&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}
inline rs_std::Result<::rs::alloc::string::String,
                      ::rs::std::ffi::OsString>::~Result() noexcept {
  this->Reset();
}
inline constexpr ::std::uint64_t
rs_std::Result<::rs::alloc::string::String, ::rs::std::ffi::OsString>::tag()
    const& noexcept {
  std::array<unsigned char, sizeof(::std::uint64_t)> __bytes = {};
  for (std::size_t i = 0; i < sizeof(::std::uint64_t); ++i) {
    __bytes[i] = __storage[0 + i];
  }
  return std::bit_cast<::std::uint64_t>(__bytes);
}
inline constexpr void
rs_std::Result<::rs::alloc::string::String, ::rs::std::ffi::OsString>::set_tag(
    ::std::uint64_t tag) noexcept {
  auto __bytes =
      std::bit_cast<std::array<unsigned char, sizeof(::std::uint64_t)>>(tag);
  for (std::size_t i = 0; i < sizeof(::std::uint64_t); ++i) {
    __storage[0 + i] = __bytes[i];
  }
}

template <typename U>
  requires(
      rs_std::ResultForwardConstructible<
          rs_std::Result<::rs::alloc::string::String, ::rs::std::ffi::OsString>,
          ::rs::alloc::string::String, U>)
inline constexpr rs_std::Result<
    ::rs::alloc::string::String,
    ::rs::std::ffi::OsString>::Result(U&& ok) noexcept
    : base_type(::std::forward<U>(ok)) {}
template <typename U>
  requires(
      rs_std::ResultForwardConstructible<
          rs_std::Result<::rs::alloc::string::String, ::rs::std::ffi::OsString>,
          ::rs::alloc::string::String, U>)
inline constexpr rs_std::Result<::rs::alloc::string::String,
                                ::rs::std::ffi::OsString>&
rs_std::Result<::rs::alloc::string::String,
               ::rs::std::ffi::OsString>::operator=(U&& ok) noexcept {
  base_type::operator=(::std::forward<U>(ok));
  return *this;
}
template <typename F>
  requires(rs_std::ResultUnexpectedConstructible<::rs::std::ffi::OsString, F>)
inline constexpr rs_std::Result<
    ::rs::alloc::string::String,
    ::rs::std::ffi::OsString>::Result(rs_std::unexpected<F>&& err) noexcept
    : base_type(::std::move(err)) {}
template <typename F>
  requires(rs_std::ResultUnexpectedConstructible<::rs::std::ffi::OsString, F>)
inline constexpr rs_std::Result<::rs::alloc::string::String,
                                ::rs::std::ffi::OsString>&
rs_std::Result<::rs::alloc::string::String, ::rs::std::ffi::OsString>::
operator=(rs_std::unexpected<F>&& err) noexcept {
  base_type::operator=(::std::move(err));
  return *this;
}
template <typename... Args>
inline constexpr rs_std::
    Result<::rs::alloc::string::String, ::rs::std::ffi::OsString>::Result(
        ::std::in_place_t ip, Args&&... args) noexcept
    : base_type(ip, ::std::forward<Args>(args)...) {}
template <typename... Args>
inline constexpr rs_std::
    Result<::rs::alloc::string::String, ::rs::std::ffi::OsString>::Result(
        rs_std::unexpect_t u, Args&&... args) noexcept
    : base_type(u, ::std::forward<Args>(args)...) {}

#endif

#ifndef _CRUBIT_BINDINGS_FOR_IMPL_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020alloc_x00000020_x0000003a_x0000003a_x00000020string_x00000020_x0000003a_x0000003a_x00000020String_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020path_x00000020_x0000003a_x0000003a_x00000020PathBuf_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR_IMPL_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020alloc_x00000020_x0000003a_x0000003a_x00000020string_x00000020_x0000003a_x0000003a_x00000020String_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020path_x00000020_x0000003a_x0000003a_x00000020PathBuf_x00000020_x0000003e
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYINtNtCs9kG8YiNG2f0_u4core6result6ResultNtNtCsaddbpR6HRqH_u5alloc6string6StringNtNtCsb7ytMsthdgm_u3std4path7PathBufENtNtB7_u5clone5Clone5cloneB1k_u(
    rs_std::Result<::rs::alloc::string::String,
                   ::rs::std::path::PathBuf> const&,
    rs_std::Result<::rs::alloc::string::String, ::rs::std::path::PathBuf>*
        __ret_ptr);
}
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYINtNtCs9kG8YiNG2f0_u4core6result6ResultNtNtCsaddbpR6HRqH_u5alloc6string6StringNtNtCsb7ytMsthdgm_u3std4path7PathBufENtNtB7_u5clone5Clone10clone_ufromB1k_u(
    rs_std::Result<::rs::alloc::string::String, ::rs::std::path::PathBuf>&,
    rs_std::Result<::rs::alloc::string::String,
                   ::rs::std::path::PathBuf> const&);
}
inline rs_std::Result<::rs::alloc::string::String,
                      ::rs::std::path::PathBuf>::Result(const Result& other) {
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYINtNtCs9kG8YiNG2f0_u4core6result6ResultNtNtCsaddbpR6HRqH_u5alloc6string6StringNtNtCsb7ytMsthdgm_u3std4path7PathBufENtNtB7_u5clone5Clone5cloneB1k_u(
          other, this);
}
inline rs_std::Result<::rs::alloc::string::String, ::rs::std::path::PathBuf>&
rs_std::Result<::rs::alloc::string::String,
               ::rs::std::path::PathBuf>::operator=(const Result& other) {
  if (this != &other) {
    __crubit_internal::
        __crubit_thunk_818b180788380d74__uRNvYINtNtCs9kG8YiNG2f0_u4core6result6ResultNtNtCsaddbpR6HRqH_u5alloc6string6StringNtNtCsb7ytMsthdgm_u3std4path7PathBufENtNtB7_u5clone5Clone10clone_ufromB1k_u(
            *this, other);
  }
  return *this;
}
inline rs_std::Result<::rs::alloc::string::String, ::rs::std::path::PathBuf>::
    Result(::crubit::UnsafeRelocateTag, Result&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}
inline rs_std::Result<::rs::alloc::string::String,
                      ::rs::std::path::PathBuf>::~Result() noexcept {
  this->Reset();
}
inline constexpr ::std::uint64_t
rs_std::Result<::rs::alloc::string::String, ::rs::std::path::PathBuf>::tag()
    const& noexcept {
  std::array<unsigned char, sizeof(::std::uint64_t)> __bytes = {};
  for (std::size_t i = 0; i < sizeof(::std::uint64_t); ++i) {
    __bytes[i] = __storage[0 + i];
  }
  return std::bit_cast<::std::uint64_t>(__bytes);
}
inline constexpr void
rs_std::Result<::rs::alloc::string::String, ::rs::std::path::PathBuf>::set_tag(
    ::std::uint64_t tag) noexcept {
  auto __bytes =
      std::bit_cast<std::array<unsigned char, sizeof(::std::uint64_t)>>(tag);
  for (std::size_t i = 0; i < sizeof(::std::uint64_t); ++i) {
    __storage[0 + i] = __bytes[i];
  }
}

template <typename U>
  requires(
      rs_std::ResultForwardConstructible<
          rs_std::Result<::rs::alloc::string::String, ::rs::std::path::PathBuf>,
          ::rs::alloc::string::String, U>)
inline constexpr rs_std::Result<
    ::rs::alloc::string::String,
    ::rs::std::path::PathBuf>::Result(U&& ok) noexcept
    : base_type(::std::forward<U>(ok)) {}
template <typename U>
  requires(
      rs_std::ResultForwardConstructible<
          rs_std::Result<::rs::alloc::string::String, ::rs::std::path::PathBuf>,
          ::rs::alloc::string::String, U>)
inline constexpr rs_std::Result<::rs::alloc::string::String,
                                ::rs::std::path::PathBuf>&
rs_std::Result<::rs::alloc::string::String,
               ::rs::std::path::PathBuf>::operator=(U&& ok) noexcept {
  base_type::operator=(::std::forward<U>(ok));
  return *this;
}
template <typename F>
  requires(rs_std::ResultUnexpectedConstructible<::rs::std::path::PathBuf, F>)
inline constexpr rs_std::Result<
    ::rs::alloc::string::String,
    ::rs::std::path::PathBuf>::Result(rs_std::unexpected<F>&& err) noexcept
    : base_type(::std::move(err)) {}
template <typename F>
  requires(rs_std::ResultUnexpectedConstructible<::rs::std::path::PathBuf, F>)
inline constexpr rs_std::Result<::rs::alloc::string::String,
                                ::rs::std::path::PathBuf>&
rs_std::Result<::rs::alloc::string::String, ::rs::std::path::PathBuf>::
operator=(rs_std::unexpected<F>&& err) noexcept {
  base_type::operator=(::std::move(err));
  return *this;
}
template <typename... Args>
inline constexpr rs_std::
    Result<::rs::alloc::string::String, ::rs::std::path::PathBuf>::Result(
        ::std::in_place_t ip, Args&&... args) noexcept
    : base_type(ip, ::std::forward<Args>(args)...) {}
template <typename... Args>
inline constexpr rs_std::
    Result<::rs::alloc::string::String, ::rs::std::path::PathBuf>::Result(
        rs_std::unexpect_t u, Args&&... args) noexcept
    : base_type(u, ::std::forward<Args>(args)...) {}

#endif

#ifndef _CRUBIT_BINDINGS_FOR_IMPL_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020bool_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR_IMPL_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020bool_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
inline rs_std::Result<bool, ::rs::std::io::Error>::Result(
    ::crubit::UnsafeRelocateTag, Result&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}
inline rs_std::Result<bool, ::rs::std::io::Error>::~Result() noexcept {
  this->Reset();
}
inline constexpr ::std::uint8_t
rs_std::Result<bool, ::rs::std::io::Error>::tag() const& noexcept {
  std::array<unsigned char, sizeof(::std::uint8_t)> __bytes = {};
  for (std::size_t i = 0; i < sizeof(::std::uint8_t); ++i) {
    __bytes[i] = __storage[0 + i];
  }
  return std::bit_cast<::std::uint8_t>(__bytes);
}
inline constexpr void rs_std::Result<bool, ::rs::std::io::Error>::set_tag(
    ::std::uint8_t tag) noexcept {
  auto __bytes =
      std::bit_cast<std::array<unsigned char, sizeof(::std::uint8_t)>>(tag);
  for (std::size_t i = 0; i < sizeof(::std::uint8_t); ++i) {
    __storage[0 + i] = __bytes[i];
  }
}

template <typename U>
  requires(rs_std::ResultForwardConstructible<
           rs_std::Result<bool, ::rs::std::io::Error>, bool, U>)
inline constexpr rs_std::Result<bool, ::rs::std::io::Error>::Result(
    U&& ok) noexcept
    : base_type(::std::forward<U>(ok)) {}
template <typename U>
  requires(rs_std::ResultForwardConstructible<
           rs_std::Result<bool, ::rs::std::io::Error>, bool, U>)
inline constexpr rs_std::Result<bool, ::rs::std::io::Error>&
rs_std::Result<bool, ::rs::std::io::Error>::operator=(U&& ok) noexcept {
  base_type::operator=(::std::forward<U>(ok));
  return *this;
}
template <typename F>
  requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
inline constexpr rs_std::Result<bool, ::rs::std::io::Error>::Result(
    rs_std::unexpected<F>&& err) noexcept
    : base_type(::std::move(err)) {}
template <typename F>
  requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
inline constexpr rs_std::Result<bool, ::rs::std::io::Error>&
rs_std::Result<bool, ::rs::std::io::Error>::operator=(
    rs_std::unexpected<F>&& err) noexcept {
  base_type::operator=(::std::move(err));
  return *this;
}
template <typename... Args>
inline constexpr rs_std::Result<bool, ::rs::std::io::Error>::Result(
    ::std::in_place_t ip, Args&&... args) noexcept
    : base_type(ip, ::std::forward<Args>(args)...) {}
template <typename... Args>
inline constexpr rs_std::Result<bool, ::rs::std::io::Error>::Result(
    rs_std::unexpect_t u, Args&&... args) noexcept
    : base_type(u, ::std::forward<Args>(args)...) {}

#endif

#ifndef _CRUBIT_BINDINGS_FOR_IMPL_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020core_x00000020_x0000003a_x0000003a_x00000020net_x00000020_x0000003a_x0000003a_x00000020SocketAddr_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR_IMPL_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020core_x00000020_x0000003a_x0000003a_x00000020net_x00000020_x0000003a_x0000003a_x00000020SocketAddr_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
inline rs_std::Result<::rs::core::net::SocketAddr,
                      ::rs::std::io::Error>::Result(::crubit::UnsafeRelocateTag,
                                                    Result&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}
inline rs_std::Result<::rs::core::net::SocketAddr,
                      ::rs::std::io::Error>::~Result() noexcept {
  this->Reset();
}
inline constexpr ::std::uint16_t rs_std::Result<
    ::rs::core::net::SocketAddr, ::rs::std::io::Error>::tag() const& noexcept {
  std::array<unsigned char, sizeof(::std::uint16_t)> __bytes = {};
  for (std::size_t i = 0; i < sizeof(::std::uint16_t); ++i) {
    __bytes[i] = __storage[0 + i];
  }
  return std::bit_cast<::std::uint16_t>(__bytes);
}
inline constexpr void
rs_std::Result<::rs::core::net::SocketAddr, ::rs::std::io::Error>::set_tag(
    ::std::uint16_t tag) noexcept {
  auto __bytes =
      std::bit_cast<std::array<unsigned char, sizeof(::std::uint16_t)>>(tag);
  for (std::size_t i = 0; i < sizeof(::std::uint16_t); ++i) {
    __storage[0 + i] = __bytes[i];
  }
}

template <typename U>
  requires(rs_std::ResultForwardConstructible<
           rs_std::Result<::rs::core::net::SocketAddr, ::rs::std::io::Error>,
           ::rs::core::net::SocketAddr, U>)
inline constexpr rs_std::Result<::rs::core::net::SocketAddr,
                                ::rs::std::io::Error>::Result(U&& ok) noexcept
    : base_type(::std::forward<U>(ok)) {}
template <typename U>
  requires(rs_std::ResultForwardConstructible<
           rs_std::Result<::rs::core::net::SocketAddr, ::rs::std::io::Error>,
           ::rs::core::net::SocketAddr, U>)
inline constexpr rs_std::Result<::rs::core::net::SocketAddr,
                                ::rs::std::io::Error>&
rs_std::Result<::rs::core::net::SocketAddr, ::rs::std::io::Error>::operator=(
    U&& ok) noexcept {
  base_type::operator=(::std::forward<U>(ok));
  return *this;
}
template <typename F>
  requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
inline constexpr rs_std::Result<
    ::rs::core::net::SocketAddr,
    ::rs::std::io::Error>::Result(rs_std::unexpected<F>&& err) noexcept
    : base_type(::std::move(err)) {}
template <typename F>
  requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
inline constexpr rs_std::Result<::rs::core::net::SocketAddr,
                                ::rs::std::io::Error>&
rs_std::Result<::rs::core::net::SocketAddr, ::rs::std::io::Error>::operator=(
    rs_std::unexpected<F>&& err) noexcept {
  base_type::operator=(::std::move(err));
  return *this;
}
template <typename... Args>
inline constexpr rs_std::Result<
    ::rs::core::net::SocketAddr,
    ::rs::std::io::Error>::Result(::std::in_place_t ip, Args&&... args) noexcept
    : base_type(ip, ::std::forward<Args>(args)...) {}
template <typename... Args>
inline constexpr rs_std::Result<
    ::rs::core::net::SocketAddr,
    ::rs::std::io::Error>::Result(rs_std::unexpect_t u, Args&&... args) noexcept
    : base_type(u, ::std::forward<Args>(args)...) {}

#endif

#ifndef _CRUBIT_BINDINGS_FOR_IMPL_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020rs_ustd_x00000020_x0000003a_x0000003a_x00000020Option_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020core_x00000020_x0000003a_x0000003a_x00000020time_x00000020_x0000003a_x0000003a_x00000020Duration_x00000020_x0000003e_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR_IMPL_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020rs_ustd_x00000020_x0000003a_x0000003a_x00000020Option_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020core_x00000020_x0000003a_x0000003a_x00000020time_x00000020_x0000003a_x0000003a_x00000020Duration_x00000020_x0000003e_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
inline rs_std::Result<rs_std::Option<::rs::core::time::Duration>,
                      ::rs::std::io::Error>::Result(::crubit::UnsafeRelocateTag,
                                                    Result&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}
inline rs_std::Result<rs_std::Option<::rs::core::time::Duration>,
                      ::rs::std::io::Error>::~Result() noexcept {
  this->Reset();
}
inline constexpr ::std::uint32_t
rs_std::Result<rs_std::Option<::rs::core::time::Duration>,
               ::rs::std::io::Error>::tag() const& noexcept {
  std::array<unsigned char, sizeof(::std::uint32_t)> __bytes = {};
  for (std::size_t i = 0; i < sizeof(::std::uint32_t); ++i) {
    __bytes[i] = __storage[8 + i];
  }
  return std::bit_cast<::std::uint32_t>(__bytes);
}
inline constexpr void
rs_std::Result<rs_std::Option<::rs::core::time::Duration>,
               ::rs::std::io::Error>::set_tag(::std::uint32_t tag) noexcept {
  auto __bytes =
      std::bit_cast<std::array<unsigned char, sizeof(::std::uint32_t)>>(tag);
  for (std::size_t i = 0; i < sizeof(::std::uint32_t); ++i) {
    __storage[8 + i] = __bytes[i];
  }
}

template <typename U>
  requires(rs_std::ResultForwardConstructible<
           rs_std::Result<rs_std::Option<::rs::core::time::Duration>,
                          ::rs::std::io::Error>,
           rs_std::Option<::rs::core::time::Duration>, U>)
inline constexpr rs_std::Result<rs_std::Option<::rs::core::time::Duration>,
                                ::rs::std::io::Error>::Result(U&& ok) noexcept
    : base_type(::std::forward<U>(ok)) {}
template <typename U>
  requires(rs_std::ResultForwardConstructible<
           rs_std::Result<rs_std::Option<::rs::core::time::Duration>,
                          ::rs::std::io::Error>,
           rs_std::Option<::rs::core::time::Duration>, U>)
inline constexpr rs_std::Result<rs_std::Option<::rs::core::time::Duration>,
                                ::rs::std::io::Error>&
rs_std::Result<rs_std::Option<::rs::core::time::Duration>,
               ::rs::std::io::Error>::operator=(U&& ok) noexcept {
  base_type::operator=(::std::forward<U>(ok));
  return *this;
}
template <typename F>
  requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
inline constexpr rs_std::Result<
    rs_std::Option<::rs::core::time::Duration>,
    ::rs::std::io::Error>::Result(rs_std::unexpected<F>&& err) noexcept
    : base_type(::std::move(err)) {}
template <typename F>
  requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
inline constexpr rs_std::Result<rs_std::Option<::rs::core::time::Duration>,
                                ::rs::std::io::Error>&
rs_std::Result<rs_std::Option<::rs::core::time::Duration>,
               ::rs::std::io::Error>::operator=(rs_std::unexpected<F>&&
                                                    err) noexcept {
  base_type::operator=(::std::move(err));
  return *this;
}
template <typename... Args>
inline constexpr rs_std::Result<
    rs_std::Option<::rs::core::time::Duration>,
    ::rs::std::io::Error>::Result(::std::in_place_t ip, Args&&... args) noexcept
    : base_type(ip, ::std::forward<Args>(args)...) {}
template <typename... Args>
inline constexpr rs_std::Result<
    rs_std::Option<::rs::core::time::Duration>,
    ::rs::std::io::Error>::Result(rs_std::unexpect_t u, Args&&... args) noexcept
    : base_type(u, ::std::forward<Args>(args)...) {}

#endif

#ifndef _CRUBIT_BINDINGS_FOR_IMPL_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020rs_ustd_x00000020_x0000003a_x0000003a_x00000020Option_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020process_x00000020_x0000003a_x0000003a_x00000020ExitStatus_x00000020_x0000003e_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR_IMPL_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020rs_ustd_x00000020_x0000003a_x0000003a_x00000020Option_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020process_x00000020_x0000003a_x0000003a_x00000020ExitStatus_x00000020_x0000003e_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
inline rs_std::Result<rs_std::Option<::rs::std::process::ExitStatus>,
                      ::rs::std::io::Error>::Result(::crubit::UnsafeRelocateTag,
                                                    Result&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}
inline rs_std::Result<rs_std::Option<::rs::std::process::ExitStatus>,
                      ::rs::std::io::Error>::~Result() noexcept {
  this->Reset();
}
inline constexpr ::std::uint32_t
rs_std::Result<rs_std::Option<::rs::std::process::ExitStatus>,
               ::rs::std::io::Error>::tag() const& noexcept {
  std::array<unsigned char, sizeof(::std::uint32_t)> __bytes = {};
  for (std::size_t i = 0; i < sizeof(::std::uint32_t); ++i) {
    __bytes[i] = __storage[0 + i];
  }
  return std::bit_cast<::std::uint32_t>(__bytes);
}
inline constexpr void
rs_std::Result<rs_std::Option<::rs::std::process::ExitStatus>,
               ::rs::std::io::Error>::set_tag(::std::uint32_t tag) noexcept {
  auto __bytes =
      std::bit_cast<std::array<unsigned char, sizeof(::std::uint32_t)>>(tag);
  for (std::size_t i = 0; i < sizeof(::std::uint32_t); ++i) {
    __storage[0 + i] = __bytes[i];
  }
}

template <typename U>
  requires(rs_std::ResultForwardConstructible<
           rs_std::Result<rs_std::Option<::rs::std::process::ExitStatus>,
                          ::rs::std::io::Error>,
           rs_std::Option<::rs::std::process::ExitStatus>, U>)
inline constexpr rs_std::Result<rs_std::Option<::rs::std::process::ExitStatus>,
                                ::rs::std::io::Error>::Result(U&& ok) noexcept
    : base_type(::std::forward<U>(ok)) {}
template <typename U>
  requires(rs_std::ResultForwardConstructible<
           rs_std::Result<rs_std::Option<::rs::std::process::ExitStatus>,
                          ::rs::std::io::Error>,
           rs_std::Option<::rs::std::process::ExitStatus>, U>)
inline constexpr rs_std::Result<rs_std::Option<::rs::std::process::ExitStatus>,
                                ::rs::std::io::Error>&
rs_std::Result<rs_std::Option<::rs::std::process::ExitStatus>,
               ::rs::std::io::Error>::operator=(U&& ok) noexcept {
  base_type::operator=(::std::forward<U>(ok));
  return *this;
}
template <typename F>
  requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
inline constexpr rs_std::Result<
    rs_std::Option<::rs::std::process::ExitStatus>,
    ::rs::std::io::Error>::Result(rs_std::unexpected<F>&& err) noexcept
    : base_type(::std::move(err)) {}
template <typename F>
  requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
inline constexpr rs_std::Result<rs_std::Option<::rs::std::process::ExitStatus>,
                                ::rs::std::io::Error>&
rs_std::Result<rs_std::Option<::rs::std::process::ExitStatus>,
               ::rs::std::io::Error>::operator=(rs_std::unexpected<F>&&
                                                    err) noexcept {
  base_type::operator=(::std::move(err));
  return *this;
}
template <typename... Args>
inline constexpr rs_std::Result<
    rs_std::Option<::rs::std::process::ExitStatus>,
    ::rs::std::io::Error>::Result(::std::in_place_t ip, Args&&... args) noexcept
    : base_type(ip, ::std::forward<Args>(args)...) {}
template <typename... Args>
inline constexpr rs_std::Result<
    rs_std::Option<::rs::std::process::ExitStatus>,
    ::rs::std::io::Error>::Result(rs_std::unexpect_t u, Args&&... args) noexcept
    : base_type(u, ::std::forward<Args>(args)...) {}

#endif

#ifndef _CRUBIT_BINDINGS_FOR_IMPL_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020core_x00000020_x0000003a_x0000003a_x00000020time_x00000020_x0000003a_x0000003a_x00000020Duration_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020time_x00000020_x0000003a_x0000003a_x00000020SystemTimeError_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR_IMPL_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020core_x00000020_x0000003a_x0000003a_x00000020time_x00000020_x0000003a_x0000003a_x00000020Duration_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020time_x00000020_x0000003a_x0000003a_x00000020SystemTimeError_x00000020_x0000003e
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYINtNtCs9kG8YiNG2f0_u4core6result6ResultNtNtB7_u4time8DurationNtNtCsb7ytMsthdgm_u3std4time15SystemTimeErrorENtNtB7_u5clone5Clone5cloneB13_u(
    rs_std::Result<::rs::core::time::Duration,
                   ::rs::std::time::SystemTimeError> const&,
    rs_std::Result<::rs::core::time::Duration,
                   ::rs::std::time::SystemTimeError>* __ret_ptr);
}
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYINtNtCs9kG8YiNG2f0_u4core6result6ResultNtNtB7_u4time8DurationNtNtCsb7ytMsthdgm_u3std4time15SystemTimeErrorENtNtB7_u5clone5Clone10clone_ufromB13_u(
    rs_std::Result<::rs::core::time::Duration,
                   ::rs::std::time::SystemTimeError>&,
    rs_std::Result<::rs::core::time::Duration,
                   ::rs::std::time::SystemTimeError> const&);
}
inline rs_std::Result<::rs::core::time::Duration,
                      ::rs::std::time::SystemTimeError>::Result(const Result&
                                                                    other) {
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYINtNtCs9kG8YiNG2f0_u4core6result6ResultNtNtB7_u4time8DurationNtNtCsb7ytMsthdgm_u3std4time15SystemTimeErrorENtNtB7_u5clone5Clone5cloneB13_u(
          other, this);
}
inline rs_std::Result<::rs::core::time::Duration,
                      ::rs::std::time::SystemTimeError>&
rs_std::Result<::rs::core::time::Duration, ::rs::std::time::SystemTimeError>::
operator=(const Result& other) {
  if (this != &other) {
    __crubit_internal::
        __crubit_thunk_818b180788380d74__uRNvYINtNtCs9kG8YiNG2f0_u4core6result6ResultNtNtB7_u4time8DurationNtNtCsb7ytMsthdgm_u3std4time15SystemTimeErrorENtNtB7_u5clone5Clone10clone_ufromB13_u(
            *this, other);
  }
  return *this;
}
static_assert(
    ::std::is_trivially_move_constructible_v<rs_std::Result<
        ::rs::core::time::Duration, ::rs::std::time::SystemTimeError>>);
static_assert(
    ::std::is_trivially_move_assignable_v<rs_std::Result<
        ::rs::core::time::Duration, ::rs::std::time::SystemTimeError>>);
inline rs_std::Result<
    ::rs::core::time::Duration,
    ::rs::std::time::SystemTimeError>::Result(::crubit::UnsafeRelocateTag,
                                              Result&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}
static_assert(
    ::std::is_trivially_destructible_v<rs_std::Result<
        ::rs::core::time::Duration, ::rs::std::time::SystemTimeError>>);
inline constexpr ::std::uint64_t
rs_std::Result<::rs::core::time::Duration,
               ::rs::std::time::SystemTimeError>::tag() const& noexcept {
  std::array<unsigned char, sizeof(::std::uint64_t)> __bytes = {};
  for (std::size_t i = 0; i < sizeof(::std::uint64_t); ++i) {
    __bytes[i] = __storage[0 + i];
  }
  return std::bit_cast<::std::uint64_t>(__bytes);
}
inline constexpr void rs_std::Result<
    ::rs::core::time::Duration,
    ::rs::std::time::SystemTimeError>::set_tag(::std::uint64_t tag) noexcept {
  auto __bytes =
      std::bit_cast<std::array<unsigned char, sizeof(::std::uint64_t)>>(tag);
  for (std::size_t i = 0; i < sizeof(::std::uint64_t); ++i) {
    __storage[0 + i] = __bytes[i];
  }
}

template <typename U>
  requires(rs_std::ResultForwardConstructible<
           rs_std::Result<::rs::core::time::Duration,
                          ::rs::std::time::SystemTimeError>,
           ::rs::core::time::Duration, U>)
inline constexpr rs_std::Result<
    ::rs::core::time::Duration,
    ::rs::std::time::SystemTimeError>::Result(U&& ok) noexcept
    : base_type(::std::forward<U>(ok)) {}
template <typename U>
  requires(rs_std::ResultForwardConstructible<
           rs_std::Result<::rs::core::time::Duration,
                          ::rs::std::time::SystemTimeError>,
           ::rs::core::time::Duration, U>)
inline constexpr rs_std::Result<::rs::core::time::Duration,
                                ::rs::std::time::SystemTimeError>&
rs_std::Result<::rs::core::time::Duration,
               ::rs::std::time::SystemTimeError>::operator=(U&& ok) noexcept {
  base_type::operator=(::std::forward<U>(ok));
  return *this;
}
template <typename F>
  requires(rs_std::ResultUnexpectedConstructible<
           ::rs::std::time::SystemTimeError, F>)
inline constexpr rs_std::Result<::rs::core::time::Duration,
                                ::rs::std::time::SystemTimeError>::
    Result(rs_std::unexpected<F>&& err) noexcept
    : base_type(::std::move(err)) {}
template <typename F>
  requires(rs_std::ResultUnexpectedConstructible<
           ::rs::std::time::SystemTimeError, F>)
inline constexpr rs_std::Result<::rs::core::time::Duration,
                                ::rs::std::time::SystemTimeError>&
rs_std::Result<::rs::core::time::Duration, ::rs::std::time::SystemTimeError>::
operator=(rs_std::unexpected<F>&& err) noexcept {
  base_type::operator=(::std::move(err));
  return *this;
}
template <typename... Args>
inline constexpr rs_std::Result<
    ::rs::core::time::Duration,
    ::rs::std::time::SystemTimeError>::Result(::std::in_place_t ip,
                                              Args&&... args) noexcept
    : base_type(ip, ::std::forward<Args>(args)...) {}
template <typename... Args>
inline constexpr rs_std::Result<
    ::rs::core::time::Duration,
    ::rs::std::time::SystemTimeError>::Result(rs_std::unexpect_t u,
                                              Args&&... args) noexcept
    : base_type(u, ::std::forward<Args>(args)...) {}

#endif

#ifndef _CRUBIT_BINDINGS_FOR_IMPL_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020fs_x00000020_x0000003a_x0000003a_x00000020File_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR_IMPL_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020fs_x00000020_x0000003a_x0000003a_x00000020File_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
inline rs_std::Result<::rs::std::fs::File, ::rs::std::io::Error>::Result(
    ::crubit::UnsafeRelocateTag, Result&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}
inline rs_std::Result<::rs::std::fs::File,
                      ::rs::std::io::Error>::~Result() noexcept {
  this->Reset();
}
inline constexpr ::std::uint32_t rs_std::Result<
    ::rs::std::fs::File, ::rs::std::io::Error>::tag() const& noexcept {
  std::array<unsigned char, sizeof(::std::uint32_t)> __bytes = {};
  for (std::size_t i = 0; i < sizeof(::std::uint32_t); ++i) {
    __bytes[i] = __storage[0 + i];
  }
  return std::bit_cast<::std::uint32_t>(__bytes);
}
inline constexpr void
rs_std::Result<::rs::std::fs::File, ::rs::std::io::Error>::set_tag(
    ::std::uint32_t tag) noexcept {
  auto __bytes =
      std::bit_cast<std::array<unsigned char, sizeof(::std::uint32_t)>>(tag);
  for (std::size_t i = 0; i < sizeof(::std::uint32_t); ++i) {
    __storage[0 + i] = __bytes[i];
  }
}

template <typename U>
  requires(rs_std::ResultForwardConstructible<
           rs_std::Result<::rs::std::fs::File, ::rs::std::io::Error>,
           ::rs::std::fs::File, U>)
inline constexpr rs_std::Result<::rs::std::fs::File,
                                ::rs::std::io::Error>::Result(U&& ok) noexcept
    : base_type(::std::forward<U>(ok)) {}
template <typename U>
  requires(rs_std::ResultForwardConstructible<
           rs_std::Result<::rs::std::fs::File, ::rs::std::io::Error>,
           ::rs::std::fs::File, U>)
inline constexpr rs_std::Result<::rs::std::fs::File, ::rs::std::io::Error>&
rs_std::Result<::rs::std::fs::File, ::rs::std::io::Error>::operator=(
    U&& ok) noexcept {
  base_type::operator=(::std::forward<U>(ok));
  return *this;
}
template <typename F>
  requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
inline constexpr rs_std::Result<::rs::std::fs::File, ::rs::std::io::Error>::
    Result(rs_std::unexpected<F>&& err) noexcept
    : base_type(::std::move(err)) {}
template <typename F>
  requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
inline constexpr rs_std::Result<::rs::std::fs::File, ::rs::std::io::Error>&
rs_std::Result<::rs::std::fs::File, ::rs::std::io::Error>::operator=(
    rs_std::unexpected<F>&& err) noexcept {
  base_type::operator=(::std::move(err));
  return *this;
}
template <typename... Args>
inline constexpr rs_std::Result<
    ::rs::std::fs::File, ::rs::std::io::Error>::Result(::std::in_place_t ip,
                                                       Args&&... args) noexcept
    : base_type(ip, ::std::forward<Args>(args)...) {}
template <typename... Args>
inline constexpr rs_std::Result<
    ::rs::std::fs::File, ::rs::std::io::Error>::Result(rs_std::unexpect_t u,
                                                       Args&&... args) noexcept
    : base_type(u, ::std::forward<Args>(args)...) {}

#endif

#ifndef _CRUBIT_BINDINGS_FOR_IMPL_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020fs_x00000020_x0000003a_x0000003a_x00000020FileType_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR_IMPL_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020fs_x00000020_x0000003a_x0000003a_x00000020FileType_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
inline rs_std::Result<::rs::std::fs::FileType, ::rs::std::io::Error>::Result(
    ::crubit::UnsafeRelocateTag, Result&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}
inline rs_std::Result<::rs::std::fs::FileType,
                      ::rs::std::io::Error>::~Result() noexcept {
  this->Reset();
}
inline constexpr ::std::uint32_t rs_std::Result<
    ::rs::std::fs::FileType, ::rs::std::io::Error>::tag() const& noexcept {
  std::array<unsigned char, sizeof(::std::uint32_t)> __bytes = {};
  for (std::size_t i = 0; i < sizeof(::std::uint32_t); ++i) {
    __bytes[i] = __storage[0 + i];
  }
  return std::bit_cast<::std::uint32_t>(__bytes);
}
inline constexpr void
rs_std::Result<::rs::std::fs::FileType, ::rs::std::io::Error>::set_tag(
    ::std::uint32_t tag) noexcept {
  auto __bytes =
      std::bit_cast<std::array<unsigned char, sizeof(::std::uint32_t)>>(tag);
  for (std::size_t i = 0; i < sizeof(::std::uint32_t); ++i) {
    __storage[0 + i] = __bytes[i];
  }
}

template <typename U>
  requires(rs_std::ResultForwardConstructible<
           rs_std::Result<::rs::std::fs::FileType, ::rs::std::io::Error>,
           ::rs::std::fs::FileType, U>)
inline constexpr rs_std::Result<::rs::std::fs::FileType,
                                ::rs::std::io::Error>::Result(U&& ok) noexcept
    : base_type(::std::forward<U>(ok)) {}
template <typename U>
  requires(rs_std::ResultForwardConstructible<
           rs_std::Result<::rs::std::fs::FileType, ::rs::std::io::Error>,
           ::rs::std::fs::FileType, U>)
inline constexpr rs_std::Result<::rs::std::fs::FileType, ::rs::std::io::Error>&
rs_std::Result<::rs::std::fs::FileType, ::rs::std::io::Error>::operator=(
    U&& ok) noexcept {
  base_type::operator=(::std::forward<U>(ok));
  return *this;
}
template <typename F>
  requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
inline constexpr rs_std::Result<::rs::std::fs::FileType, ::rs::std::io::Error>::
    Result(rs_std::unexpected<F>&& err) noexcept
    : base_type(::std::move(err)) {}
template <typename F>
  requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
inline constexpr rs_std::Result<::rs::std::fs::FileType, ::rs::std::io::Error>&
rs_std::Result<::rs::std::fs::FileType, ::rs::std::io::Error>::operator=(
    rs_std::unexpected<F>&& err) noexcept {
  base_type::operator=(::std::move(err));
  return *this;
}
template <typename... Args>
inline constexpr rs_std::Result<::rs::std::fs::FileType, ::rs::std::io::Error>::
    Result(::std::in_place_t ip, Args&&... args) noexcept
    : base_type(ip, ::std::forward<Args>(args)...) {}
template <typename... Args>
inline constexpr rs_std::Result<::rs::std::fs::FileType, ::rs::std::io::Error>::
    Result(rs_std::unexpect_t u, Args&&... args) noexcept
    : base_type(u, ::std::forward<Args>(args)...) {}

#endif

#ifndef _CRUBIT_BINDINGS_FOR_IMPL_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020fs_x00000020_x0000003a_x0000003a_x00000020Metadata_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR_IMPL_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020fs_x00000020_x0000003a_x0000003a_x00000020Metadata_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
inline rs_std::Result<::rs::std::fs::Metadata, ::rs::std::io::Error>::Result(
    ::crubit::UnsafeRelocateTag, Result&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}
inline rs_std::Result<::rs::std::fs::Metadata,
                      ::rs::std::io::Error>::~Result() noexcept {
  this->Reset();
}
inline constexpr ::std::uint64_t rs_std::Result<
    ::rs::std::fs::Metadata, ::rs::std::io::Error>::tag() const& noexcept {
  std::array<unsigned char, sizeof(::std::uint64_t)> __bytes = {};
  for (std::size_t i = 0; i < sizeof(::std::uint64_t); ++i) {
    __bytes[i] = __storage[0 + i];
  }
  return std::bit_cast<::std::uint64_t>(__bytes);
}
inline constexpr void
rs_std::Result<::rs::std::fs::Metadata, ::rs::std::io::Error>::set_tag(
    ::std::uint64_t tag) noexcept {
  auto __bytes =
      std::bit_cast<std::array<unsigned char, sizeof(::std::uint64_t)>>(tag);
  for (std::size_t i = 0; i < sizeof(::std::uint64_t); ++i) {
    __storage[0 + i] = __bytes[i];
  }
}

template <typename U>
  requires(rs_std::ResultForwardConstructible<
           rs_std::Result<::rs::std::fs::Metadata, ::rs::std::io::Error>,
           ::rs::std::fs::Metadata, U>)
inline constexpr rs_std::Result<::rs::std::fs::Metadata,
                                ::rs::std::io::Error>::Result(U&& ok) noexcept
    : base_type(::std::forward<U>(ok)) {}
template <typename U>
  requires(rs_std::ResultForwardConstructible<
           rs_std::Result<::rs::std::fs::Metadata, ::rs::std::io::Error>,
           ::rs::std::fs::Metadata, U>)
inline constexpr rs_std::Result<::rs::std::fs::Metadata, ::rs::std::io::Error>&
rs_std::Result<::rs::std::fs::Metadata, ::rs::std::io::Error>::operator=(
    U&& ok) noexcept {
  base_type::operator=(::std::forward<U>(ok));
  return *this;
}
template <typename F>
  requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
inline constexpr rs_std::Result<::rs::std::fs::Metadata, ::rs::std::io::Error>::
    Result(rs_std::unexpected<F>&& err) noexcept
    : base_type(::std::move(err)) {}
template <typename F>
  requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
inline constexpr rs_std::Result<::rs::std::fs::Metadata, ::rs::std::io::Error>&
rs_std::Result<::rs::std::fs::Metadata, ::rs::std::io::Error>::operator=(
    rs_std::unexpected<F>&& err) noexcept {
  base_type::operator=(::std::move(err));
  return *this;
}
template <typename... Args>
inline constexpr rs_std::Result<::rs::std::fs::Metadata, ::rs::std::io::Error>::
    Result(::std::in_place_t ip, Args&&... args) noexcept
    : base_type(ip, ::std::forward<Args>(args)...) {}
template <typename... Args>
inline constexpr rs_std::Result<::rs::std::fs::Metadata, ::rs::std::io::Error>::
    Result(rs_std::unexpect_t u, Args&&... args) noexcept
    : base_type(u, ::std::forward<Args>(args)...) {}

#endif

#ifndef _CRUBIT_BINDINGS_FOR_IMPL_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020PipeReader_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR_IMPL_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020PipeReader_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
inline rs_std::Result<::rs::std::io::PipeReader, ::rs::std::io::Error>::Result(
    ::crubit::UnsafeRelocateTag, Result&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}
inline rs_std::Result<::rs::std::io::PipeReader,
                      ::rs::std::io::Error>::~Result() noexcept {
  this->Reset();
}
inline constexpr ::std::uint32_t rs_std::Result<
    ::rs::std::io::PipeReader, ::rs::std::io::Error>::tag() const& noexcept {
  std::array<unsigned char, sizeof(::std::uint32_t)> __bytes = {};
  for (std::size_t i = 0; i < sizeof(::std::uint32_t); ++i) {
    __bytes[i] = __storage[0 + i];
  }
  return std::bit_cast<::std::uint32_t>(__bytes);
}
inline constexpr void
rs_std::Result<::rs::std::io::PipeReader, ::rs::std::io::Error>::set_tag(
    ::std::uint32_t tag) noexcept {
  auto __bytes =
      std::bit_cast<std::array<unsigned char, sizeof(::std::uint32_t)>>(tag);
  for (std::size_t i = 0; i < sizeof(::std::uint32_t); ++i) {
    __storage[0 + i] = __bytes[i];
  }
}

template <typename U>
  requires(rs_std::ResultForwardConstructible<
           rs_std::Result<::rs::std::io::PipeReader, ::rs::std::io::Error>,
           ::rs::std::io::PipeReader, U>)
inline constexpr rs_std::Result<::rs::std::io::PipeReader,
                                ::rs::std::io::Error>::Result(U&& ok) noexcept
    : base_type(::std::forward<U>(ok)) {}
template <typename U>
  requires(rs_std::ResultForwardConstructible<
           rs_std::Result<::rs::std::io::PipeReader, ::rs::std::io::Error>,
           ::rs::std::io::PipeReader, U>)
inline constexpr rs_std::Result<::rs::std::io::PipeReader,
                                ::rs::std::io::Error>&
rs_std::Result<::rs::std::io::PipeReader, ::rs::std::io::Error>::operator=(
    U&& ok) noexcept {
  base_type::operator=(::std::forward<U>(ok));
  return *this;
}
template <typename F>
  requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
inline constexpr rs_std::Result<
    ::rs::std::io::PipeReader,
    ::rs::std::io::Error>::Result(rs_std::unexpected<F>&& err) noexcept
    : base_type(::std::move(err)) {}
template <typename F>
  requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
inline constexpr rs_std::Result<::rs::std::io::PipeReader,
                                ::rs::std::io::Error>&
rs_std::Result<::rs::std::io::PipeReader, ::rs::std::io::Error>::operator=(
    rs_std::unexpected<F>&& err) noexcept {
  base_type::operator=(::std::move(err));
  return *this;
}
template <typename... Args>
inline constexpr rs_std::Result<
    ::rs::std::io::PipeReader,
    ::rs::std::io::Error>::Result(::std::in_place_t ip, Args&&... args) noexcept
    : base_type(ip, ::std::forward<Args>(args)...) {}
template <typename... Args>
inline constexpr rs_std::Result<
    ::rs::std::io::PipeReader,
    ::rs::std::io::Error>::Result(rs_std::unexpect_t u, Args&&... args) noexcept
    : base_type(u, ::std::forward<Args>(args)...) {}

#endif

#ifndef _CRUBIT_BINDINGS_FOR_IMPL_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020PipeWriter_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR_IMPL_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020PipeWriter_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
inline rs_std::Result<::rs::std::io::PipeWriter, ::rs::std::io::Error>::Result(
    ::crubit::UnsafeRelocateTag, Result&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}
inline rs_std::Result<::rs::std::io::PipeWriter,
                      ::rs::std::io::Error>::~Result() noexcept {
  this->Reset();
}
inline constexpr ::std::uint32_t rs_std::Result<
    ::rs::std::io::PipeWriter, ::rs::std::io::Error>::tag() const& noexcept {
  std::array<unsigned char, sizeof(::std::uint32_t)> __bytes = {};
  for (std::size_t i = 0; i < sizeof(::std::uint32_t); ++i) {
    __bytes[i] = __storage[0 + i];
  }
  return std::bit_cast<::std::uint32_t>(__bytes);
}
inline constexpr void
rs_std::Result<::rs::std::io::PipeWriter, ::rs::std::io::Error>::set_tag(
    ::std::uint32_t tag) noexcept {
  auto __bytes =
      std::bit_cast<std::array<unsigned char, sizeof(::std::uint32_t)>>(tag);
  for (std::size_t i = 0; i < sizeof(::std::uint32_t); ++i) {
    __storage[0 + i] = __bytes[i];
  }
}

template <typename U>
  requires(rs_std::ResultForwardConstructible<
           rs_std::Result<::rs::std::io::PipeWriter, ::rs::std::io::Error>,
           ::rs::std::io::PipeWriter, U>)
inline constexpr rs_std::Result<::rs::std::io::PipeWriter,
                                ::rs::std::io::Error>::Result(U&& ok) noexcept
    : base_type(::std::forward<U>(ok)) {}
template <typename U>
  requires(rs_std::ResultForwardConstructible<
           rs_std::Result<::rs::std::io::PipeWriter, ::rs::std::io::Error>,
           ::rs::std::io::PipeWriter, U>)
inline constexpr rs_std::Result<::rs::std::io::PipeWriter,
                                ::rs::std::io::Error>&
rs_std::Result<::rs::std::io::PipeWriter, ::rs::std::io::Error>::operator=(
    U&& ok) noexcept {
  base_type::operator=(::std::forward<U>(ok));
  return *this;
}
template <typename F>
  requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
inline constexpr rs_std::Result<
    ::rs::std::io::PipeWriter,
    ::rs::std::io::Error>::Result(rs_std::unexpected<F>&& err) noexcept
    : base_type(::std::move(err)) {}
template <typename F>
  requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
inline constexpr rs_std::Result<::rs::std::io::PipeWriter,
                                ::rs::std::io::Error>&
rs_std::Result<::rs::std::io::PipeWriter, ::rs::std::io::Error>::operator=(
    rs_std::unexpected<F>&& err) noexcept {
  base_type::operator=(::std::move(err));
  return *this;
}
template <typename... Args>
inline constexpr rs_std::Result<
    ::rs::std::io::PipeWriter,
    ::rs::std::io::Error>::Result(::std::in_place_t ip, Args&&... args) noexcept
    : base_type(ip, ::std::forward<Args>(args)...) {}
template <typename... Args>
inline constexpr rs_std::Result<
    ::rs::std::io::PipeWriter,
    ::rs::std::io::Error>::Result(rs_std::unexpect_t u, Args&&... args) noexcept
    : base_type(u, ::std::forward<Args>(args)...) {}

#endif

#ifndef _CRUBIT_BINDINGS_FOR_IMPL_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020net_x00000020_x0000003a_x0000003a_x00000020TcpListener_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR_IMPL_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020net_x00000020_x0000003a_x0000003a_x00000020TcpListener_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
inline rs_std::Result<::rs::std::net::TcpListener,
                      ::rs::std::io::Error>::Result(::crubit::UnsafeRelocateTag,
                                                    Result&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}
inline rs_std::Result<::rs::std::net::TcpListener,
                      ::rs::std::io::Error>::~Result() noexcept {
  this->Reset();
}
inline constexpr ::std::uint32_t rs_std::Result<
    ::rs::std::net::TcpListener, ::rs::std::io::Error>::tag() const& noexcept {
  std::array<unsigned char, sizeof(::std::uint32_t)> __bytes = {};
  for (std::size_t i = 0; i < sizeof(::std::uint32_t); ++i) {
    __bytes[i] = __storage[0 + i];
  }
  return std::bit_cast<::std::uint32_t>(__bytes);
}
inline constexpr void
rs_std::Result<::rs::std::net::TcpListener, ::rs::std::io::Error>::set_tag(
    ::std::uint32_t tag) noexcept {
  auto __bytes =
      std::bit_cast<std::array<unsigned char, sizeof(::std::uint32_t)>>(tag);
  for (std::size_t i = 0; i < sizeof(::std::uint32_t); ++i) {
    __storage[0 + i] = __bytes[i];
  }
}

template <typename U>
  requires(rs_std::ResultForwardConstructible<
           rs_std::Result<::rs::std::net::TcpListener, ::rs::std::io::Error>,
           ::rs::std::net::TcpListener, U>)
inline constexpr rs_std::Result<::rs::std::net::TcpListener,
                                ::rs::std::io::Error>::Result(U&& ok) noexcept
    : base_type(::std::forward<U>(ok)) {}
template <typename U>
  requires(rs_std::ResultForwardConstructible<
           rs_std::Result<::rs::std::net::TcpListener, ::rs::std::io::Error>,
           ::rs::std::net::TcpListener, U>)
inline constexpr rs_std::Result<::rs::std::net::TcpListener,
                                ::rs::std::io::Error>&
rs_std::Result<::rs::std::net::TcpListener, ::rs::std::io::Error>::operator=(
    U&& ok) noexcept {
  base_type::operator=(::std::forward<U>(ok));
  return *this;
}
template <typename F>
  requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
inline constexpr rs_std::Result<
    ::rs::std::net::TcpListener,
    ::rs::std::io::Error>::Result(rs_std::unexpected<F>&& err) noexcept
    : base_type(::std::move(err)) {}
template <typename F>
  requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
inline constexpr rs_std::Result<::rs::std::net::TcpListener,
                                ::rs::std::io::Error>&
rs_std::Result<::rs::std::net::TcpListener, ::rs::std::io::Error>::operator=(
    rs_std::unexpected<F>&& err) noexcept {
  base_type::operator=(::std::move(err));
  return *this;
}
template <typename... Args>
inline constexpr rs_std::Result<
    ::rs::std::net::TcpListener,
    ::rs::std::io::Error>::Result(::std::in_place_t ip, Args&&... args) noexcept
    : base_type(ip, ::std::forward<Args>(args)...) {}
template <typename... Args>
inline constexpr rs_std::Result<
    ::rs::std::net::TcpListener,
    ::rs::std::io::Error>::Result(rs_std::unexpect_t u, Args&&... args) noexcept
    : base_type(u, ::std::forward<Args>(args)...) {}

#endif

#ifndef _CRUBIT_BINDINGS_FOR_IMPL_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020net_x00000020_x0000003a_x0000003a_x00000020TcpStream_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR_IMPL_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020net_x00000020_x0000003a_x0000003a_x00000020TcpStream_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
inline rs_std::Result<::rs::std::net::TcpStream, ::rs::std::io::Error>::Result(
    ::crubit::UnsafeRelocateTag, Result&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}
inline rs_std::Result<::rs::std::net::TcpStream,
                      ::rs::std::io::Error>::~Result() noexcept {
  this->Reset();
}
inline constexpr ::std::uint32_t rs_std::Result<
    ::rs::std::net::TcpStream, ::rs::std::io::Error>::tag() const& noexcept {
  std::array<unsigned char, sizeof(::std::uint32_t)> __bytes = {};
  for (std::size_t i = 0; i < sizeof(::std::uint32_t); ++i) {
    __bytes[i] = __storage[0 + i];
  }
  return std::bit_cast<::std::uint32_t>(__bytes);
}
inline constexpr void
rs_std::Result<::rs::std::net::TcpStream, ::rs::std::io::Error>::set_tag(
    ::std::uint32_t tag) noexcept {
  auto __bytes =
      std::bit_cast<std::array<unsigned char, sizeof(::std::uint32_t)>>(tag);
  for (std::size_t i = 0; i < sizeof(::std::uint32_t); ++i) {
    __storage[0 + i] = __bytes[i];
  }
}

template <typename U>
  requires(rs_std::ResultForwardConstructible<
           rs_std::Result<::rs::std::net::TcpStream, ::rs::std::io::Error>,
           ::rs::std::net::TcpStream, U>)
inline constexpr rs_std::Result<::rs::std::net::TcpStream,
                                ::rs::std::io::Error>::Result(U&& ok) noexcept
    : base_type(::std::forward<U>(ok)) {}
template <typename U>
  requires(rs_std::ResultForwardConstructible<
           rs_std::Result<::rs::std::net::TcpStream, ::rs::std::io::Error>,
           ::rs::std::net::TcpStream, U>)
inline constexpr rs_std::Result<::rs::std::net::TcpStream,
                                ::rs::std::io::Error>&
rs_std::Result<::rs::std::net::TcpStream, ::rs::std::io::Error>::operator=(
    U&& ok) noexcept {
  base_type::operator=(::std::forward<U>(ok));
  return *this;
}
template <typename F>
  requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
inline constexpr rs_std::Result<
    ::rs::std::net::TcpStream,
    ::rs::std::io::Error>::Result(rs_std::unexpected<F>&& err) noexcept
    : base_type(::std::move(err)) {}
template <typename F>
  requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
inline constexpr rs_std::Result<::rs::std::net::TcpStream,
                                ::rs::std::io::Error>&
rs_std::Result<::rs::std::net::TcpStream, ::rs::std::io::Error>::operator=(
    rs_std::unexpected<F>&& err) noexcept {
  base_type::operator=(::std::move(err));
  return *this;
}
template <typename... Args>
inline constexpr rs_std::Result<
    ::rs::std::net::TcpStream,
    ::rs::std::io::Error>::Result(::std::in_place_t ip, Args&&... args) noexcept
    : base_type(ip, ::std::forward<Args>(args)...) {}
template <typename... Args>
inline constexpr rs_std::Result<
    ::rs::std::net::TcpStream,
    ::rs::std::io::Error>::Result(rs_std::unexpect_t u, Args&&... args) noexcept
    : base_type(u, ::std::forward<Args>(args)...) {}

#endif

#ifndef _CRUBIT_BINDINGS_FOR_IMPL_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020net_x00000020_x0000003a_x0000003a_x00000020UdpSocket_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR_IMPL_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020net_x00000020_x0000003a_x0000003a_x00000020UdpSocket_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
inline rs_std::Result<::rs::std::net::UdpSocket, ::rs::std::io::Error>::Result(
    ::crubit::UnsafeRelocateTag, Result&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}
inline rs_std::Result<::rs::std::net::UdpSocket,
                      ::rs::std::io::Error>::~Result() noexcept {
  this->Reset();
}
inline constexpr ::std::uint32_t rs_std::Result<
    ::rs::std::net::UdpSocket, ::rs::std::io::Error>::tag() const& noexcept {
  std::array<unsigned char, sizeof(::std::uint32_t)> __bytes = {};
  for (std::size_t i = 0; i < sizeof(::std::uint32_t); ++i) {
    __bytes[i] = __storage[0 + i];
  }
  return std::bit_cast<::std::uint32_t>(__bytes);
}
inline constexpr void
rs_std::Result<::rs::std::net::UdpSocket, ::rs::std::io::Error>::set_tag(
    ::std::uint32_t tag) noexcept {
  auto __bytes =
      std::bit_cast<std::array<unsigned char, sizeof(::std::uint32_t)>>(tag);
  for (std::size_t i = 0; i < sizeof(::std::uint32_t); ++i) {
    __storage[0 + i] = __bytes[i];
  }
}

template <typename U>
  requires(rs_std::ResultForwardConstructible<
           rs_std::Result<::rs::std::net::UdpSocket, ::rs::std::io::Error>,
           ::rs::std::net::UdpSocket, U>)
inline constexpr rs_std::Result<::rs::std::net::UdpSocket,
                                ::rs::std::io::Error>::Result(U&& ok) noexcept
    : base_type(::std::forward<U>(ok)) {}
template <typename U>
  requires(rs_std::ResultForwardConstructible<
           rs_std::Result<::rs::std::net::UdpSocket, ::rs::std::io::Error>,
           ::rs::std::net::UdpSocket, U>)
inline constexpr rs_std::Result<::rs::std::net::UdpSocket,
                                ::rs::std::io::Error>&
rs_std::Result<::rs::std::net::UdpSocket, ::rs::std::io::Error>::operator=(
    U&& ok) noexcept {
  base_type::operator=(::std::forward<U>(ok));
  return *this;
}
template <typename F>
  requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
inline constexpr rs_std::Result<
    ::rs::std::net::UdpSocket,
    ::rs::std::io::Error>::Result(rs_std::unexpected<F>&& err) noexcept
    : base_type(::std::move(err)) {}
template <typename F>
  requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
inline constexpr rs_std::Result<::rs::std::net::UdpSocket,
                                ::rs::std::io::Error>&
rs_std::Result<::rs::std::net::UdpSocket, ::rs::std::io::Error>::operator=(
    rs_std::unexpected<F>&& err) noexcept {
  base_type::operator=(::std::move(err));
  return *this;
}
template <typename... Args>
inline constexpr rs_std::Result<
    ::rs::std::net::UdpSocket,
    ::rs::std::io::Error>::Result(::std::in_place_t ip, Args&&... args) noexcept
    : base_type(ip, ::std::forward<Args>(args)...) {}
template <typename... Args>
inline constexpr rs_std::Result<
    ::rs::std::net::UdpSocket,
    ::rs::std::io::Error>::Result(rs_std::unexpect_t u, Args&&... args) noexcept
    : base_type(u, ::std::forward<Args>(args)...) {}

#endif

#ifndef _CRUBIT_BINDINGS_FOR_IMPL_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020path_x00000020_x0000003a_x0000003a_x00000020PathBuf_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR_IMPL_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020path_x00000020_x0000003a_x0000003a_x00000020PathBuf_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
inline rs_std::Result<::rs::std::path::PathBuf, ::rs::std::io::Error>::Result(
    ::crubit::UnsafeRelocateTag, Result&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}
inline rs_std::Result<::rs::std::path::PathBuf,
                      ::rs::std::io::Error>::~Result() noexcept {
  this->Reset();
}
inline constexpr ::std::uint64_t rs_std::Result<
    ::rs::std::path::PathBuf, ::rs::std::io::Error>::tag() const& noexcept {
  std::array<unsigned char, sizeof(::std::uint64_t)> __bytes = {};
  for (std::size_t i = 0; i < sizeof(::std::uint64_t); ++i) {
    __bytes[i] = __storage[0 + i];
  }
  return std::bit_cast<::std::uint64_t>(__bytes);
}
inline constexpr void
rs_std::Result<::rs::std::path::PathBuf, ::rs::std::io::Error>::set_tag(
    ::std::uint64_t tag) noexcept {
  auto __bytes =
      std::bit_cast<std::array<unsigned char, sizeof(::std::uint64_t)>>(tag);
  for (std::size_t i = 0; i < sizeof(::std::uint64_t); ++i) {
    __storage[0 + i] = __bytes[i];
  }
}

template <typename U>
  requires(rs_std::ResultForwardConstructible<
           rs_std::Result<::rs::std::path::PathBuf, ::rs::std::io::Error>,
           ::rs::std::path::PathBuf, U>)
inline constexpr rs_std::Result<::rs::std::path::PathBuf,
                                ::rs::std::io::Error>::Result(U&& ok) noexcept
    : base_type(::std::forward<U>(ok)) {}
template <typename U>
  requires(rs_std::ResultForwardConstructible<
           rs_std::Result<::rs::std::path::PathBuf, ::rs::std::io::Error>,
           ::rs::std::path::PathBuf, U>)
inline constexpr rs_std::Result<::rs::std::path::PathBuf, ::rs::std::io::Error>&
rs_std::Result<::rs::std::path::PathBuf, ::rs::std::io::Error>::operator=(
    U&& ok) noexcept {
  base_type::operator=(::std::forward<U>(ok));
  return *this;
}
template <typename F>
  requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
inline constexpr rs_std::Result<
    ::rs::std::path::PathBuf,
    ::rs::std::io::Error>::Result(rs_std::unexpected<F>&& err) noexcept
    : base_type(::std::move(err)) {}
template <typename F>
  requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
inline constexpr rs_std::Result<::rs::std::path::PathBuf, ::rs::std::io::Error>&
rs_std::Result<::rs::std::path::PathBuf, ::rs::std::io::Error>::operator=(
    rs_std::unexpected<F>&& err) noexcept {
  base_type::operator=(::std::move(err));
  return *this;
}
template <typename... Args>
inline constexpr rs_std::Result<
    ::rs::std::path::PathBuf,
    ::rs::std::io::Error>::Result(::std::in_place_t ip, Args&&... args) noexcept
    : base_type(ip, ::std::forward<Args>(args)...) {}
template <typename... Args>
inline constexpr rs_std::Result<
    ::rs::std::path::PathBuf,
    ::rs::std::io::Error>::Result(rs_std::unexpect_t u, Args&&... args) noexcept
    : base_type(u, ::std::forward<Args>(args)...) {}

#endif

#ifndef _CRUBIT_BINDINGS_FOR_IMPL_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020process_x00000020_x0000003a_x0000003a_x00000020Child_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR_IMPL_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020process_x00000020_x0000003a_x0000003a_x00000020Child_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
inline rs_std::Result<::rs::std::process::Child, ::rs::std::io::Error>::Result(
    ::crubit::UnsafeRelocateTag, Result&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}
inline rs_std::Result<::rs::std::process::Child,
                      ::rs::std::io::Error>::~Result() noexcept {
  this->Reset();
}
inline constexpr ::std::uint32_t rs_std::Result<
    ::rs::std::process::Child, ::rs::std::io::Error>::tag() const& noexcept {
  std::array<unsigned char, sizeof(::std::uint32_t)> __bytes = {};
  for (std::size_t i = 0; i < sizeof(::std::uint32_t); ++i) {
    __bytes[i] = __storage[0 + i];
  }
  return std::bit_cast<::std::uint32_t>(__bytes);
}
inline constexpr void
rs_std::Result<::rs::std::process::Child, ::rs::std::io::Error>::set_tag(
    ::std::uint32_t tag) noexcept {
  auto __bytes =
      std::bit_cast<std::array<unsigned char, sizeof(::std::uint32_t)>>(tag);
  for (std::size_t i = 0; i < sizeof(::std::uint32_t); ++i) {
    __storage[0 + i] = __bytes[i];
  }
}

template <typename U>
  requires(rs_std::ResultForwardConstructible<
           rs_std::Result<::rs::std::process::Child, ::rs::std::io::Error>,
           ::rs::std::process::Child, U>)
inline constexpr rs_std::Result<::rs::std::process::Child,
                                ::rs::std::io::Error>::Result(U&& ok) noexcept
    : base_type(::std::forward<U>(ok)) {}
template <typename U>
  requires(rs_std::ResultForwardConstructible<
           rs_std::Result<::rs::std::process::Child, ::rs::std::io::Error>,
           ::rs::std::process::Child, U>)
inline constexpr rs_std::Result<::rs::std::process::Child,
                                ::rs::std::io::Error>&
rs_std::Result<::rs::std::process::Child, ::rs::std::io::Error>::operator=(
    U&& ok) noexcept {
  base_type::operator=(::std::forward<U>(ok));
  return *this;
}
template <typename F>
  requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
inline constexpr rs_std::Result<
    ::rs::std::process::Child,
    ::rs::std::io::Error>::Result(rs_std::unexpected<F>&& err) noexcept
    : base_type(::std::move(err)) {}
template <typename F>
  requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
inline constexpr rs_std::Result<::rs::std::process::Child,
                                ::rs::std::io::Error>&
rs_std::Result<::rs::std::process::Child, ::rs::std::io::Error>::operator=(
    rs_std::unexpected<F>&& err) noexcept {
  base_type::operator=(::std::move(err));
  return *this;
}
template <typename... Args>
inline constexpr rs_std::Result<
    ::rs::std::process::Child,
    ::rs::std::io::Error>::Result(::std::in_place_t ip, Args&&... args) noexcept
    : base_type(ip, ::std::forward<Args>(args)...) {}
template <typename... Args>
inline constexpr rs_std::Result<
    ::rs::std::process::Child,
    ::rs::std::io::Error>::Result(rs_std::unexpect_t u, Args&&... args) noexcept
    : base_type(u, ::std::forward<Args>(args)...) {}

#endif

#ifndef _CRUBIT_BINDINGS_FOR_IMPL_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020process_x00000020_x0000003a_x0000003a_x00000020ExitStatus_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR_IMPL_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020process_x00000020_x0000003a_x0000003a_x00000020ExitStatus_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
inline rs_std::Result<::rs::std::process::ExitStatus,
                      ::rs::std::io::Error>::Result(::crubit::UnsafeRelocateTag,
                                                    Result&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}
inline rs_std::Result<::rs::std::process::ExitStatus,
                      ::rs::std::io::Error>::~Result() noexcept {
  this->Reset();
}
inline constexpr ::std::uint32_t
rs_std::Result<::rs::std::process::ExitStatus, ::rs::std::io::Error>::tag()
    const& noexcept {
  std::array<unsigned char, sizeof(::std::uint32_t)> __bytes = {};
  for (std::size_t i = 0; i < sizeof(::std::uint32_t); ++i) {
    __bytes[i] = __storage[0 + i];
  }
  return std::bit_cast<::std::uint32_t>(__bytes);
}
inline constexpr void
rs_std::Result<::rs::std::process::ExitStatus, ::rs::std::io::Error>::set_tag(
    ::std::uint32_t tag) noexcept {
  auto __bytes =
      std::bit_cast<std::array<unsigned char, sizeof(::std::uint32_t)>>(tag);
  for (std::size_t i = 0; i < sizeof(::std::uint32_t); ++i) {
    __storage[0 + i] = __bytes[i];
  }
}

template <typename U>
  requires(rs_std::ResultForwardConstructible<
           rs_std::Result<::rs::std::process::ExitStatus, ::rs::std::io::Error>,
           ::rs::std::process::ExitStatus, U>)
inline constexpr rs_std::Result<::rs::std::process::ExitStatus,
                                ::rs::std::io::Error>::Result(U&& ok) noexcept
    : base_type(::std::forward<U>(ok)) {}
template <typename U>
  requires(rs_std::ResultForwardConstructible<
           rs_std::Result<::rs::std::process::ExitStatus, ::rs::std::io::Error>,
           ::rs::std::process::ExitStatus, U>)
inline constexpr rs_std::Result<::rs::std::process::ExitStatus,
                                ::rs::std::io::Error>&
rs_std::Result<::rs::std::process::ExitStatus, ::rs::std::io::Error>::operator=(
    U&& ok) noexcept {
  base_type::operator=(::std::forward<U>(ok));
  return *this;
}
template <typename F>
  requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
inline constexpr rs_std::Result<
    ::rs::std::process::ExitStatus,
    ::rs::std::io::Error>::Result(rs_std::unexpected<F>&& err) noexcept
    : base_type(::std::move(err)) {}
template <typename F>
  requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
inline constexpr rs_std::Result<::rs::std::process::ExitStatus,
                                ::rs::std::io::Error>&
rs_std::Result<::rs::std::process::ExitStatus, ::rs::std::io::Error>::operator=(
    rs_std::unexpected<F>&& err) noexcept {
  base_type::operator=(::std::move(err));
  return *this;
}
template <typename... Args>
inline constexpr rs_std::Result<
    ::rs::std::process::ExitStatus,
    ::rs::std::io::Error>::Result(::std::in_place_t ip, Args&&... args) noexcept
    : base_type(ip, ::std::forward<Args>(args)...) {}
template <typename... Args>
inline constexpr rs_std::Result<
    ::rs::std::process::ExitStatus,
    ::rs::std::io::Error>::Result(rs_std::unexpect_t u, Args&&... args) noexcept
    : base_type(u, ::std::forward<Args>(args)...) {}

#endif

#ifndef _CRUBIT_BINDINGS_FOR_IMPL_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020process_x00000020_x0000003a_x0000003a_x00000020Output_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR_IMPL_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020process_x00000020_x0000003a_x0000003a_x00000020Output_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
inline rs_std::Result<::rs::std::process::Output, ::rs::std::io::Error>::Result(
    ::crubit::UnsafeRelocateTag, Result&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}
inline rs_std::Result<::rs::std::process::Output,
                      ::rs::std::io::Error>::~Result() noexcept {
  this->Reset();
}
inline constexpr ::std::uint64_t rs_std::Result<
    ::rs::std::process::Output, ::rs::std::io::Error>::tag() const& noexcept {
  std::array<unsigned char, sizeof(::std::uint64_t)> __bytes = {};
  for (std::size_t i = 0; i < sizeof(::std::uint64_t); ++i) {
    __bytes[i] = __storage[0 + i];
  }
  return std::bit_cast<::std::uint64_t>(__bytes);
}
inline constexpr void
rs_std::Result<::rs::std::process::Output, ::rs::std::io::Error>::set_tag(
    ::std::uint64_t tag) noexcept {
  auto __bytes =
      std::bit_cast<std::array<unsigned char, sizeof(::std::uint64_t)>>(tag);
  for (std::size_t i = 0; i < sizeof(::std::uint64_t); ++i) {
    __storage[0 + i] = __bytes[i];
  }
}

template <typename U>
  requires(rs_std::ResultForwardConstructible<
           rs_std::Result<::rs::std::process::Output, ::rs::std::io::Error>,
           ::rs::std::process::Output, U>)
inline constexpr rs_std::Result<::rs::std::process::Output,
                                ::rs::std::io::Error>::Result(U&& ok) noexcept
    : base_type(::std::forward<U>(ok)) {}
template <typename U>
  requires(rs_std::ResultForwardConstructible<
           rs_std::Result<::rs::std::process::Output, ::rs::std::io::Error>,
           ::rs::std::process::Output, U>)
inline constexpr rs_std::Result<::rs::std::process::Output,
                                ::rs::std::io::Error>&
rs_std::Result<::rs::std::process::Output, ::rs::std::io::Error>::operator=(
    U&& ok) noexcept {
  base_type::operator=(::std::forward<U>(ok));
  return *this;
}
template <typename F>
  requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
inline constexpr rs_std::Result<
    ::rs::std::process::Output,
    ::rs::std::io::Error>::Result(rs_std::unexpected<F>&& err) noexcept
    : base_type(::std::move(err)) {}
template <typename F>
  requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
inline constexpr rs_std::Result<::rs::std::process::Output,
                                ::rs::std::io::Error>&
rs_std::Result<::rs::std::process::Output, ::rs::std::io::Error>::operator=(
    rs_std::unexpected<F>&& err) noexcept {
  base_type::operator=(::std::move(err));
  return *this;
}
template <typename... Args>
inline constexpr rs_std::Result<
    ::rs::std::process::Output,
    ::rs::std::io::Error>::Result(::std::in_place_t ip, Args&&... args) noexcept
    : base_type(ip, ::std::forward<Args>(args)...) {}
template <typename... Args>
inline constexpr rs_std::Result<
    ::rs::std::process::Output,
    ::rs::std::io::Error>::Result(rs_std::unexpect_t u, Args&&... args) noexcept
    : base_type(u, ::std::forward<Args>(args)...) {}

#endif

#ifndef _CRUBIT_BINDINGS_FOR_IMPL_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020time_x00000020_x0000003a_x0000003a_x00000020SystemTime_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR_IMPL_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020time_x00000020_x0000003a_x0000003a_x00000020SystemTime_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
inline rs_std::Result<::rs::std::time::SystemTime,
                      ::rs::std::io::Error>::Result(::crubit::UnsafeRelocateTag,
                                                    Result&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}
inline rs_std::Result<::rs::std::time::SystemTime,
                      ::rs::std::io::Error>::~Result() noexcept {
  this->Reset();
}
inline constexpr ::std::uint32_t rs_std::Result<
    ::rs::std::time::SystemTime, ::rs::std::io::Error>::tag() const& noexcept {
  std::array<unsigned char, sizeof(::std::uint32_t)> __bytes = {};
  for (std::size_t i = 0; i < sizeof(::std::uint32_t); ++i) {
    __bytes[i] = __storage[8 + i];
  }
  return std::bit_cast<::std::uint32_t>(__bytes);
}
inline constexpr void
rs_std::Result<::rs::std::time::SystemTime, ::rs::std::io::Error>::set_tag(
    ::std::uint32_t tag) noexcept {
  auto __bytes =
      std::bit_cast<std::array<unsigned char, sizeof(::std::uint32_t)>>(tag);
  for (std::size_t i = 0; i < sizeof(::std::uint32_t); ++i) {
    __storage[8 + i] = __bytes[i];
  }
}

template <typename U>
  requires(rs_std::ResultForwardConstructible<
           rs_std::Result<::rs::std::time::SystemTime, ::rs::std::io::Error>,
           ::rs::std::time::SystemTime, U>)
inline constexpr rs_std::Result<::rs::std::time::SystemTime,
                                ::rs::std::io::Error>::Result(U&& ok) noexcept
    : base_type(::std::forward<U>(ok)) {}
template <typename U>
  requires(rs_std::ResultForwardConstructible<
           rs_std::Result<::rs::std::time::SystemTime, ::rs::std::io::Error>,
           ::rs::std::time::SystemTime, U>)
inline constexpr rs_std::Result<::rs::std::time::SystemTime,
                                ::rs::std::io::Error>&
rs_std::Result<::rs::std::time::SystemTime, ::rs::std::io::Error>::operator=(
    U&& ok) noexcept {
  base_type::operator=(::std::forward<U>(ok));
  return *this;
}
template <typename F>
  requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
inline constexpr rs_std::Result<
    ::rs::std::time::SystemTime,
    ::rs::std::io::Error>::Result(rs_std::unexpected<F>&& err) noexcept
    : base_type(::std::move(err)) {}
template <typename F>
  requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
inline constexpr rs_std::Result<::rs::std::time::SystemTime,
                                ::rs::std::io::Error>&
rs_std::Result<::rs::std::time::SystemTime, ::rs::std::io::Error>::operator=(
    rs_std::unexpected<F>&& err) noexcept {
  base_type::operator=(::std::move(err));
  return *this;
}
template <typename... Args>
inline constexpr rs_std::Result<
    ::rs::std::time::SystemTime,
    ::rs::std::io::Error>::Result(::std::in_place_t ip, Args&&... args) noexcept
    : base_type(ip, ::std::forward<Args>(args)...) {}
template <typename... Args>
inline constexpr rs_std::Result<
    ::rs::std::time::SystemTime,
    ::rs::std::io::Error>::Result(rs_std::unexpect_t u, Args&&... args) noexcept
    : base_type(u, ::std::forward<Args>(args)...) {}

#endif

#ifndef _CRUBIT_BINDINGS_FOR_IMPL_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020uint32_ut_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR_IMPL_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020uint32_ut_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
inline rs_std::Result<::std::uint32_t, ::rs::std::io::Error>::Result(
    ::crubit::UnsafeRelocateTag, Result&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}
inline rs_std::Result<::std::uint32_t,
                      ::rs::std::io::Error>::~Result() noexcept {
  this->Reset();
}
inline constexpr ::std::uint32_t
rs_std::Result<::std::uint32_t, ::rs::std::io::Error>::tag() const& noexcept {
  std::array<unsigned char, sizeof(::std::uint32_t)> __bytes = {};
  for (std::size_t i = 0; i < sizeof(::std::uint32_t); ++i) {
    __bytes[i] = __storage[0 + i];
  }
  return std::bit_cast<::std::uint32_t>(__bytes);
}
inline constexpr void
rs_std::Result<::std::uint32_t, ::rs::std::io::Error>::set_tag(
    ::std::uint32_t tag) noexcept {
  auto __bytes =
      std::bit_cast<std::array<unsigned char, sizeof(::std::uint32_t)>>(tag);
  for (std::size_t i = 0; i < sizeof(::std::uint32_t); ++i) {
    __storage[0 + i] = __bytes[i];
  }
}

template <typename U>
  requires(rs_std::ResultForwardConstructible<
           rs_std::Result<::std::uint32_t, ::rs::std::io::Error>,
           ::std::uint32_t, U>)
inline constexpr rs_std::Result<::std::uint32_t, ::rs::std::io::Error>::Result(
    U&& ok) noexcept
    : base_type(::std::forward<U>(ok)) {}
template <typename U>
  requires(rs_std::ResultForwardConstructible<
           rs_std::Result<::std::uint32_t, ::rs::std::io::Error>,
           ::std::uint32_t, U>)
inline constexpr rs_std::Result<::std::uint32_t, ::rs::std::io::Error>&
rs_std::Result<::std::uint32_t, ::rs::std::io::Error>::operator=(
    U&& ok) noexcept {
  base_type::operator=(::std::forward<U>(ok));
  return *this;
}
template <typename F>
  requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
inline constexpr rs_std::Result<::std::uint32_t, ::rs::std::io::Error>::Result(
    rs_std::unexpected<F>&& err) noexcept
    : base_type(::std::move(err)) {}
template <typename F>
  requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
inline constexpr rs_std::Result<::std::uint32_t, ::rs::std::io::Error>&
rs_std::Result<::std::uint32_t, ::rs::std::io::Error>::operator=(
    rs_std::unexpected<F>&& err) noexcept {
  base_type::operator=(::std::move(err));
  return *this;
}
template <typename... Args>
inline constexpr rs_std::Result<::std::uint32_t, ::rs::std::io::Error>::Result(
    ::std::in_place_t ip, Args&&... args) noexcept
    : base_type(ip, ::std::forward<Args>(args)...) {}
template <typename... Args>
inline constexpr rs_std::Result<::std::uint32_t, ::rs::std::io::Error>::Result(
    rs_std::unexpect_t u, Args&&... args) noexcept
    : base_type(u, ::std::forward<Args>(args)...) {}

#endif

#ifndef _CRUBIT_BINDINGS_FOR_IMPL__x0000003a_x0000003a_x00000020rs_ustd_x00000020_x0000003a_x0000003a_x00000020Tuple_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020alloc_x00000020_x0000003a_x0000003a_x00000020string_x00000020_x0000003a_x0000003a_x00000020String_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020alloc_x00000020_x0000003a_x0000003a_x00000020string_x00000020_x0000003a_x0000003a_x00000020String_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR_IMPL__x0000003a_x0000003a_x00000020rs_ustd_x00000020_x0000003a_x0000003a_x00000020Tuple_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020alloc_x00000020_x0000003a_x0000003a_x00000020string_x00000020_x0000003a_x0000003a_x00000020String_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020alloc_x00000020_x0000003a_x0000003a_x00000020string_x00000020_x0000003a_x0000003a_x00000020String_x00000020_x0000003e
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYTNtNtCsaddbpR6HRqH_u5alloc6string6StringB3_uENtNtCs9kG8YiNG2f0_u4core7default7Default7defaultCsb7ytMsthdgm_u3std(
    rs_std::Tuple<::rs::alloc::string::String, ::rs::alloc::string::String>*
        __ret_ptr);
}
inline ::rs_std::Tuple<::rs::alloc::string::String,
                       ::rs::alloc::string::String>::Tuple() {
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYTNtNtCsaddbpR6HRqH_u5alloc6string6StringB3_uENtNtCs9kG8YiNG2f0_u4core7default7Default7defaultCsb7ytMsthdgm_u3std(
          this);
}
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYTNtNtCsaddbpR6HRqH_u5alloc6string6StringB3_uENtNtCs9kG8YiNG2f0_u4core5clone5Clone5cloneCsb7ytMsthdgm_u3std(
    rs_std::Tuple<::rs::alloc::string::String,
                  ::rs::alloc::string::String> const&,
    rs_std::Tuple<::rs::alloc::string::String, ::rs::alloc::string::String>*
        __ret_ptr);
}
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYTNtNtCsaddbpR6HRqH_u5alloc6string6StringB3_uENtNtCs9kG8YiNG2f0_u4core5clone5Clone10clone_ufromCsb7ytMsthdgm_u3std(
    rs_std::Tuple<::rs::alloc::string::String, ::rs::alloc::string::String>&,
    rs_std::Tuple<::rs::alloc::string::String,
                  ::rs::alloc::string::String> const&);
}
inline ::rs_std::Tuple<::rs::alloc::string::String,
                       ::rs::alloc::string::String>::Tuple(const Tuple& other) {
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYTNtNtCsaddbpR6HRqH_u5alloc6string6StringB3_uENtNtCs9kG8YiNG2f0_u4core5clone5Clone5cloneCsb7ytMsthdgm_u3std(
          other, this);
}
inline ::rs_std::Tuple<::rs::alloc::string::String,
                       ::rs::alloc::string::String>& ::
rs_std::Tuple<::rs::alloc::string::String,
              ::rs::alloc::string::String>::operator=(const Tuple& other) {
  if (this != &other) {
    __crubit_internal::
        __crubit_thunk_818b180788380d74__uRNvYTNtNtCsaddbpR6HRqH_u5alloc6string6StringB3_uENtNtCs9kG8YiNG2f0_u4core5clone5Clone10clone_ufromCsb7ytMsthdgm_u3std(
            *this, other);
  }
  return *this;
}
inline ::rs_std::Tuple<::rs::alloc::string::String,
                       ::rs::alloc::string::String>::Tuple(Tuple&& other)
    : Tuple() {
  *this = ::std::move(other);
}
inline ::rs_std::Tuple<::rs::alloc::string::String,
                       ::rs::alloc::string::String>& ::
rs_std::Tuple<::rs::alloc::string::String,
              ::rs::alloc::string::String>::operator=(Tuple&& other) {
  crubit::MemSwap(*this, other);
  return *this;
}
inline ::rs_std::
    Tuple<::rs::alloc::string::String, ::rs::alloc::string::String>::Tuple(
        ::crubit::UnsafeRelocateTag, Tuple&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}
inline rs_std::Tuple<::rs::alloc::string::String, ::rs::alloc::string::String>::
    Tuple(std::tuple<::rs::alloc::string::String, ::rs::alloc::string::String>&&
              tuple) noexcept {
  std::construct_at(
      reinterpret_cast<::rs::alloc::string::String*>(storage_ + 0),
      std::move(std::get<0>(tuple)));
  std::construct_at(
      reinterpret_cast<::rs::alloc::string::String*>(storage_ + 24),
      std::move(std::get<1>(tuple)));
}
inline rs_std::Tuple<::rs::alloc::string::String, ::rs::alloc::string::String>::
operator std::tuple<::rs::alloc::string::String,
                    ::rs::alloc::string::String>() && noexcept {
  return std::tuple<::rs::alloc::string::String, ::rs::alloc::string::String>(
      std::move(*reinterpret_cast<::rs::alloc::string::String*>(storage_ + 0)),
      std::move(
          *reinterpret_cast<::rs::alloc::string::String*>(storage_ + 24)));
}
inline rs_std::Tuple<::rs::alloc::string::String,
                     ::rs::alloc::string::String>::~Tuple() {
  std::destroy_at(reinterpret_cast<::rs::alloc::string::String*>(storage_ + 0));
  std::destroy_at(
      reinterpret_cast<::rs::alloc::string::String*>(storage_ + 24));
}

#endif

#ifndef _CRUBIT_BINDINGS_FOR_IMPL__x0000003a_x0000003a_x00000020rs_ustd_x00000020_x0000003a_x0000003a_x00000020Tuple_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020ffi_x00000020_x0000003a_x0000003a_x00000020OsString_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020ffi_x00000020_x0000003a_x0000003a_x00000020OsString_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR_IMPL__x0000003a_x0000003a_x00000020rs_ustd_x00000020_x0000003a_x0000003a_x00000020Tuple_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020ffi_x00000020_x0000003a_x0000003a_x00000020OsString_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020ffi_x00000020_x0000003a_x0000003a_x00000020OsString_x00000020_x0000003e
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYTNtNtNtCsb7ytMsthdgm_u3std3ffi6os_ustr8OsStringB3_uENtNtCs9kG8YiNG2f0_u4core7default7Default7defaultB9_u(
    rs_std::Tuple<::rs::std::ffi::OsString, ::rs::std::ffi::OsString>*
        __ret_ptr);
}
inline ::rs_std::Tuple<::rs::std::ffi::OsString,
                       ::rs::std::ffi::OsString>::Tuple() {
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYTNtNtNtCsb7ytMsthdgm_u3std3ffi6os_ustr8OsStringB3_uENtNtCs9kG8YiNG2f0_u4core7default7Default7defaultB9_u(
          this);
}
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYTNtNtNtCsb7ytMsthdgm_u3std3ffi6os_ustr8OsStringB3_uENtNtCs9kG8YiNG2f0_u4core5clone5Clone5cloneB9_u(
    rs_std::Tuple<::rs::std::ffi::OsString, ::rs::std::ffi::OsString> const&,
    rs_std::Tuple<::rs::std::ffi::OsString, ::rs::std::ffi::OsString>*
        __ret_ptr);
}
namespace __crubit_internal {
extern "C" void
__crubit_thunk_818b180788380d74__uRNvYTNtNtNtCsb7ytMsthdgm_u3std3ffi6os_ustr8OsStringB3_uENtNtCs9kG8YiNG2f0_u4core5clone5Clone10clone_ufromB9_u(
    rs_std::Tuple<::rs::std::ffi::OsString, ::rs::std::ffi::OsString>&,
    rs_std::Tuple<::rs::std::ffi::OsString, ::rs::std::ffi::OsString> const&);
}
inline ::rs_std::Tuple<::rs::std::ffi::OsString,
                       ::rs::std::ffi::OsString>::Tuple(const Tuple& other) {
  __crubit_internal::
      __crubit_thunk_818b180788380d74__uRNvYTNtNtNtCsb7ytMsthdgm_u3std3ffi6os_ustr8OsStringB3_uENtNtCs9kG8YiNG2f0_u4core5clone5Clone5cloneB9_u(
          other, this);
}
inline ::rs_std::Tuple<::rs::std::ffi::OsString, ::rs::std::ffi::OsString>& ::
rs_std::Tuple<::rs::std::ffi::OsString, ::rs::std::ffi::OsString>::operator=(
    const Tuple& other) {
  if (this != &other) {
    __crubit_internal::
        __crubit_thunk_818b180788380d74__uRNvYTNtNtNtCsb7ytMsthdgm_u3std3ffi6os_ustr8OsStringB3_uENtNtCs9kG8YiNG2f0_u4core5clone5Clone10clone_ufromB9_u(
            *this, other);
  }
  return *this;
}
inline ::rs_std::Tuple<::rs::std::ffi::OsString,
                       ::rs::std::ffi::OsString>::Tuple(Tuple&& other)
    : Tuple() {
  *this = ::std::move(other);
}
inline ::rs_std::Tuple<::rs::std::ffi::OsString, ::rs::std::ffi::OsString>& ::
rs_std::Tuple<::rs::std::ffi::OsString, ::rs::std::ffi::OsString>::operator=(
    Tuple&& other) {
  crubit::MemSwap(*this, other);
  return *this;
}
inline ::rs_std::Tuple<::rs::std::ffi::OsString, ::rs::std::ffi::OsString>::
    Tuple(::crubit::UnsafeRelocateTag, Tuple&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}
inline rs_std::Tuple<::rs::std::ffi::OsString, ::rs::std::ffi::OsString>::Tuple(
    std::tuple<::rs::std::ffi::OsString, ::rs::std::ffi::OsString>&&
        tuple) noexcept {
  std::construct_at(reinterpret_cast<::rs::std::ffi::OsString*>(storage_ + 0),
                    std::move(std::get<0>(tuple)));
  std::construct_at(reinterpret_cast<::rs::std::ffi::OsString*>(storage_ + 24),
                    std::move(std::get<1>(tuple)));
}
inline rs_std::Tuple<::rs::std::ffi::OsString, ::rs::std::ffi::OsString>::
operator std::tuple<::rs::std::ffi::OsString,
                    ::rs::std::ffi::OsString>() && noexcept {
  return std::tuple<::rs::std::ffi::OsString, ::rs::std::ffi::OsString>(
      std::move(*reinterpret_cast<::rs::std::ffi::OsString*>(storage_ + 0)),
      std::move(*reinterpret_cast<::rs::std::ffi::OsString*>(storage_ + 24)));
}
inline rs_std::Tuple<::rs::std::ffi::OsString,
                     ::rs::std::ffi::OsString>::~Tuple() {
  std::destroy_at(reinterpret_cast<::rs::std::ffi::OsString*>(storage_ + 0));
  std::destroy_at(reinterpret_cast<::rs::std::ffi::OsString*>(storage_ + 24));
}

#endif

#ifndef _CRUBIT_BINDINGS_FOR_IMPL_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020rs_ustd_x00000020_x0000003a_x0000003a_x00000020SliceRef_x00000020_x0000003c_x00000020const_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020uint8_ut_x00000020_x0000003e_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR_IMPL_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020rs_ustd_x00000020_x0000003a_x0000003a_x00000020SliceRef_x00000020_x0000003c_x00000020const_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020uint8_ut_x00000020_x0000003e_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
inline rs_std::Result<rs_std::SliceRef<const ::std::uint8_t>,
                      ::rs::std::io::Error>::Result(::crubit::UnsafeRelocateTag,
                                                    Result&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}
inline rs_std::Result<rs_std::SliceRef<const ::std::uint8_t>,
                      ::rs::std::io::Error>::~Result() noexcept {
  this->Reset();
}
inline constexpr ::std::uint64_t
rs_std::Result<rs_std::SliceRef<const ::std::uint8_t>,
               ::rs::std::io::Error>::tag() const& noexcept {
  std::array<unsigned char, sizeof(::std::uint64_t)> __bytes = {};
  for (std::size_t i = 0; i < sizeof(::std::uint64_t); ++i) {
    __bytes[i] = __storage[0 + i];
  }
  return std::bit_cast<::std::uint64_t>(__bytes);
}
inline constexpr void
rs_std::Result<rs_std::SliceRef<const ::std::uint8_t>,
               ::rs::std::io::Error>::set_tag(::std::uint64_t tag) noexcept {
  auto __bytes =
      std::bit_cast<std::array<unsigned char, sizeof(::std::uint64_t)>>(tag);
  for (std::size_t i = 0; i < sizeof(::std::uint64_t); ++i) {
    __storage[0 + i] = __bytes[i];
  }
}

template <typename U>
  requires(rs_std::ResultForwardConstructible<
           rs_std::Result<rs_std::SliceRef<const ::std::uint8_t>,
                          ::rs::std::io::Error>,
           rs_std::SliceRef<const ::std::uint8_t>, U>)
inline constexpr rs_std::Result<rs_std::SliceRef<const ::std::uint8_t>,
                                ::rs::std::io::Error>::Result(U&& ok) noexcept
    : base_type(::std::forward<U>(ok)) {}
template <typename U>
  requires(rs_std::ResultForwardConstructible<
           rs_std::Result<rs_std::SliceRef<const ::std::uint8_t>,
                          ::rs::std::io::Error>,
           rs_std::SliceRef<const ::std::uint8_t>, U>)
inline constexpr rs_std::Result<rs_std::SliceRef<const ::std::uint8_t>,
                                ::rs::std::io::Error>&
rs_std::Result<rs_std::SliceRef<const ::std::uint8_t>,
               ::rs::std::io::Error>::operator=(U&& ok) noexcept {
  base_type::operator=(::std::forward<U>(ok));
  return *this;
}
template <typename F>
  requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
inline constexpr rs_std::Result<
    rs_std::SliceRef<const ::std::uint8_t>,
    ::rs::std::io::Error>::Result(rs_std::unexpected<F>&& err) noexcept
    : base_type(::std::move(err)) {}
template <typename F>
  requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
inline constexpr rs_std::Result<rs_std::SliceRef<const ::std::uint8_t>,
                                ::rs::std::io::Error>&
rs_std::Result<rs_std::SliceRef<const ::std::uint8_t>, ::rs::std::io::Error>::
operator=(rs_std::unexpected<F>&& err) noexcept {
  base_type::operator=(::std::move(err));
  return *this;
}
template <typename... Args>
inline constexpr rs_std::Result<
    rs_std::SliceRef<const ::std::uint8_t>,
    ::rs::std::io::Error>::Result(::std::in_place_t ip, Args&&... args) noexcept
    : base_type(ip, ::std::forward<Args>(args)...) {}
template <typename... Args>
inline constexpr rs_std::Result<
    rs_std::SliceRef<const ::std::uint8_t>,
    ::rs::std::io::Error>::Result(rs_std::unexpect_t u, Args&&... args) noexcept
    : base_type(u, ::std::forward<Args>(args)...) {}

#endif

#ifndef _CRUBIT_BINDINGS_FOR_IMPL_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020fs_x00000020_x0000003a_x0000003a_x00000020DirEntry_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR_IMPL_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020fs_x00000020_x0000003a_x0000003a_x00000020DirEntry_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
inline rs_std::Result<::rs::std::fs::DirEntry, ::rs::std::io::Error>::Result(
    ::crubit::UnsafeRelocateTag, Result&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}
inline rs_std::Result<::rs::std::fs::DirEntry,
                      ::rs::std::io::Error>::~Result() noexcept {
  this->Reset();
}
inline constexpr ::std::uint64_t rs_std::Result<
    ::rs::std::fs::DirEntry, ::rs::std::io::Error>::tag() const& noexcept {
  std::array<unsigned char, sizeof(::std::uint64_t)> __bytes = {};
  for (std::size_t i = 0; i < sizeof(::std::uint64_t); ++i) {
    __bytes[i] = __storage[0 + i];
  }
  return std::bit_cast<::std::uint64_t>(__bytes);
}
inline constexpr void
rs_std::Result<::rs::std::fs::DirEntry, ::rs::std::io::Error>::set_tag(
    ::std::uint64_t tag) noexcept {
  auto __bytes =
      std::bit_cast<std::array<unsigned char, sizeof(::std::uint64_t)>>(tag);
  for (std::size_t i = 0; i < sizeof(::std::uint64_t); ++i) {
    __storage[0 + i] = __bytes[i];
  }
}

template <typename U>
  requires(rs_std::ResultForwardConstructible<
           rs_std::Result<::rs::std::fs::DirEntry, ::rs::std::io::Error>,
           ::rs::std::fs::DirEntry, U>)
inline constexpr rs_std::Result<::rs::std::fs::DirEntry,
                                ::rs::std::io::Error>::Result(U&& ok) noexcept
    : base_type(::std::forward<U>(ok)) {}
template <typename U>
  requires(rs_std::ResultForwardConstructible<
           rs_std::Result<::rs::std::fs::DirEntry, ::rs::std::io::Error>,
           ::rs::std::fs::DirEntry, U>)
inline constexpr rs_std::Result<::rs::std::fs::DirEntry, ::rs::std::io::Error>&
rs_std::Result<::rs::std::fs::DirEntry, ::rs::std::io::Error>::operator=(
    U&& ok) noexcept {
  base_type::operator=(::std::forward<U>(ok));
  return *this;
}
template <typename F>
  requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
inline constexpr rs_std::Result<::rs::std::fs::DirEntry, ::rs::std::io::Error>::
    Result(rs_std::unexpected<F>&& err) noexcept
    : base_type(::std::move(err)) {}
template <typename F>
  requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
inline constexpr rs_std::Result<::rs::std::fs::DirEntry, ::rs::std::io::Error>&
rs_std::Result<::rs::std::fs::DirEntry, ::rs::std::io::Error>::operator=(
    rs_std::unexpected<F>&& err) noexcept {
  base_type::operator=(::std::move(err));
  return *this;
}
template <typename... Args>
inline constexpr rs_std::Result<::rs::std::fs::DirEntry, ::rs::std::io::Error>::
    Result(::std::in_place_t ip, Args&&... args) noexcept
    : base_type(ip, ::std::forward<Args>(args)...) {}
template <typename... Args>
inline constexpr rs_std::Result<::rs::std::fs::DirEntry, ::rs::std::io::Error>::
    Result(rs_std::unexpect_t u, Args&&... args) noexcept
    : base_type(u, ::std::forward<Args>(args)...) {}

#endif

#ifndef _CRUBIT_BINDINGS_FOR_IMPL_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020uint64_ut_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
#define _CRUBIT_BINDINGS_FOR_IMPL_rs_ustd_x00000020_x0000003a_x0000003a_x00000020Result_x00000020_x0000003c_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020uint64_ut_x00000020_x0000002c_x00000020_x0000003a_x0000003a_x00000020rs_x00000020_x0000003a_x0000003a_x00000020std_x00000020_x0000003a_x0000003a_x00000020io_x00000020_x0000003a_x0000003a_x00000020Error_x00000020_x0000003e
inline rs_std::Result<::std::uint64_t, ::rs::std::io::Error>::Result(
    ::crubit::UnsafeRelocateTag, Result&& value) {
  ::std::memcpy(this, &value, sizeof(value));
}
inline rs_std::Result<::std::uint64_t,
                      ::rs::std::io::Error>::~Result() noexcept {
  this->Reset();
}
inline constexpr ::std::uint64_t
rs_std::Result<::std::uint64_t, ::rs::std::io::Error>::tag() const& noexcept {
  std::array<unsigned char, sizeof(::std::uint64_t)> __bytes = {};
  for (std::size_t i = 0; i < sizeof(::std::uint64_t); ++i) {
    __bytes[i] = __storage[0 + i];
  }
  return std::bit_cast<::std::uint64_t>(__bytes);
}
inline constexpr void
rs_std::Result<::std::uint64_t, ::rs::std::io::Error>::set_tag(
    ::std::uint64_t tag) noexcept {
  auto __bytes =
      std::bit_cast<std::array<unsigned char, sizeof(::std::uint64_t)>>(tag);
  for (std::size_t i = 0; i < sizeof(::std::uint64_t); ++i) {
    __storage[0 + i] = __bytes[i];
  }
}

template <typename U>
  requires(rs_std::ResultForwardConstructible<
           rs_std::Result<::std::uint64_t, ::rs::std::io::Error>,
           ::std::uint64_t, U>)
inline constexpr rs_std::Result<::std::uint64_t, ::rs::std::io::Error>::Result(
    U&& ok) noexcept
    : base_type(::std::forward<U>(ok)) {}
template <typename U>
  requires(rs_std::ResultForwardConstructible<
           rs_std::Result<::std::uint64_t, ::rs::std::io::Error>,
           ::std::uint64_t, U>)
inline constexpr rs_std::Result<::std::uint64_t, ::rs::std::io::Error>&
rs_std::Result<::std::uint64_t, ::rs::std::io::Error>::operator=(
    U&& ok) noexcept {
  base_type::operator=(::std::forward<U>(ok));
  return *this;
}
template <typename F>
  requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
inline constexpr rs_std::Result<::std::uint64_t, ::rs::std::io::Error>::Result(
    rs_std::unexpected<F>&& err) noexcept
    : base_type(::std::move(err)) {}
template <typename F>
  requires(rs_std::ResultUnexpectedConstructible<::rs::std::io::Error, F>)
inline constexpr rs_std::Result<::std::uint64_t, ::rs::std::io::Error>&
rs_std::Result<::std::uint64_t, ::rs::std::io::Error>::operator=(
    rs_std::unexpected<F>&& err) noexcept {
  base_type::operator=(::std::move(err));
  return *this;
}
template <typename... Args>
inline constexpr rs_std::Result<::std::uint64_t, ::rs::std::io::Error>::Result(
    ::std::in_place_t ip, Args&&... args) noexcept
    : base_type(ip, ::std::forward<Args>(args)...) {}
template <typename... Args>
inline constexpr rs_std::Result<::std::uint64_t, ::rs::std::io::Error>::Result(
    rs_std::unexpect_t u, Args&&... args) noexcept
    : base_type(u, ::std::forward<Args>(args)...) {}

#endif

#pragma clang diagnostic pop
