Struct Builder

Source
pub struct Builder { /* private fields */ }
Expand description

Configure and generate Rust bindings for a C/C++ header.

This is the main entry point to the library.

use bindgen::builder;

// Configure and generate bindings.
let bindings = builder().header("path/to/input/header")
    .allowlist_type("SomeCoolClass")
    .allowlist_function("do_some_cool_thing")
    .generate()?;

// Write the generated bindings to an output file.
bindings.write_to_file("path/to/output.rs")?;

§Enums

Bindgen can map C/C++ enums into Rust in different ways. The way bindgen maps enums depends on the pattern passed to several methods:

  1. constified_enum_module()
  2. bitfield_enum()
  3. newtype_enum()
  4. rustified_enum()

For each C enum, bindgen tries to match the pattern in the following order:

  1. Constified enum module
  2. Bitfield enum
  3. Newtype enum
  4. Rustified enum

If none of the above patterns match, then bindgen will generate a set of Rust constants.

§Clang arguments

Extra arguments can be passed to with clang:

  1. clang_arg(): takes a single argument
  2. clang_args(): takes an iterator of arguments
  3. BINDGEN_EXTRA_CLANG_ARGS environment variable: whitespace separate environment variable of arguments

Clang arguments specific to your crate should be added via the clang_arg()/clang_args() methods.

End-users of the crate may need to set the BINDGEN_EXTRA_CLANG_ARGS environment variable to add additional arguments. For example, to build against a different sysroot a user could set BINDGEN_EXTRA_CLANG_ARGS to --sysroot=/path/to/sysroot.

Implementations§

Source§

impl Builder

Source

pub fn command_line_flags(&self) -> Vec<String>

Generates the command line flags use for creating Builder.

Source

pub fn header<T>(self, header: T) -> Builder
where T: Into<String>,

Add an input C/C++ header to generate bindings for.

This can be used to generate bindings to a single header:

let bindings = bindgen::Builder::default()
    .header("input.h")
    .generate()
    .unwrap();

Or you can invoke it multiple times to generate bindings to multiple headers:

let bindings = bindgen::Builder::default()
    .header("first.h")
    .header("second.h")
    .header("third.h")
    .generate()
    .unwrap();
Source

pub fn depfile<H, D>(self, output_module: H, depfile: D) -> Builder
where H: Into<String>, D: Into<PathBuf>,

Add a depfile output which will be written alongside the generated bindings.

Source

pub fn header_contents(self, name: &str, contents: &str) -> Builder

Add contents as an input C/C++ header named name.

The file name will be added to the clang arguments.

Source

pub fn rust_target(self, rust_target: RustTarget) -> Builder

Specify the rust target

The default is the latest stable Rust version

Source

pub fn disable_untagged_union(self) -> Builder

Disable support for native Rust unions, if supported.

Source

pub fn disable_header_comment(self) -> Builder

Disable insertion of bindgen’s version identifier into generated bindings.

Source

pub fn emit_ir_graphviz<T>(self, path: T) -> Builder
where T: Into<String>,

Set the output graphviz file.

Source

pub fn generate_comments(self, doit: bool) -> Builder

Whether the generated bindings should contain documentation comments (docstrings) or not. This is set to true by default.

Note that clang by default excludes comments from system headers, pass -fretain-comments-from-system-headers as clang_arg to include them. It can also be told to process all comments (not just documentation ones) using the -fparse-all-comments flag. See slides on clang comment parsing for background and examples.

Source

pub fn allowlist_recursively(self, doit: bool) -> Builder

Whether to allowlist recursively or not. Defaults to true.

Given that we have explicitly allowlisted the “initiate_dance_party” function in this C header:

typedef struct MoonBoots {
    int bouncy_level;
} MoonBoots;

void initiate_dance_party(MoonBoots* boots);

We would normally generate bindings to both the initiate_dance_party function and the MoonBoots struct that it transitively references. By configuring with allowlist_recursively(false), bindgen will not emit bindings for anything except the explicitly allowlisted items, and there would be no emitted struct definition for MoonBoots. However, the initiate_dance_party function would still reference MoonBoots!

