<div class="sidebar-elems">
    {% if is_crate %}
        <ul class="block"> {# #}
            <li><a id="all-types" href="all.html">All Items</a></li> {# #}
        </ul>
    {% endif %}

    {% if self.should_render_blocks() %}
        <section id="rustdoc-toc">
            {% if !title.is_empty() %}
            <h2 class="location"> {# #}
                <a href="#">{{title_prefix}}{{title|wrapped|safe}}</a> {# #}
            </h2>
            {% endif %}
            {% for block in blocks %}
                {% if block.should_render() %}
                    {% if !block.heading.name.is_empty() %}
                        <h3> {# #}
                            <a href="#{{block.heading.href|safe}}">{{block.heading.name|wrapped|safe}}</a> {# #}
                        </h3>
                    {% endif %}
                    {% if !block.links.is_empty() %}
                        <ul class="block{% if !block.class.is_empty() +%} {{+block.class}}{% endif %}">
                            {% for link in block.links %}
                                <li> {# #}
                                    <a href="#{{link.href|safe}}" title="{{link.name}}">
                                        {% match link.name_html %}
                                            {% when Some with (html) %}
                                                {{html|safe}}
                                            {% else %}
                                                {{link.name}}
                                        {% endmatch %}
                                    </a>
                                    {% if !link.children.is_empty() %}
                                        <ul>
                                            {% for child in link.children %}
                                                <li><a href="#{{child.href|safe}}" title="{{child.name}}">
                                                    {% match child.name_html %}
                                                        {% when Some with (html) %}
                                                            {{html|safe}}
                                                        {% else %}
                                                            {{child.name}}
                                                    {% endmatch %}
                                                </a></li>
                                            {% endfor %}
                                        </ul>
                                    {% endif %}
                                </li>
                            {% endfor %}
                        </ul>
                    {% endif %}
                {% endif %}
            {% endfor %}
        </section>
    {% endif %}
    <div id="rustdoc-modnav">
    {% if !path.is_empty() %}
        <h2{% if parent_is_crate +%} class="in-crate"{% endif %}> {# #}
            <a href="{% if is_mod %}../{% endif %}index.html">In {{+ path|wrapped|safe}}</a> {# #}
        </h2>
    {% endif %}
    </div> {# #}
</div>
