<!-- Generated with Stardoc: http://skydoc.bazel.build -->

<a name="#example_rule"></a>

## example_rule

<pre>
example_rule(<a href="#example_rule-name">name</a>, <a href="#example_rule-first">first</a>, <a href="#example_rule-second">second</a>)
</pre>

Small example of rule using a markdown template.

**ATTRIBUTES**


| Name  | Description | Type | Mandatory | Default |
| :-------------: | :-------------: | :-------------: | :-------------: | :-------------: |
| <a name="example_rule-name"></a>name |  A unique name for this target.   | <a href="https://bazel.build/concepts/labels#target-names">Name</a> | required |  |
| <a name="example_rule-first"></a>first |  This is the first attribute   | String | optional | "" |
| <a name="example_rule-second"></a>second |  -   | String | optional | "2" |


<a name="#ExampleProviderInfo"></a>

## ExampleProviderInfo

<pre>
ExampleProviderInfo(<a href="#ExampleProviderInfo-foo">foo</a>, <a href="#ExampleProviderInfo-bar">bar</a>, <a href="#ExampleProviderInfo-baz">baz</a>)
</pre>

Small example of provider using a markdown template.

**FIELDS**


| Name  | Description |
| :-------------: | :-------------: |
| <a name="ExampleProviderInfo-foo"></a>foo |  A string representing foo    |
| <a name="ExampleProviderInfo-bar"></a>bar |  A string representing bar    |
| <a name="ExampleProviderInfo-baz"></a>baz |  A string representing baz    |


<a name="#example_function"></a>

## example_function

<pre>
example_function(<a href="#example_function-foo">foo</a>, <a href="#example_function-bar">bar</a>)
</pre>

Small example of function using a markdown template.

**PARAMETERS**


| Name  | Description | Default Value |
| :-------------: | :-------------: | :-------------: |
| <a name="example_function-foo"></a>foo |  This parameter does foo related things.   |  none |
| <a name="example_function-bar"></a>bar |  This parameter does bar related things.<br><br>For example, it does things that require **multiple paragraphs** to explain.<br><br>Note: we should preserve the nested indent in the following code:<br><br><pre><code>json {     "key": "value" } </code></pre>   |  <code>"bar"</code> |


<a name="#example_aspect"></a>

## example_aspect

<pre>
example_aspect(<a href="#example_aspect-name">name</a>, <a href="#example_aspect-first">first</a>, <a href="#example_aspect-second">second</a>)
</pre>

Small example of aspect using a markdown template.

**ASPECT ATTRIBUTES**


| Name | Type |
| :-------------: | :-------------: |
| deps| String |
| attr_aspect| String |


**ATTRIBUTES**


| Name  | Description | Type | Mandatory | Default |
| :-------------: | :-------------: | :-------------: | :-------------: | :-------------: |
| <a name="example_aspect-name"></a>name |  A unique name for this target.   | <a href="https://bazel.build/concepts/labels#target-names">Name</a> | required |   |
| <a name="example_aspect-first"></a>first |  -   | <a href="https://bazel.build/concepts/labels">Label</a> | required |   |
| <a name="example_aspect-second"></a>second |  This is the second attribute.   | String | optional |  "" |