Disabling this feature will almost certainly cause bindgen to emit bindings that will not compile! If you disable this feature, then it is your responsibility to provide definitions for every type that is referenced from an explicitly allowlisted item. One way to provide the definitions is by using the Builder::raw_line method, another would be to define them in Rust and then include!(...) the bindings immediately afterwards.

Source

pub fn whitelist_recursively(self, doit: bool) -> Builder

👎Deprecated: Use allowlist_recursively instead

Deprecated alias for allowlist_recursively.

Source

pub fn objc_extern_crate(self, doit: bool) -> Builder

Generate #[macro_use] extern crate objc; instead of use objc; in the prologue of the files generated from objective-c files

Source

pub fn generate_block(self, doit: bool) -> Builder

Generate proper block signatures instead of void pointers.

Source

pub fn block_extern_crate(self, doit: bool) -> Builder

Generate #[macro_use] extern crate block; instead of use block; in the prologue of the files generated from apple block files

Source

pub fn trust_clang_mangling(self, doit: bool) -> Builder

Whether to use the clang-provided name mangling. This is true by default and probably needed for C++ features.

However, some old libclang versions seem to return incorrect results in some cases for non-mangled functions, see 1, so we allow disabling it.

Source

pub fn hide_type<T>(self, arg: T) -> Builder
where T: AsRef<str>,

👎Deprecated: Use blocklist_type instead

Hide the given type from the generated bindings. Regular expressions are supported.

Source

pub fn blacklist_type<T>(self, arg: T) -> Builder
where T: AsRef<str>,

👎Deprecated: Use blocklist_type instead

Hide the given type from the generated bindings. Regular expressions are supported.

Source

pub fn blocklist_type<T>(self, arg: T) -> Builder
where T: AsRef<str>,

Hide the given type from the generated bindings. Regular expressions are supported.

To blocklist types prefixed with “mylib” use "mylib_.*". For more complicated expressions check regex docs

Source

pub fn blacklist_function<T>(self, arg: T) -> Builder
where T: AsRef<str>,

👎Deprecated: Use blocklist_function instead

Hide the given function from the generated bindings. Regular expressions are supported.

Source

pub fn blocklist_function<T>(self, arg: T) -> Builder
where T: AsRef<str>,

Hide the given function from the generated bindings. Regular expressions are supported.

To blocklist functions prefixed with “mylib” use "mylib_.*". For more complicated expressions check regex docs

Source

pub fn blacklist_item<T>(self, arg: T) -> Builder
where T: AsRef<str>,

👎Deprecated: Use blocklist_item instead

Hide the given item from the generated bindings, regardless of whether it’s a type, function, module, etc. Regular expressions are supported.

Source

pub fn blocklist_item<T>(self, arg: T) -> Builder
where T: AsRef<str>,

Hide the given item from the generated bindings, regardless of whether it’s a type, function, module, etc. Regular expressions are supported.

To blocklist items prefixed with “mylib” use "mylib_.*". For more complicated expressions check regex docs

Source

pub fn blocklist_file<T>(self, arg: T) -> Builder
where T: AsRef<str>,

Hide any contents of the given file from the generated bindings, regardless of whether it’s a type, function, module etc.

Source

pub fn opaque_type<T>(self, arg: T) -> Builder
where T: AsRef<str>,

Treat the given type as opaque in the generated bindings. Regular expressions are supported.

To change types prefixed with “mylib” into opaque, use "mylib_.*". For more complicated expressions check regex docs

Source

pub fn whitelisted_type<T>(self, arg: T) -> Builder
where T: AsRef<str>,

👎Deprecated: use allowlist_type instead

Allowlist the given type so that it (and all types that it transitively refers to) appears in the generated bindings. Regular expressions are supported.

Source

pub fn whitelist_type<T>(self, arg: T) -> Builder
where T: AsRef<str>,

