diff --git a/rust/private/rustfmt.bzl b/rust/private/rustfmt.bzl
index db5ef43..a7e7100 100644
--- a/rust/private/rustfmt.bzl
+++ b/rust/private/rustfmt.bzl
@@ -1,27 +1,42 @@
 """A module defining rustfmt rules"""
 
 load(":common.bzl", "rust_common")
-load(":utils.bzl", "find_toolchain")
 
-def _find_rustfmtable_srcs(target, aspect_ctx = None):
-    """Parse a target for rustfmt formattable sources.
+def _get_rustfmt_ready_crate_info(target):
+    """Check that a target is suitable for rustfmt and extract the `CrateInfo` provider from it.
 
     Args:
         target (Target): The target the aspect is running on.
+
+    Returns:
+        CrateInfo, optional: A `CrateInfo` provider if clippy should be run or `None`.
+    """
+
+    # Ignore external targets
+    if target.label.workspace_root.startswith("external"):
+        return None
+
+    # Obviously ignore any targets that don't contain `CrateInfo`
+    if rust_common.crate_info in target:
+        return target[rust_common.crate_info]
+    elif rust_common.test_crate_info in target:
+        return target[rust_common.test_crate_info].crate
+    else:
+        return None
+
+def _find_rustfmtable_srcs(crate_info, aspect_ctx = None):
+    """Parse a `CrateInfo` provider for rustfmt formattable sources.
+
+    Args:
+        crate_info (CrateInfo): A `CrateInfo` provider.
         aspect_ctx (ctx, optional): The aspect's context object.
 
     Returns:
         list: A list of formattable sources (`File`).
     """
-    if rust_common.crate_info not in target:
-        return []
 
-    # Ignore external targets
-    if target.label.workspace_root.startswith("external"):
-        return []
-
+    # Targets with specific tags will not be formatted
     if aspect_ctx:
-        # Targets with specifc tags will not be formatted
         ignore_tags = [
             "no-format",
             "no-rustfmt",
@@ -32,8 +47,6 @@
             if tag in aspect_ctx.rule.attr.tags:
                 return []
 
-    crate_info = target[rust_common.crate_info]
-
     # Filter out any generated files
     srcs = [src for src in crate_info.srcs.to_list() if src.is_source]
 
@@ -55,7 +68,8 @@
     return manifest
 
 def _perform_check(edition, srcs, ctx):
-    toolchain = find_toolchain(ctx)
+    rustfmt_toolchain = ctx.toolchains[Label("//rust/rustfmt:toolchain_type")]
+
     config = ctx.file._config
     marker = ctx.actions.declare_file(ctx.label.name + ".rustfmt.ok")
 
@@ -63,7 +77,7 @@
     args.add("--touch-file")
     args.add(marker)
     args.add("--")
-    args.add(toolchain.rustfmt)
+    args.add(rustfmt_toolchain.rustfmt)
     args.add("--config-path")
     args.add(config)
     args.add("--edition")
@@ -75,7 +89,7 @@
         executable = ctx.executable._process_wrapper,
         inputs = srcs + [config],
         outputs = [marker],
-        tools = [toolchain.rustfmt],
+        tools = [rustfmt_toolchain.all_files],
         arguments = [args],
         mnemonic = "Rustfmt",
     )
@@ -83,21 +97,23 @@
     return marker
 
 def _rustfmt_aspect_impl(target, ctx):
-    srcs = _find_rustfmtable_srcs(target, ctx)
+    crate_info = _get_rustfmt_ready_crate_info(target)
+
+    if not crate_info:
+        return []
+
+    srcs = _find_rustfmtable_srcs(crate_info, ctx)
 
     # If there are no formattable sources, do nothing.
     if not srcs:
         return []
 
-    # Parse the edition to use for formatting from the target
-    edition = target[rust_common.crate_info].edition
+    edition = crate_info.edition
 
-    manifest = _generate_manifest(edition, srcs, ctx)
     marker = _perform_check(edition, srcs, ctx)
 
     return [
         OutputGroupInfo(
-            rustfmt_manifest = depset([manifest]),
             rustfmt_checks = depset([marker]),
         ),
     ]
@@ -109,7 +125,6 @@
 
 Output Groups:
 
-- `rustfmt_manifest`: A manifest used by rustfmt binaries to provide crate specific settings.
 - `rustfmt_checks`: Executes `rustfmt --check` on the specified target.
 
 The build setting `@rules_rust//:rustfmt.toml` is used to control the Rustfmt [configuration settings][cs]
@@ -135,10 +150,52 @@
         ),
     },
     incompatible_use_toolchain_transition = True,
+    required_providers = [
+        [rust_common.crate_info],
+        [rust_common.test_crate_info],
+    ],
     fragments = ["cpp"],
     host_fragments = ["cpp"],
     toolchains = [
-        str(Label("//rust:toolchain_type")),
+        str(Label("//rust/rustfmt:toolchain_type")),
+    ],
+)
+
+def _rustfmt_test_manifest_aspect_impl(target, ctx):
+    crate_info = _get_rustfmt_ready_crate_info(target)
+
+    if not crate_info:
+        return []
+
+    # Parse the edition to use for formatting from the target
+    edition = crate_info.edition
+
+    srcs = _find_rustfmtable_srcs(crate_info, ctx)
+    manifest = _generate_manifest(edition, srcs, ctx)
+
+    return [
+        OutputGroupInfo(
+            rustfmt_manifest = depset([manifest]),
+        ),
+    ]
+
+# This aspect contains functionality split out of `rustfmt_aspect` which broke when
+# `required_providers` was added to it. Aspects which have `required_providers` seems
+# to not function with attributes that also require providers.
+_rustfmt_test_manifest_aspect = aspect(
+    implementation = _rustfmt_test_manifest_aspect_impl,
+    doc = """\
+This aspect is used to gather information about a crate for use in `rustfmt_test`
+
+Output Groups:
+
+- `rustfmt_manifest`: A manifest used by rustfmt binaries to provide crate specific settings.
+""",
+    incompatible_use_toolchain_transition = True,
+    fragments = ["cpp"],
+    host_fragments = ["cpp"],
+    toolchains = [
+        str(Label("//rust/rustfmt:toolchain_type")),
     ],
 )
 
@@ -158,8 +215,13 @@
         is_executable = True,
     )
 
-    manifests = depset(transitive = [target[OutputGroupInfo].rustfmt_manifest for target in ctx.attr.targets])
-    srcs = [depset(_find_rustfmtable_srcs(target)) for target in ctx.attr.targets]
+    crate_infos = [_get_rustfmt_ready_crate_info(target) for target in ctx.attr.targets]
+    srcs = [depset(_find_rustfmtable_srcs(crate_info)) for crate_info in crate_infos if crate_info]
+
+    # Some targets may be included in tests but tagged as "no-format". In this
+    # case, there will be no manifest.
+    manifests = [getattr(target[OutputGroupInfo], "rustfmt_manifest", None) for target in ctx.attr.targets]
+    manifests = depset(transitive = [manifest for manifest in manifests if manifest])
 
     runfiles = ctx.runfiles(
         transitive_files = depset(transitive = srcs + [manifests]),
@@ -192,8 +254,11 @@
     attrs = {
         "targets": attr.label_list(
             doc = "Rust targets to run `rustfmt --check` on.",
-            providers = [rust_common.crate_info],
-            aspects = [rustfmt_aspect],
+            providers = [
+                [rust_common.crate_info],
+                [rust_common.test_crate_info],
+            ],
+            aspects = [_rustfmt_test_manifest_aspect],
         ),
         "_runner": attr.label(
             doc = "The rustfmt test runner",
@@ -205,21 +270,80 @@
     test = True,
 )
 
-def _rustfmt_workspace_name_impl(ctx):
-    output = ctx.actions.declare_file(ctx.label.name)
+def _rustfmt_toolchain_impl(ctx):
+    make_variables = {
+        "RUSTFMT": ctx.file.rustfmt.path,
+    }
 
-    ctx.actions.write(
-        output = output,
-        content = "RUSTFMT_WORKSPACE={}".format(
-            ctx.workspace_name,
-        ),
+    if ctx.attr.rustc:
+        make_variables.update({
+            "RUSTC": ctx.file.rustc.path,
+        })
+
+    make_variable_info = platform_common.TemplateVariableInfo(make_variables)
+
+    all_files = [ctx.file.rustfmt] + ctx.files.rustc_lib
+    if ctx.file.rustc:
+        all_files.append(ctx.file.rustc)
+
+    toolchain = platform_common.ToolchainInfo(
+        rustfmt = ctx.file.rustfmt,
+        rustc = ctx.file.rustc,
+        rustc_lib = depset(ctx.files.rustc_lib),
+        all_files = depset(all_files),
+        make_variables = make_variable_info,
     )
 
-    return [DefaultInfo(
-        files = depset([output]),
-    )]
+    return [
+        toolchain,
+        make_variable_info,
+    ]
 
-rustfmt_workspace_name = rule(
-    implementation = _rustfmt_workspace_name_impl,
-    doc = "A rule for detecting the workspace name for Rustfmt runfiles.",
+rustfmt_toolchain = rule(
+    doc = "A toolchain for [rustfmt](https://rust-lang.github.io/rustfmt/)",
+    implementation = _rustfmt_toolchain_impl,
+    incompatible_use_toolchain_transition = True,
+    attrs = {
+        "rustc": attr.label(
+            doc = "The location of the `rustc` binary. Can be a direct source or a filegroup containing one item.",
+            allow_single_file = True,
+            cfg = "exec",
+        ),
+        "rustc_lib": attr.label(
+            doc = "The libraries used by rustc during compilation.",
+            cfg = "exec",
+        ),
+        "rustfmt": attr.label(
+            doc = "The location of the `rustfmt` binary. Can be a direct source or a filegroup containing one item.",
+            allow_single_file = True,
+            cfg = "exec",
+            mandatory = True,
+        ),
+    },
+    toolchains = [
+        str(Label("@rules_rust//rust:toolchain_type")),
+    ],
+)
+
+def _current_rustfmt_toolchain_impl(ctx):
+    toolchain = ctx.toolchains[str(Label("@rules_rust//rust/rustfmt:toolchain_type"))]
+
+    return [
+        toolchain,
+        toolchain.make_variables,
+        DefaultInfo(
+            files = depset([
+                toolchain.rustfmt,
+            ]),
+            runfiles = ctx.runfiles(transitive_files = toolchain.all_files),
+        ),
+    ]
+
+current_rustfmt_toolchain = rule(
+    doc = "A rule for exposing the current registered `rustfmt_toolchain`.",
+    implementation = _current_rustfmt_toolchain_impl,
+    toolchains = [
+        str(Label("@rules_rust//rust/rustfmt:toolchain_type")),
+    ],
+    incompatible_use_toolchain_transition = True,
 )
