package {{ package_name }};

{%- if callback.has_async_methods() %}
import java.util.concurrent.CompletableFuture;

{%- endif %}
{{ self::javadoc_block(callback.doc, "") }}public interface {{ callback.interface_name }} {
{%- for method in callback.sync_methods %}
{%- match method.return_info %}
{%- when Some with (ret) %}
{{ self::javadoc_block(method.doc, "    ") }}    {{ ret.java_type() }} {{ method.name }}({% for param in method.params %}{{ param.java_type }} {{ param.name }}{% if !loop.last %}, {% endif %}{% endfor %});
{%- when None %}
{{ self::javadoc_block(method.doc, "    ") }}    void {{ method.name }}({% for param in method.params %}{{ param.java_type }} {{ param.name }}{% if !loop.last %}, {% endif %}{% endfor %});
{%- endmatch %}
{%- endfor %}
{%- for method in callback.async_methods %}
{%- match method.return_info %}
{%- when Some with (_ret) %}
{{ self::javadoc_block(method.doc, "    ") }}    CompletableFuture<{{ method.boxed_return_type() }}> {{ method.name }}({% for param in method.params %}{{ param.java_type }} {{ param.name }}{% if !loop.last %}, {% endif %}{% endfor %});
{%- when None %}
{{ self::javadoc_block(method.doc, "    ") }}    CompletableFuture<Void> {{ method.name }}({% for param in method.params %}{{ param.java_type }} {{ param.name }}{% if !loop.last %}, {% endif %}{% endfor %});
{%- endmatch %}
{%- endfor %}
}