👎Deprecated: use allowlist_type instead

Allowlist the given type so that it (and all types that it transitively refers to) appears in the generated bindings. Regular expressions are supported.

Source

pub fn allowlist_type<T>(self, arg: T) -> Builder
where T: AsRef<str>,

Allowlist the given type so that it (and all types that it transitively refers to) appears in the generated bindings. Regular expressions are supported.

To allowlist types prefixed with “mylib” use "mylib_.*". For more complicated expressions check regex docs

Source

pub fn allowlist_function<T>(self, arg: T) -> Builder
where T: AsRef<str>,

Allowlist the given function so that it (and all types that it transitively refers to) appears in the generated bindings. Regular expressions are supported.

To allowlist functions prefixed with “mylib” use "mylib_.*". For more complicated expressions check regex docs

Source

pub fn whitelist_function<T>(self, arg: T) -> Builder
where T: AsRef<str>,

👎Deprecated: use allowlist_function instead

Allowlist the given function.

Deprecated: use allowlist_function instead.

Source

pub fn whitelisted_function<T>(self, arg: T) -> Builder
where T: AsRef<str>,

👎Deprecated: use allowlist_function instead

Allowlist the given function.

Deprecated: use allowlist_function instead.

Source

pub fn allowlist_var<T>(self, arg: T) -> Builder
where T: AsRef<str>,

Allowlist the given variable so that it (and all types that it transitively refers to) appears in the generated bindings. Regular expressions are supported.

To allowlist variables prefixed with “mylib” use "mylib_.*". For more complicated expressions check regex docs

Source

pub fn whitelist_var<T>(self, arg: T) -> Builder
where T: AsRef<str>,

👎Deprecated: use allowlist_var instead

Deprecated: use allowlist_var instead.

Source

pub fn whitelisted_var<T>(self, arg: T) -> Builder
where T: AsRef<str>,

👎Deprecated: use allowlist_var instead

Allowlist the given variable.

Deprecated: use allowlist_var instead.

Source

pub fn default_enum_style(self, arg: EnumVariation) -> Builder

Set the default style of code to generate for enums

Source

pub fn bitfield_enum<T>(self, arg: T) -> Builder
where T: AsRef<str>,

Mark the given enum (or set of enums, if using a pattern) as being bitfield-like. Regular expressions are supported.

This makes bindgen generate a type that isn’t a rust enum. Regular expressions are supported.

This is similar to the newtype enum style, but with the bitwise operators implemented.

Source

pub fn newtype_enum<T>(self, arg: T) -> Builder
where T: AsRef<str>,

Mark the given enum (or set of enums, if using a pattern) as a newtype. Regular expressions are supported.

This makes bindgen generate a type that isn’t a Rust enum. Regular expressions are supported.

Source

pub fn rustified_enum<T>(self, arg: T) -> Builder
where T: AsRef<str>,

Mark the given enum (or set of enums, if using a pattern) as a Rust enum.

This makes bindgen generate enums instead of constants. Regular expressions are supported.

Use this with caution, creating this in unsafe code (including FFI) with an invalid value will invoke undefined behaviour. You may want to use the newtype enum style instead.

Source

pub fn rustified_non_exhaustive_enum<T>(self, arg: T) -> Builder
where T: AsRef<str>,

Mark the given enum (or set of enums, if using a pattern) as a Rust enum with the #[non_exhaustive] attribute.

This makes bindgen generate enums instead of constants. Regular expressions are supported.

Use this with caution, creating this in unsafe code (including FFI) with an invalid value will invoke undefined behaviour. You may want to use the newtype enum style instead.

Source

pub fn constified_enum<T>(self, arg: T) -> Builder
where T: AsRef<str>,

Mark the given enum (or set of enums, if using a pattern) as a set of constants that are not to be put into a module.

Source

pub fn constified_enum_module<T>(self, arg: T) -> Builder
where T: AsRef<str>,

