

<!--
Documentation generated by Skydoc
-->
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width initial-scale=1" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge">

    <title>Rust Rules</title>

    <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,600,700" type="text/css">
    <link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
    <link rel="stylesheet" href="https://code.getmdl.io/1.1.1/material.green-light_blue.min.css">
    <script defer src="https://code.getmdl.io/1.1.1/material.min.js"></script>
    <link rel="stylesheet" href="https://bazelbuild.github.io/rules_rust/main.css">
  </head>
  <body>
    <div class="mdl-layout mdl-js-layout mdl-layout--fixed-drawer
      mdl-layout--fixed-header">
      <header class="mdl-layout__header">
        <div class="mdl-layout__header-row">
          <span class="mdl-layout-title">Rust Rules</span>
        </div>
      </header>
      <div class="mdl-layout__drawer">
        <span class="mdl-layout-title">Bazel</span>
        <nav class="drawer-nav">
          <ul class="drawer-nav">
            
<li><a href="https://bazelbuild.github.io/rules_rust/index.html">Overview</a></li>
<li>
  <a href="https://bazelbuild.github.io/rules_rust/rust/rust.html">Rust Rules</a>
  <ul>
    <li><a href="https://bazelbuild.github.io/rules_rust/rust/rust.html#overview">Overview</a></li>
    <li>
      <a href="https://bazelbuild.github.io/rules_rust/rust/rust.html#rust_benchmark">
        rust_benchmark
      </a>
    </li>
    <li>
      <a href="https://bazelbuild.github.io/rules_rust/rust/rust.html#rust_binary">
        rust_binary
      </a>
    </li>
    <li>
      <a href="https://bazelbuild.github.io/rules_rust/rust/rust.html#rust_doc">
        rust_doc
      </a>
    </li>
    <li>
      <a href="https://bazelbuild.github.io/rules_rust/rust/rust.html#rust_doc_test">
        rust_doc_test
      </a>
    </li>
    <li>
      <a href="https://bazelbuild.github.io/rules_rust/rust/rust.html#rust_library">
        rust_library
      </a>
    </li>
    <li>
      <a href="https://bazelbuild.github.io/rules_rust/rust/rust.html#rust_test">
        rust_test
      </a>
    </li>
  </ul>
</li>

          </ul>
        </nav>
      </div>

      <main class="mdl-layout__content">
        <div class="page-content">
          <h1>Rust Rules</h1>

<nav class="toc">
  <h2><a href="#overview">Overview</a></h2>
  <h2>Rules</h2>
  <ul>
    <li><a href="#rust_benchmark">rust_benchmark</a></li>
    <li><a href="#rust_binary">rust_binary</a></li>
    <li><a href="#rust_doc">rust_doc</a></li>
    <li><a href="#rust_doc_test">rust_doc_test</a></li>
    <li><a href="#rust_library">rust_library</a></li>
    <li><a href="#rust_test">rust_test</a></li>
  </ul>
  <h2>Macros</h2>
  <ul>
    <li><a href="#rust_repositories">rust_repositories</a></li>
  </ul>
</nav>
          <hr>
          <h2 id="overview">Overview</h2>
          <p>These build rules are used for building <a href="http://www.rust-lang.org/">Rust</a> projects with Bazel.</p>
