async-iter-ext 0.3.0

Async iterator methods and async methods for option and result.
Documentation
[git]
commit_parsers = [
    { message = "^feat", group = "<!-- 0 -->โ›ฐ๏ธ  Features" },
    { message = "^fix", group = "<!-- 1 -->๐Ÿ› Bug Fixes" },
    { message = "^doc", group = "<!-- 3 -->๐Ÿ“š Documentation" },
    { message = "^perf", group = "<!-- 4 -->โšก Performance" },
    { message = "^refactor\\(clippy\\)", skip = true },
    { message = "^refactor", group = "<!-- 2 -->๐Ÿšœ Refactor" },
    { message = "^style", group = "<!-- 5 -->๐ŸŽจ Styling" },
    { message = "^test", group = "<!-- 6 -->๐Ÿงช Testing" },
    { message = "^chore\\(release\\)", skip = true },
    { message = "^chore\\(deps.*\\)", skip = true },
    { message = "^chore\\(pr\\)", skip = true },
    { message = "^chore\\(pull\\)", skip = true },
    { message = "^chore|^ci", group = "<!-- 7 -->โš™๏ธ Miscellaneous Tasks" },
    { body = ".*security", group = "<!-- 8 -->๐Ÿ›ก๏ธ Security" },
    { message = "^revert", group = "<!-- 9 -->โ—€๏ธ Revert" },
]
sort_commits = "newest"
conventional_commits = true
filter_unconventional = false

[changelog]
trim = true
header = """
# Changelog
"""

body = """
{%- macro remote_url() -%}
  https://github.com/{{ remote.github.owner }}/{{ remote.github.repo }}
{%- endmacro -%}

{% macro print_commit(commit) -%}
    - {% if commit.scope %}*({{ commit.scope }})* {% endif %}\
        {% if commit.breaking %}[**breaking**] {% endif %}\
        {{ commit.message | upper_first }} - \
        {% if commit.remote.username %} by @{{ commit.remote.username }}{%- endif -%}\
        {% if commit.remote.pr_number %} in \
        [#{{ commit.remote.pr_number }}]({{ self::remote_url() }}/pull/{{ commit.remote.pr_number }}) \
        {% else %} \
        ([{{ commit.id | truncate(length=7, end="") }}]({{ self::remote_url() }}/commit/{{ commit.id }}))\
        {%- endif -%}
{% endmacro -%}

{% if version %}\
    {% if previous.version %}\
        ## [{{ version | trim_start_matches(pat="v") }}]\
          ({{ self::remote_url() }}/compare/{{ previous.version }}..{{ version }}) - {{ timestamp | date(format="%Y-%m-%d") }}
    {% else %}\
        ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }}
    {% endif %}\
{% else %}\
    ## [unreleased]
{% endif %}\

{% for group, commits in commits | group_by(attribute="group") %}
    ### {{ group | striptags | trim | upper_first }}
    {% for commit in commits | filter(attribute="scope") | sort(attribute="scope") %}
      {{ self::print_commit(commit=commit) }}
    {%- endfor %}
    {% for commit in commits %}
      {%- if not commit.scope -%}
        {{ self::print_commit(commit=commit) }}
      {% endif -%}
    {% endfor -%}
{% endfor -%}


{%- if github.contributors | filter(attribute="is_first_time", value=true) | length != 0 %}
  ## New Contributors
{%- endif -%}

{% for contributor in github.contributors | filter(attribute="is_first_time", value=true) %}
  * @{{ contributor.username }} made their first contribution
    {%- if contributor.pr_number %} in \
      [#{{ contributor.pr_number }}]({{ self::remote_url() }}/pull/{{ contributor.pr_number }}) \
    {%- endif %}
{%- endfor %}\n

"""
footer = """

<!-- generated by git-cliff -->
"""