Mark the given enum (or set of enums, if using a pattern) as a set of constants that should be put into a module.

This makes bindgen generate modules containing constants instead of just constants. Regular expressions are supported.

Source

pub fn default_macro_constant_type(self, arg: MacroTypeVariation) -> Builder

Set the default type for macro constants

Source

pub fn default_alias_style(self, arg: AliasVariation) -> Builder

Set the default style of code to generate for typedefs

Source

pub fn type_alias<T>(self, arg: T) -> Builder
where T: AsRef<str>,

Mark the given typedef alias (or set of aliases, if using a pattern) to use regular Rust type aliasing.

This is the default behavior and should be used if default_alias_style was set to NewType or NewTypeDeref and you want to override it for a set of typedefs.

Source

pub fn new_type_alias<T>(self, arg: T) -> Builder
where T: AsRef<str>,

Mark the given typedef alias (or set of aliases, if using a pattern) to be generated as a new type by having the aliased type be wrapped in a #[repr(transparent)] struct.

Used to enforce stricter type checking.

Source

pub fn new_type_alias_deref<T>(self, arg: T) -> Builder
where T: AsRef<str>,

Mark the given typedef alias (or set of aliases, if using a pattern) to be generated as a new type by having the aliased type be wrapped in a #[repr(transparent)] struct and also have an automatically generated impl’s of Deref and DerefMut to their aliased type.

Source

pub fn raw_line<T>(self, arg: T) -> Builder
where T: Into<String>,

Add a string to prepend to the generated bindings. The string is passed through without any modification.

Source

pub fn module_raw_line<T, U>(self, mod_: T, line: U) -> Builder
where T: Into<String>, U: Into<String>,

Add a given line to the beginning of module mod.

Source

pub fn module_raw_lines<T, I>(self, mod_: T, lines: I) -> Builder
where T: Into<String>, I: IntoIterator, <I as IntoIterator>::Item: Into<String>,

Add a given set of lines to the beginning of module mod.

Source

pub fn clang_arg<T>(self, arg: T) -> Builder
where T: Into<String>,

Add an argument to be passed straight through to clang.

Source

pub fn clang_args<I>(self, iter: I) -> Builder
where I: IntoIterator, <I as IntoIterator>::Item: AsRef<str>,

Add arguments to be passed straight through to clang.

Source

pub fn emit_builtins(self) -> Builder

Emit bindings for builtin definitions (for example __builtin_va_list) in the generated Rust.

Source

pub fn no_convert_floats(self) -> Builder

Avoid converting floats to f32/f64 by default.

Source

pub fn layout_tests(self, doit: bool) -> Builder

Set whether layout tests should be generated.

Source

pub fn impl_debug(self, doit: bool) -> Builder

Set whether Debug should be implemented, if it can not be derived automatically.

Source

pub fn impl_partialeq(self, doit: bool) -> Builder

Set whether PartialEq should be implemented, if it can not be derived automatically.

Source

pub fn derive_copy(self, doit: bool) -> Builder

Set whether Copy should be derived by default.

Source

pub fn derive_debug(self, doit: bool) -> Builder

Set whether Debug should be derived by default.

Source

pub fn derive_default(self, doit: bool) -> Builder

Set whether Default should be derived by default.

Source

pub fn derive_hash(self, doit: bool) -> Builder

Set whether Hash should be derived by default.

Source

pub fn derive_partialord(self, doit: bool) -> Builder

Set whether PartialOrd should be derived by default. If we don’t compute partialord, we also cannot compute ord. Set the derive_ord to false when doit is false.

Source

pub fn derive_ord(self, doit: bool) -> Builder

Set whether Ord should be derived by default. We can’t compute Ord without computing PartialOrd, so we set the same option to derive_partialord.

Source

pub fn derive_partialeq(self, doit: bool) -> Builder

Set whether PartialEq should be derived by default.

If we don’t derive PartialEq, we also cannot derive Eq, so deriving Eq is also disabled when doit is false.

Source