<h3>Setup</h3>
<p>To use the Rust rules, add the following to your <code>WORKSPACE</code> file to add the
external repositories for the Rust toolchain:</p>
<pre><code class="lang-python">git_repository(
    name = &quot;io_bazel_rules_rust&quot;,
    remote = &quot;https://github.com/bazelbuild/rules_rust.git&quot;,
    tag = &quot;0.0.5&quot;,
)
load(&quot;@io_bazel_rules_rust//rust:rust.bzl&quot;, &quot;rust_repositories&quot;)

rust_repositories()
</code></pre>
<h3>Roadmap</h3>
<ul>
<li>Add <code>rust_toolchain</code> rule to make it easy to use a custom Rust toolchain.</li>
<li>Add tool for taking <code>Cargo.toml</code> and generating a <code>WORKSPACE</code> file with
workspace rules for pulling external dependencies.</li>
<li>Improve expressiveness of features and support for <a href="http://doc.crates.io/manifest.html#the-[features]-section">Cargo's feature
groups</a>.</li>
<li>Add <code>cargo_crate</code> workspace rule for pulling crates from
<a href="https://crates.io/">Cargo</a>.</li>
</ul>

          <hr>

          <h2 id="rust_repositories">rust_repositories</h2>

          <pre>rust_repositories()</pre>

          <p>Adds the external dependencies needed for the Rust rules.</p>


          <hr>

          <h2 id="rust_benchmark">rust_benchmark</h2>

          <pre>rust_benchmark(<a href="#rust_benchmark.name">name</a>, <a href="#rust_benchmark.deps">deps</a>, <a href="#rust_benchmark.data">data</a>, <a href="#rust_benchmark.srcs">srcs</a>, <a href="#rust_benchmark.crate_features">crate_features</a>, <a href="#rust_benchmark.crate_root">crate_root</a>, <a href="#rust_benchmark.rustc_flags">rustc_flags</a>)</pre>

          <p>Builds a Rust benchmark test.</p>
<p><strong>Warning</strong>: This rule is currently experimental. <a href="https://doc.rust-lang.org/book/benchmark-tests.html">Rust Benchmark
tests</a> require the <code>Bencher</code> interface in the unstable <code>libtest</code>
crate, which is behind the <code>test</code> unstable feature gate. As a result, using
this rule would require using a nightly binary release of Rust. A
<code>rust_toolchain</code> rule will be added in the <a href="#roadmap">near future</a> to make it
easy to use a custom Rust toolchain, such as a nightly release.</p>


          <h3 id="rust_benchmark_args">Attributes</h3>

<table class="params-table">
  <colgroup>
    <col class="col-param" />
    <col class="col-description" />
  </colgroup>
  <tbody>
    <tr id="rust_benchmark.name">
      <td><code>name</code></td>
      <td>
        <p><code><a href="https://bazel.build/docs/build-ref.html#name">Name</a>; Required</code></p>
        <p>This name will also be used as the name of the binary crate built by
this rule.</p>
      </td>
    </tr>
    <tr id="rust_benchmark.deps">
      <td><code>deps</code></td>
      <td>
        <p><code>List of <a href="https://bazel.build/docs/build-ref.html#labels">labels</a>; Optional; Default is []</code></p>
        <p>List of other libraries to be linked to this library target.</p>
<p>These must be <code>rust_library</code> targets.</p>
      </td>
    </tr>
    <tr id="rust_benchmark.data">
      <td><code>data</code></td>
      <td>
        <p><code>List of <a href="https://bazel.build/docs/build-ref.html#labels">labels</a>; Optional; Default is []</code></p>
        <p>List of files used by this rule at runtime.</p>
<p>This attribute can be used to specify any data files that are embedded into
the library, such as via the
<a href="https://doc.rust-lang.org/std/macro.include_str!.html"><code>include_str!</code></a>
macro.</p>
      </td>
    </tr>
    <tr id="rust_benchmark.srcs">
      <td><code>srcs</code></td>
      <td>
        <p><code>List of <a href="https://bazel.build/docs/build-ref.html#labels">labels</a>; Optional; Default is []</code></p>
        <p>List of Rust <code>.rs</code> source files used to build the test.</p>
<p>If <code>srcs</code> contains more than one file, then there must be a file either
named <code>lib.rs</code>. Otherwise, <code>crate_root</code> must be set to the source file that
is the root of the crate to be passed to rustc to build this crate.</p>
      </td>
    </tr>
    <tr id="rust_benchmark.crate_features">
      <td><code>crate_features</code></td>
      <td>
        <p><code>List of strings; Optional; Default is []</code></p>
        <p>List of features to enable for this crate.</p>
<p>Features are defined in the code using the <code>#[cfg(feature = "foo")]</code>
configuration option. The features listed here will be passed to <code>rustc</code>
with <code>--cfg feature="${feature_name}"</code> flags.</p>
      </td>
    </tr>
    <tr id="rust_benchmark.crate_root">
      <td><code>crate_root</code></td>
      <td>
        <p><code><a href="https://bazel.build/docs/build-ref.html#labels">Label</a>; Optional</code></p>
        <p>The file that will be passed to <code>rustc</code> to be used for building
this crate.</p>
<p>If <code>crate_root</code> is not set, then this rule will look for a <code>lib.rs</code> file or
the single file in <code>srcs</code> if <code>srcs</code> contains only one file.</p>
      </td>
    </tr>
    <tr id="rust_benchmark.rustc_flags">
      <td><code>rustc_flags</code></td>
      <td>
        <p><code>List of strings; Optional; Default is []</code></p>
        <p>List of compiler flags passed to <code>rustc</code>.</p>
      </td>
    </tr>
  </tbody>
</table>
          <h3 id="rust_benchmark_examples">Examples</h3>
          <p>Suppose you have the following directory structure for a Rust project with a
library crate, <code>fibonacci</code> with benchmarks under the <code>benches/</code> directory:</p>
<pre><code>[workspace]/
    WORKSPACE
    fibonacci/
        BUILD
        src/
            lib.rs
        benches/
            fibonacci_bench.rs
</code></pre>
<p><code>fibonacci/src/lib.rs</code>:</p>
<pre><code class="lang-rust">pub fn fibonacci(n: u64) -&gt; u64 {
    if n &lt; 2 {
        return n;
    }
    let mut n1: u64 = 0;
    let mut n2: u64 = 1;
    for _ in 1..n {
        let sum = n1 + n2;
        n1 = n2;
        n2 = sum;
    }
    n2
}
</code></pre>
<p><code>fibonacci/benches/fibonacci_bench.rs</code>:</p>
<pre><code class="lang-rust">#![feature(test)]

extern crate test;
extern crate fibonacci;

use test::Bencher;

#[bench]
fn bench_fibonacci(b: &amp;mut Bencher) {
    b.iter(|| fibonacci::fibonacci(40));
}
</code></pre>
<p>To build the benchmark test, simply add a <code>rust_benchmark</code> target:</p>
<p><code>fibonacci/BUILD</code>:</p>
<pre><code class="lang-python">package(default_visibility = [&quot;//visibility:public&quot;])

load(&quot;@io_bazel_rules_rust//rust:rust.bzl&quot;, &quot;rust_library&quot;, &quot;rust_benchmark&quot;)

rust_library(
    name = &quot;fibonacci&quot;,
    srcs = [&quot;src/lib.rs&quot;],
)

rust_benchmark(
    name = &quot;fibonacci_bench&quot;,
    srcs = [&quot;benches/fibonacci_bench.rs&quot;],
    deps = [&quot;:fibonacci&quot;],
)
</code></pre>
<p>Run the benchmark test using: <code>bazel build //fibonacci:fibonacci_bench</code>.</p>

          <hr>

          <h2 id="rust_binary">rust_binary</h2>

          <pre>rust_binary(<a href="#rust_binary.name">name</a>, <a href="#rust_binary.deps">deps</a>, <a href="#rust_binary.data">data</a>, <a href="#rust_binary.srcs">srcs</a>, <a href="#rust_binary.crate_features">crate_features</a>, <a href="#rust_binary.crate_root">crate_root</a>, <a href="#rust_binary.rustc_flags">rustc_flags</a>)</pre>

          <p>Builds a Rust binary crate.</p>


          <h3 id="rust_binary_args">Attributes</h3>

<table class="params-table">
  <colgroup>
    <col class="col-param" />
    <col class="col-description" />
  </colgroup>
  <tbody>
    <tr id="rust_binary.name">
      <td><code>name</code></td>
      <td>
        <p><code><a href="https://bazel.build/docs/build-ref.html#name">Name</a>; Required</code></p>
        <p>This name will also be used as the name of the binary crate built by
this rule.</p>
      </td>
    </tr>
    <tr id="rust_binary.deps">
      <td><code>deps</code></td>
      <td>
        <p><code>List of <a href="https://bazel.build/docs/build-ref.html#labels">labels</a>; Optional; Default is []</code></p>
        <p>List of other libraries to be linked to this library target.</p>
<p>These must be <code>rust_library</code> targets.</p>
      </td>
    </tr>
    <tr id="rust_binary.data">
      <td><code>data</code></td>
      <td>
        <p><code>List of <a href="https://bazel.build/docs/build-ref.html#labels">labels</a>; Optional; Default is []</code></p>
        <p>List of files used by this rule at runtime.</p>
<p>This attribute can be used to specify any data files that are embedded into
the library, such as via the
<a href="https://doc.rust-lang.org/std/macro.include_str!.html"><code>include_str!</code></a>
macro.</p>
      </td>
    </tr>
    <tr id="rust_binary.srcs">
      <td><code>srcs</code></td>
      <td>
        <p><code>List of <a href="https://bazel.build/docs/build-ref.html#labels">labels</a>; Optional; Default is []</code></p>
        <p>List of Rust <code>.rs</code> source files used to build the test.</p>
<p>If <code>srcs</code> contains more than one file, then there must be a file either
named <code>lib.rs</code>. Otherwise, <code>crate_root</code> must be set to the source file that
is the root of the crate to be passed to rustc to build this crate.</p>
      </td>
    </tr>
    <tr id="rust_binary.crate_features">
      <td><code>crate_features</code></td>
      <td>
        <p><code>List of strings; Optional; Default is []</code></p>
        <p>List of features to enable for this crate.</p>
<p>Features are defined in the code using the <code>#[cfg(feature = "foo")]</code>
configuration option. The features listed here will be passed to <code>rustc</code>
with <code>--cfg feature="${feature_name}"</code> flags.</p>
      </td>
    </tr>
    <tr id="rust_binary.crate_root">
      <td><code>crate_root</code></td>
      <td>
        <p><code><a href="https://bazel.build/docs/build-ref.html#labels">Label</a>; Optional</code></p>
        <p>The file that will be passed to <code>rustc</code> to be used for building
this crate.</p>
<p>If <code>crate_root</code> is not set, then this rule will look for a <code>lib.rs</code> file or
the single file in <code>srcs</code> if <code>srcs</code> contains only one file.</p>
      </td>
    </tr>
    <tr id="rust_binary.rustc_flags">
      <td><code>rustc_flags</code></td>
      <td>
        <p><code>List of strings; Optional; Default is []</code></p>
        <p>List of compiler flags passed to <code>rustc</code>.</p>
      </td>
    </tr>
  </tbody>
</table>
          <h3 id="rust_binary_examples">Examples</h3>
          <p>Suppose you have the following directory structure for a Rust project with a
library crate, <code>hello_lib</code>, and a binary crate, <code>hello_world</code> that uses the
<code>hello_lib</code> library:</p>
<pre><code>[workspace]/
    WORKSPACE
    hello_lib/
        BUILD
        src/
            lib.rs
    hello_world/
        BUILD
        src/
            main.rs
</code></pre>
<p><code>hello_lib/src/lib.rs</code>:</p>
<pre><code class="lang-rust">pub struct Greeter {
    greeting: String,
}

impl Greeter {
    pub fn new(greeting: &amp;str) -&gt; Greeter {
        Greeter { greeting: greeting.to_string(), }
    }

    pub fn greet(&amp;self, thing: &amp;str) {
        println!(&quot;{} {}&quot;, &amp;self.greeting, thing);
    }
}
</code></pre>
<p><code>hello_lib/BUILD</code>:</p>
<pre><code class="lang-python">package(default_visibility = [&quot;//visibility:public&quot;])

load(&quot;@io_bazel_rules_rust//rust:rust.bzl&quot;, &quot;rust_library&quot;)

rust_library(
    name = &quot;hello_lib&quot;,
    srcs = [&quot;src/lib.rs&quot;],
)
</code></pre>
<p><code>hello_world/src/main.rs</code>:</p>
<pre><code class="lang-rust">extern crate hello_lib;

fn main() {
    let hello = hello_lib::Greeter::new(&quot;Hello&quot;);
    hello.greet(&quot;world&quot;);
}
</code></pre>
<p><code>hello_world/BUILD</code>:</p>
<pre><code class="lang-python">load(&quot;@io_bazel_rules_rust//rust:rust.bzl&quot;, &quot;rust_binary&quot;)

rust_binary(
    name = &quot;hello_world&quot;,
    srcs = [&quot;src/main.rs&quot;],
    deps = [&quot;//hello_lib&quot;],
)
</code></pre>
<p>Build and run <code>hello_world</code>:</p>
<pre><code>$ bazel run //hello_world
INFO: Found 1 target...
Target //examples/rust/hello_world:hello_world up-to-date:
  bazel-bin/examples/rust/hello_world/hello_world
INFO: Elapsed time: 1.308s, Critical Path: 1.22s

INFO: Running command line: bazel-bin/examples/rust/hello_world/hello_world
Hello world
</code></pre>

          <hr>

          <h2 id="rust_doc">rust_doc</h2>

          <pre>rust_doc(<a href="#rust_doc.name">name</a>, <a href="#rust_doc.dep">dep</a>, <a href="#rust_doc.html_after_content">html_after_content</a>, <a href="#rust_doc.html_before_content">html_before_content</a>, <a href="#rust_doc.html_in_header">html_in_header</a>, <a href="#rust_doc.markdown_css">markdown_css</a>)</pre>

          <p>Generates code documentation.</p>


          <h3 id="rust_doc_args">Attributes</h3>

<table class="params-table">
  <colgroup>
    <col class="col-param" />
    <col class="col-description" />
  </colgroup>
  <tbody>
    <tr id="rust_doc.name">
      <td><code>name</code></td>
      <td>
        <p><code><a href="https://bazel.build/docs/build-ref.html#name">Name</a>; Required</code></p>
        <p>A unique name for this rule.</p>
      </td>
    </tr>
    <tr id="rust_doc.dep">
      <td><code>dep</code></td>
      <td>
        <p><code><a href="https://bazel.build/docs/build-ref.html#labels">Label</a>; Required</code></p>
        <p>The label of the target to run documentation tests for.</p>
<p><code>rust_doc_test</code> can run documentation tests for the source files of
<code>rust_library</code> or <code>rust_binary</code> targets.</p>
      </td>
    </tr>
    <tr id="rust_doc.html_after_content">
      <td><code>html_after_content</code></td>
      <td>
        <p><code><a href="https://bazel.build/docs/build-ref.html#labels">Label</a>; Optional</code></p>
        <p>File to add in <code>&amp;lt;body&amp;gt;</code>, after content.</p>
      </td>
    </tr>
    <tr id="rust_doc.html_before_content">
      <td><code>html_before_content</code></td>
      <td>
        <p><code><a href="https://bazel.build/docs/build-ref.html#labels">Label</a>; Optional</code></p>
        <p>File to add in <code>&amp;lt;body&amp;gt;</code>, before content.</p>
      </td>
    </tr>
    <tr id="rust_doc.html_in_header">
      <td><code>html_in_header</code></td>
      <td>
        <p><code><a href="https://bazel.build/docs/build-ref.html#labels">Label</a>; Optional</code></p>
        <p>File to add to <code>&amp;lt;head&amp;gt;</code>.</p>
      </td>
    </tr>
    <tr id="rust_doc.markdown_css">
      <td><code>markdown_css</code></td>
      <td>
        <p><code>List of <a href="https://bazel.build/docs/build-ref.html#labels">labels</a>; Optional; Default is []</code></p>
        <p>CSS files to include via <code>&amp;lt;link&amp;gt;</code> in a rendered
Markdown file.</p>
      </td>
    </tr>
  </tbody>
</table>
          <h3 id="rust_doc_examples">Examples</h3>
          <p>Suppose you have the following directory structure for a Rust library crate:</p>
<pre><code>[workspace]/
    WORKSPACE
    hello_lib/
        BUILD
        src/
            lib.rs
</code></pre>
<p>To build <a href="https://doc.rust-lang.org/book/documentation.html"><code>rustdoc</code></a> documentation for the <code>hello_lib</code> crate, define
a <code>rust_doc</code> rule that depends on the the <code>hello_lib</code> <code>rust_library</code> target:</p>
<pre><code class="lang-python">package(default_visibility = [&quot;//visibility:public&quot;])

load(&quot;@io_bazel_rules_rust//rust:rust.bzl&quot;, &quot;rust_library&quot;, &quot;rust_doc&quot;)

rust_library(
    name = &quot;hello_lib&quot;,
    srcs = [&quot;src/lib.rs&quot;],
)

rust_doc(
    name = &quot;hello_lib_doc&quot;,
    dep = &quot;:hello_lib&quot;,
)
</code></pre>
<p>Running <code>bazel build //hello_lib:hello_lib_doc</code> will build a zip file containing
the documentation for the <code>hello_lib</code> library crate generated by <code>rustdoc</code>.</p>

          <hr>

          <h2 id="rust_doc_test">rust_doc_test</h2>

          <pre>rust_doc_test(<a href="#rust_doc_test.name">name</a>, <a href="#rust_doc_test.dep">dep</a>)</pre>

          <p>Runs Rust documentation tests.</p>


          <h3 id="rust_doc_test_args">Attributes</h3>

<table class="params-table">
  <colgroup>
    <col class="col-param" />
    <col class="col-description" />
  </colgroup>
  <tbody>
    <tr id="rust_doc_test.name">
      <td><code>name</code></td>
      <td>
        <p><code><a href="https://bazel.build/docs/build-ref.html#name">Name</a>; Required</code></p>
        <p>A unique name for this rule.</p>
      </td>
    </tr>
    <tr id="rust_doc_test.dep">
      <td><code>dep</code></td>
      <td>
        <p><code><a href="https://bazel.build/docs/build-ref.html#labels">Label</a>; Required</code></p>
        <p>The label of the target to run documentation tests for.</p>
<p><code>rust_doc_test</code> can run documentation tests for the source files of
<code>rust_library</code> or <code>rust_binary</code> targets.</p>
      </td>
    </tr>
  </tbody>
</table>
          <h3 id="rust_doc_test_examples">Examples</h3>
          <p>Suppose you have the following directory structure for a Rust library crate:</p>
<pre><code>[workspace]/
    WORKSPACE
    hello_lib/
        BUILD
        src/
            lib.rs
</code></pre>
<p>To run <a href="https://doc.rust-lang.org/book/documentation.html#documentation-as-tests">documentation tests</a> for the <code>hello_lib</code> crate, define a
<code>rust_doc_test</code> target that depends on the <code>hello_lib</code> <code>rust_library</code> target:</p>
<pre><code class="lang-python">package(default_visibility = [&quot;//visibility:public&quot;])

load(&quot;@io_bazel_rules_rust//rust:rust.bzl&quot;, &quot;rust_library&quot;, &quot;rust_doc_test&quot;)

rust_library(
    name = &quot;hello_lib&quot;,
    srcs = [&quot;src/lib.rs&quot;],
)

rust_doc_test(
    name = &quot;hello_lib_doc_test&quot;,
    dep = &quot;:hello_lib&quot;,
)
</code></pre>
<p>Running <code>bazel test //hello_lib:hello_lib_doc_test</code> will run all documentation
tests for the <code>hello_lib</code> library crate.</p>

          <hr>

          <h2 id="rust_library">rust_library</h2>

          <pre>rust_library(<a href="#rust_library.name">name</a>, <a href="#rust_library.deps">deps</a>, <a href="#rust_library.data">data</a>, <a href="#rust_library.srcs">srcs</a>, <a href="#rust_library.crate_features">crate_features</a>, <a href="#rust_library.crate_root">crate_root</a>, <a href="#rust_library.crate_type">crate_type</a>, <a href="#rust_library.rustc_flags">rustc_flags</a>)</pre>

          <p>Builds a Rust library crate.</p>


          <h3 id="rust_library_args">Attributes</h3>

<table class="params-table">
  <colgroup>
    <col class="col-param" />
    <col class="col-description" />
  </colgroup>
  <tbody>
    <tr id="rust_library.name">
      <td><code>name</code></td>
      <td>
        <p><code><a href="https://bazel.build/docs/build-ref.html#name">Name</a>; Required</code></p>
        <p>This name will also be used as the name of the library crate built by
this rule.</p>
      </td>
    </tr>
    <tr id="rust_library.deps">
      <td><code>deps</code></td>
      <td>
        <p><code>List of <a href="https://bazel.build/docs/build-ref.html#labels">labels</a>; Optional; Default is []</code></p>
        <p>List of other libraries to be linked to this library target.</p>
<p>These must be <code>rust_library</code> targets.</p>
      </td>
    </tr>
    <tr id="rust_library.data">
      <td><code>data</code></td>
      <td>
        <p><code>List of <a href="https://bazel.build/docs/build-ref.html#labels">labels</a>; Optional; Default is []</code></p>
        <p>List of files used by this rule at runtime.</p>
<p>This attribute can be used to specify any data files that are embedded into
the library, such as via the
<a href="https://doc.rust-lang.org/std/macro.include_str!.html"><code>include_str!</code></a>
macro.</p>
      </td>
    </tr>
    <tr id="rust_library.srcs">
      <td><code>srcs</code></td>
      <td>
        <p><code>List of <a href="https://bazel.build/docs/build-ref.html#labels">labels</a>; Optional; Default is []</code></p>
        <p>List of Rust <code>.rs</code> source files used to build the test.</p>
<p>If <code>srcs</code> contains more than one file, then there must be a file either
named <code>lib.rs</code>. Otherwise, <code>crate_root</code> must be set to the source file that
is the root of the crate to be passed to rustc to build this crate.</p>
      </td>
    </tr>
    <tr id="rust_library.crate_features">
      <td><code>crate_features</code></td>
      <td>
        <p><code>List of strings; Optional; Default is []</code></p>
        <p>List of features to enable for this crate.</p>
<p>Features are defined in the code using the <code>#[cfg(feature = "foo")]</code>
configuration option. The features listed here will be passed to <code>rustc</code>
with <code>--cfg feature="${feature_name}"</code> flags.</p>
      </td>
    </tr>
    <tr id="rust_library.crate_root">
      <td><code>crate_root</code></td>
      <td>
        <p><code><a href="https://bazel.build/docs/build-ref.html#labels">Label</a>; Optional</code></p>
        <p>The file that will be passed to <code>rustc</code> to be used for building
this crate.</p>
<p>If <code>crate_root</code> is not set, then this rule will look for a <code>lib.rs</code> file or
the single file in <code>srcs</code> if <code>srcs</code> contains only one file.</p>
      </td>
    </tr>
    <tr id="rust_library.crate_type">
      <td><code>crate_type</code></td>
      <td>
        <p><code>String; Optional; Default is ''</code></p>
        
      </td>
    </tr>
    <tr id="rust_library.rustc_flags">
      <td><code>rustc_flags</code></td>
      <td>
        <p><code>List of strings; Optional; Default is []</code></p>
        <p>List of compiler flags passed to <code>rustc</code>.</p>
      </td>
    </tr>
  </tbody>
</table>
          <h3 id="rust_library_examples">Examples</h3>
          <p>Suppose you have the following directory structure for a simple Rust library
crate:</p>
<pre><code>[workspace]/
    WORKSPACE
    hello_lib/
        BUILD
        src/
            greeter.rs
            lib.rs
</code></pre>
<p><code>hello_lib/src/greeter.rs</code>:</p>
<pre><code class="lang-rust">pub struct Greeter {
    greeting: String,
}

impl Greeter {
    pub fn new(greeting: &amp;str) -&gt; Greeter {
        Greeter { greeting: greeting.to_string(), }
    }

    pub fn greet(&amp;self, thing: &amp;str) {
        println!(&quot;{} {}&quot;, &amp;self.greeting, thing);
    }
}
</code></pre>
<p><code>hello_lib/src/lib.rs</code>:</p>
<pre><code class="lang-rust">pub mod greeter;
</code></pre>
<p><code>hello_lib/BUILD</code>:</p>
<pre><code class="lang-python">package(default_visibility = [&quot;//visibility:public&quot;])

load(&quot;@io_bazel_rules_rust//rust:rust.bzl&quot;, &quot;rust_library&quot;)

rust_library(
    name = &quot;hello_lib&quot;,
    srcs = [
        &quot;src/greeter.rs&quot;,
        &quot;src/lib.rs&quot;,
    ],
)
</code></pre>
<p>Build the library:</p>
<pre><code>$ bazel build //hello_lib
INFO: Found 1 target...
Target //examples/rust/hello_lib:hello_lib up-to-date:
  bazel-bin/examples/rust/hello_lib/libhello_lib.rlib
INFO: Elapsed time: 1.245s, Critical Path: 1.01s
</code></pre>

          <hr>

          <h2 id="rust_test">rust_test</h2>

          <pre>rust_test(<a href="#rust_test.name">name</a>, <a href="#rust_test.deps">deps</a>, <a href="#rust_test.data">data</a>, <a href="#rust_test.srcs">srcs</a>, <a href="#rust_test.crate_features">crate_features</a>, <a href="#rust_test.crate_root">crate_root</a>, <a href="#rust_test.rustc_flags">rustc_flags</a>)</pre>

          <p>Builds a Rust test crate.</p>


          <h3 id="rust_test_args">Attributes</h3>

<table class="params-table">
  <colgroup>
    <col class="col-param" />
    <col class="col-description" />
  </colgroup>
  <tbody>
    <tr id="rust_test.name">
      <td><code>name</code></td>
      <td>
        <p><code><a href="https://bazel.build/docs/build-ref.html#name">Name</a>; Required</code></p>
        <p>This name will also be used as the name of the binary crate built by
this rule.</p>
      </td>
    </tr>
    <tr id="rust_test.deps">
      <td><code>deps</code></td>
      <td>
        <p><code>List of <a href="https://bazel.build/docs/build-ref.html#labels">labels</a>; Optional; Default is []</code></p>
        <p>List of other libraries to be linked to this library target.</p>
<p>These must be <code>rust_library</code> targets.</p>
      </td>
    </tr>
    <tr id="rust_test.data">
      <td><code>data</code></td>
      <td>
        <p><code>List of <a href="https://bazel.build/docs/build-ref.html#labels">labels</a>; Optional; Default is []</code></p>
        <p>List of files used by this rule at runtime.</p>
<p>This attribute can be used to specify any data files that are embedded into
the library, such as via the
<a href="https://doc.rust-lang.org/std/macro.include_str!.html"><code>include_str!</code></a>
macro.</p>
      </td>
    </tr>
    <tr id="rust_test.srcs">
      <td><code>srcs</code></td>
      <td>
        <p><code>List of <a href="https://bazel.build/docs/build-ref.html#labels">labels</a>; Optional; Default is []</code></p>
        <p>List of Rust <code>.rs</code> source files used to build the test.</p>
<p>If <code>srcs</code> contains more than one file, then there must be a file either
named <code>lib.rs</code>. Otherwise, <code>crate_root</code> must be set to the source file that
is the root of the crate to be passed to rustc to build this crate.</p>
      </td>
    </tr>
    <tr id="rust_test.crate_features">
      <td><code>crate_features</code></td>
      <td>
        <p><code>List of strings; Optional; Default is []</code></p>
        <p>List of features to enable for this crate.</p>
<p>Features are defined in the code using the <code>#[cfg(feature = "foo")]</code>
configuration option. The features listed here will be passed to <code>rustc</code>
with <code>--cfg feature="${feature_name}"</code> flags.</p>
      </td>
    </tr>
    <tr id="rust_test.crate_root">
      <td><code>crate_root</code></td>
      <td>
        <p><code><a href="https://bazel.build/docs/build-ref.html#labels">Label</a>; Optional</code></p>
        <p>The file that will be passed to <code>rustc</code> to be used for building
this crate.</p>
<p>If <code>crate_root</code> is not set, then this rule will look for a <code>lib.rs</code> file or
the single file in <code>srcs</code> if <code>srcs</code> contains only one file.</p>
      </td>
    </tr>
    <tr id="rust_test.rustc_flags">
      <td><code>rustc_flags</code></td>
      <td>
        <p><code>List of strings; Optional; Default is []</code></p>
        <p>List of compiler flags passed to <code>rustc</code>.</p>
      </td>
    </tr>
  </tbody>
</table>
          <h3 id="rust_test_examples">Examples</h3>
          <p>Suppose you have the following directory structure for a Rust library crate
with unit test code in the library sources:</p>
<pre><code>[workspace]/
    WORKSPACE
    hello_lib/
        BUILD
        src/
            lib.rs
</code></pre>
<p><code>hello_lib/src/lib.rs</code>:</p>
<pre><code class="lang-rust">pub struct Greeter {
    greeting: String,
}

impl Greeter {
    pub fn new(greeting: &amp;str) -&gt; Greeter {
        Greeter { greeting: greeting.to_string(), }
    }

    pub fn greet(&amp;self, thing: &amp;str) {
        println!(&quot;{} {}&quot;, &amp;self.greeting, thing);
    }
}

#[cfg(test)]
mod test {
    use super::Greeter;

    #[test]
    fn test_greeting() {
        let hello = Greeter::new(&quot;Hi&quot;);
        assert_eq!(&quot;Hi Rust&quot;, hello.greeting(&quot;Rust&quot;));
    }
}
</code></pre>
<p>To build and run the tests, simply add a <code>rust_test</code> rule with no <code>srcs</code> and
only depends on the <code>hello_lib</code> <code>rust_library</code> target:</p>
<p><code>hello_lib/BUILD</code>:</p>
<pre><code class="lang-python">package(default_visibility = [&quot;//visibility:public&quot;])

load(&quot;@io_bazel_rules_rust//rust:rust.bzl&quot;, &quot;rust_library&quot;, &quot;rust_test&quot;)

rust_library(
    name = &quot;hello_lib&quot;,
    srcs = [&quot;src/lib.rs&quot;],
)

rust_test(
    name = &quot;hello_lib_test&quot;,
    deps = [&quot;:hello_lib&quot;],
)
</code></pre>
<p>Run the test with <code>bazel build //hello_lib:hello_lib_test</code>.</p>
<h3>Example: <code>test</code> directory</h3>
<p>Integration tests that live in the <a href="http://doc.rust-lang.org/book/testing.html#the-tests-directory"><code>tests</code> directory</a>, they are
essentially built as separate crates. Suppose you have the following directory
structure where <code>greeting.rs</code> is an integration test for the <code>hello_lib</code>
library crate:</p>
<pre><code>[workspace]/
    WORKSPACE
    hello_lib/
        BUILD
        src/
            lib.rs
        tests/
            greeting.rs
</code></pre>
<p><code>hello_lib/tests/greeting.rs</code>:</p>
<pre><code class="lang-rust">extern crate hello_lib;

use hello_lib;

#[test]
fn test_greeting() {
    let hello = greeter::Greeter::new(&quot;Hello&quot;);
    assert_eq!(&quot;Hello world&quot;, hello.greeting(&quot;world&quot;));
}
</code></pre>
<p>To build the <code>greeting.rs</code> integration test, simply add a <code>rust_test</code> target
with <code>greeting.rs</code> in <code>srcs</code> and a dependency on the <code>hello_lib</code> target:</p>
<p><code>hello_lib/BUILD</code>:</p>
<pre><code class="lang-python">package(default_visibility = [&quot;//visibility:public&quot;])

load(&quot;@io_bazel_rules_rust//rust:rust.bzl&quot;, &quot;rust_library&quot;, &quot;rust_test&quot;)

rust_library(
    name = &quot;hello_lib&quot;,
    srcs = [&quot;src/lib.rs&quot;],
)

rust_test(
    name = &quot;greeting_test&quot;,
    srcs = [&quot;tests/greeting.rs&quot;],
    deps = [&quot;:hello_lib&quot;],
)
</code></pre>
<p>Run the test with <code>bazel build //hello_lib:hello_lib_test</code>.</p>



        </div>

        <footer class="mdl-mini-footer">
          <div class="mdl-mini-footer__left-section">
            <div class="mdl-logo">Bazel</div>
            <ul class="mdl-mini-footer__link-list">
              <li><a href="http://bazel.io">Home</a></li>
              <li><a href="https://github.com/bazelbuild">GitHub</a></li>
            </ul>
          </div>
        </footer>
      </main>
    </div>
  </body>
</html>