pub fn derive_eq(self, doit: bool) -> Builder

Set whether Eq should be derived by default.

We can’t derive Eq without also deriving PartialEq, so we also enable deriving PartialEq when doit is true.

Source

pub fn time_phases(self, doit: bool) -> Builder

Set whether or not to time bindgen phases, and print information to stderr.

Source

pub fn emit_clang_ast(self) -> Builder

Emit Clang AST.

Source

pub fn emit_ir(self) -> Builder

Emit IR.

Source

pub fn enable_cxx_namespaces(self) -> Builder

Enable C++ namespaces.

Source

pub fn enable_function_attribute_detection(self) -> Builder

Enable detecting must_use attributes on C functions.

This is quite slow in some cases (see #1465), so it’s disabled by default.

Note that for this to do something meaningful for now at least, the rust target version has to have support for #[must_use].

Source

pub fn disable_name_namespacing(self) -> Builder

Disable name auto-namespacing.

By default, bindgen mangles names like foo::bar::Baz to look like foo_bar_Baz instead of just Baz.

This method disables that behavior.

Note that this intentionally does not change the names used for allowlisting and blocklisting, which should still be mangled with the namespaces.

Note, also, that this option may cause bindgen to generate duplicate names.

Source

pub fn disable_nested_struct_naming(self) -> Builder

Disable nested struct naming.

The following structs have different names for C and C++. In case of C they are visible as foo and bar. In case of C++ they are visible as foo and foo::bar.

struct foo {
    struct bar {
    } b;
};

Bindgen wants to avoid duplicate names by default so it follows C++ naming and it generates foo/foo_bar instead of just foo/bar.

This method disables this behavior and it is indented to be used only for headers that were written for C.

Source

pub fn conservative_inline_namespaces(self) -> Builder

Treat inline namespaces conservatively.

This is tricky, because in C++ is technically legal to override an item defined in an inline namespace:

inline namespace foo {
    using Bar = int;
}
using Bar = long;

Even though referencing Bar is a compiler error.

We want to support this (arguably esoteric) use case, but we don’t want to make the rest of bindgen users pay an usability penalty for that.

To support this, we need to keep all the inline namespaces around, but then bindgen usage is a bit more difficult, because you cannot reference, e.g., std::string (you’d need to use the proper inline namespace).

We could complicate a lot of the logic to detect name collisions, and if not detected generate a pub use inline_ns::* or something like that.

That’s probably something we can do if we see this option is needed in a lot of cases, to improve it’s usability, but my guess is that this is not going to be too useful.

Source

pub fn generate_inline_functions(self, doit: bool) -> Builder

Whether inline functions should be generated or not.

Note that they will usually not work. However you can use -fkeep-inline-functions or -fno-inline-functions if you are responsible of compiling the library to make them callable.

Source

pub fn ignore_functions(self) -> Builder

Ignore functions.

Source

pub fn ignore_methods(self) -> Builder

Ignore methods.

Source

pub fn unstable_rust(self, doit: bool) -> Builder

👎Deprecated: please use rust_target instead

Avoid generating any unstable Rust, such as Rust unions, in the generated bindings.

Source

pub fn use_core(self) -> Builder

Use core instead of libstd in the generated bindings.

Source

pub fn ctypes_prefix<T>(self, prefix: T) -> Builder
where T: Into<String>,

Use the given prefix for the raw types instead of ::std::os::raw.

Source

pub fn anon_fields_prefix<T>(self, prefix: T) -> Builder
where T: Into<String>,

Use the given prefix for the anon fields.

Source

pub fn parse_callbacks(self, cb: Box<dyn ParseCallbacks>) -> Builder

Allows configuring types in different situations, see the ParseCallbacks documentation.

Source

pub fn with_codegen_config(self, config: CodegenConfig) -> Builder

Choose what to generate using a CodegenConfig.

Source

pub fn detect_include_paths(self, doit: bool) -> Builder

Whether to detect include paths using clang_sys.

Source

pub fn fit_macro_constants(self, doit: bool) -> Builder

Whether to try to fit macro constants to types smaller than u32/i32

Source

pub fn prepend_enum_name(self, doit: bool) -> Builder

Prepend the enum name to constant or newtype variants.

Source

pub fn size_t_is_usize(self, is: bool) -> Builder

Set whether size_t should be translated to usize automatically.

Source

pub fn rustfmt_bindings(self, doit: bool) -> Builder

Set whether rustfmt should format the generated bindings.

Source

pub fn record_matches(self, doit: bool) -> Builder

Set whether we should record matched items in our regex sets.

Source

pub fn rustfmt_configuration_file(self, path: Option<PathBuf>) -> Builder

Set the absolute path to the rustfmt configuration file, if None, the standard rustfmt options are used.

Source

pub fn with_rustfmt<P>(self, path: P) -> Builder
where P: Into<PathBuf>,

Sets an explicit path to rustfmt, to be used when rustfmt is enabled.

Source

pub fn explicit_padding(self, doit: bool) -> Builder

If true, always emit explicit padding fields.

If a struct needs to be serialized in its native format (padding bytes and all), for example writing it to a file or sending it on the network, then this should be enabled, as anything reading the padding bytes of a struct may lead to Undefined Behavior.

Source

pub fn generate(self) -> Result<Bindings, ()>

Generate the Rust bindings using the options built up thus far.

Source

pub fn dump_preprocessed_input(&self) -> Result<(), Error>

Preprocess and dump the input header files to disk.

This is useful when debugging bindgen, using C-Reduce, or when filing issues. The resulting file will be named something like __bindgen.i or __bindgen.ii

Source

pub fn no_partialeq<T>(self, arg: T) -> Builder
where T: Into<String>,

Don’t derive PartialEq for a given type. Regular expressions are supported.

Source

pub fn no_copy<T>(self, arg: T) -> Builder
where T: Into<String>,

Don’t derive Copy for a given type. Regular expressions are supported.

Source

pub fn no_debug<T>(self, arg: T) -> Builder
where T: Into<String>,

Don’t derive Debug for a given type. Regular expressions are supported.

Source

pub fn no_default<T>(self, arg: T) -> Builder
where T: Into<String>,

Don’t derive/impl Default for a given type. Regular expressions are supported.

Source

pub fn no_hash<T>(self, arg: T) -> Builder
where T: Into<String>,

Don’t derive Hash for a given type. Regular expressions are supported.

Source

pub fn must_use_type<T>(self, arg: T) -> Builder
where T: Into<String>,

Add #[must_use] for the given type. Regular expressions are supported.

Source

pub fn array_pointers_in_arguments(self, doit: bool) -> Builder

Set whether arr[size] should be treated as *mut T or *mut [T; size] (same for mut)

Source

pub fn wasm_import_module_name<T>(self, import_name: T) -> Builder
where T: Into<String>,

Set the wasm import module name

Source

pub fn dynamic_library_name<T>(self, dynamic_library_name: T) -> Builder
where T: Into<String>,

Specify the dynamic library name if we are generating bindings for a shared library.

Require successful linkage for all routines in a shared library. This allows us to optimize function calls by being able to safely assume function pointers are valid.

Source

pub fn respect_cxx_access_specs(self, doit: bool) -> Builder

Generate bindings as pub only if the bound item is publically accessible by C++.

Source

pub fn translate_enum_integer_types(self, doit: bool) -> Builder

Always translate enum integer types to native Rust integer types.

This will result in enums having types such as u32 and i16 instead of c_uint and c_short. Types for Rustified enums are always translated.

Source

pub fn c_naming(self, doit: bool) -> Builder

Generate types with C style naming.

This will add prefixes to the generated type names. For example instead of a struct A we will generate struct struct_A. Currently applies to structs, unions, and enums.

Trait Implementations§

Source§

impl Debug for Builder

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl Default for Builder

Source§

fn default() -> Builder

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more