Skip to content

Commit 1ac51c7

Browse files
Merge pull request #500 from appwrite/feat-refactor-kotlin-templates
2 parents d7c9ec9 + 3a0974b commit 1ac51c7

File tree

5 files changed

+58
-51
lines changed

5 files changed

+58
-51
lines changed
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{% import 'kotlin/base/utils.twig' as utils%}
2+
return client.call(
3+
"{{ method.method | caseUpper }}",
4+
path,
5+
headers,
6+
params,
7+
responseType = {{ utils.resultType(sdk.namespace, method) }}::class.java,
8+
{% if method.responseModel %}
9+
converter,
10+
{% endif %}
11+
)
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
{% import 'kotlin/base/utils.twig' as utils %}
2+
val idParamName: String? = {% if method.parameters.all | filter(p => p.isUploadID) | length > 0 %}{% for parameter in method.parameters.all | filter(parameter => parameter.isUploadID) %}"{{ parameter.name }}"{% endfor %}{% else %}null{% endif %}
3+
4+
{% for parameter in method.parameters.all %}
5+
{% if parameter.type == 'file' %}
6+
val paramName = "{{ parameter.name }}"
7+
{% endif %}
8+
{% endfor %}
9+
return client.chunkedUpload(
10+
path,
11+
headers,
12+
params,
13+
responseType = {{ utils.resultType(sdk.namespace, method) }}::class.java,
14+
{% if method.responseModel %}
15+
converter,
16+
{% endif %}
17+
paramName,
18+
idParamName,
19+
onProgress,
20+
)
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{% import 'kotlin/base/utils.twig' as utils%}
2+
return client.call(
3+
"{{ method.method | caseUpper }}",
4+
path,
5+
params = params,
6+
responseType = {{ utils.resultType(sdk.namespace, method) }}::class.java
7+
)

templates/kotlin/base/utils.twig

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{% macro parameter(parameter) %}{{ parameter.name | caseCamel }}: {{ parameter.type | typeName }}{% if not parameter.required %}? = null{% endif %}{% endmacro %}
2+
{% macro method_parameters(parameters, consumes) %}
3+
{% if parameters.all|length > 0 %}{% for parameter in parameters.all | filter((param) => not param.isGlobal) %}{{ '\n\t\t' }}{{ _self.parameter(parameter) }}{% if not loop.last %}{{ ',' }}{% endif %}{% endfor %}{% if 'multipart/form-data' in consumes %}, onProgress: ((UploadProgress) -> Unit)? = null{% endif %}{% endif %}
4+
{% endmacro %}
5+
{% macro methodNeedsSecurityParameters(method) %}
6+
{% if (method.type == "webAuth" or method.type == "location") and method.security|length > 0 %}{{ true }}{% else %}{{false}}{% endif %}
7+
{% endmacro %}
8+
{% macro resultType(namespace, method) %}
9+
{% if method.type == "webAuth" %}Bool{% elseif method.type == "location" %}ByteArray{% elseif not method.responseModel or method.responseModel == 'any' %}Any{% else %}{{ namespace | caseDot}}.models.{{method.responseModel | caseUcfirst}}{% endif %}
10+
{% endmacro %}

templates/kotlin/src/main/kotlin/io/appwrite/services/ServiceTemplate.kt.twig

Lines changed: 10 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,4 @@
1-
{% macro parameter(parameter) %}{{ parameter.name | caseCamel }}: {{ parameter.type | typeName }}{% if not parameter.required %}? = null{% endif %}{% endmacro %}
2-
{% macro method_parameters(parameters, consumes) %}
3-
{% if parameters.all|length > 0 %}{% for parameter in parameters.all | filter((param) => not param.isGlobal) %}{{ '\n\t\t' }}{{ _self.parameter(parameter) }}{% if not loop.last %}{{ ',' }}{% endif %}{% endfor %}{% if 'multipart/form-data' in consumes %}, onProgress: ((UploadProgress) -> Unit)? = null{% endif %}{% endif %}
4-
{% endmacro %}
5-
{% macro methodNeedsSecurityParameters(method) %}
6-
{% if (method.type == "webAuth" or method.type == "location") and method.security|length > 0 %}{{ true }}{% else %}{{false}}{% endif %}
7-
{% endmacro %}
8-
{% macro resultType(namespace, method) %}
9-
{% if method.type == "webAuth" %}Bool{% elseif method.type == "location" %}ByteArray{% elseif not method.responseModel or method.responseModel == 'any' %}Any{% else %}{{ namespace | caseDot}}.models.{{method.responseModel | caseUcfirst}}{% endif %}
10-
{% endmacro %}
1+
{% import 'kotlin/base/utils.twig' as utils %}
112
package {{ sdk.namespace | caseDot }}.services
123
import {{ sdk.namespace | caseDot }}.Client
134
import {{ sdk.namespace | caseDot }}.models.*
@@ -52,20 +43,20 @@ class {{ service.name | caseUcfirst }} : Service {
5243
{% for parameter in method.parameters.all | filter((param) => not param.isGlobal) %}
5344
* @param {{ parameter.name | caseCamel }} {{ parameter.description }}
5445
{% endfor %}
55-
* {% if method.type != "webAuth" %}@return [{{ _self.resultType(sdk.namespace, method) }}]{% endif %}
46+
* {% if method.type != "webAuth" %}@return [{{ utils.resultType(sdk.namespace, method) }}]{% endif %}
5647

5748
*/
5849
@JvmOverloads
5950
@Throws({{ spec.title | caseUcfirst }}Exception::class)
60-
suspend fun {{ method.name | caseCamel }}({% if method.type == "webAuth" %}{{ '\n\t\t' }}activity: ComponentActivity{% if method.parameters.all | length > 0 %}, {% endif %}{% endif %}{{ _self.method_parameters(method.parameters, method.consumes) }}{% if method.parameters.all|length > 0 %}{{ '\n\t' }}{% endif %}){% if method.type != "webAuth" %}: {{ _self.resultType(sdk.namespace, method) }}{% endif %} {
51+
suspend fun {{ method.name | caseCamel }}({% if method.type == "webAuth" %}{{ '\n\t\t' }}activity: ComponentActivity{% if method.parameters.all | length > 0 %}, {% endif %}{% endif %}{{ utils.method_parameters(method.parameters, method.consumes) }}{% if method.parameters.all|length > 0 %}{{ '\n\t' }}{% endif %}){% if method.type != "webAuth" %}: {{ utils.resultType(sdk.namespace, method) }}{% endif %} {
6152
val path = "{{ method.path }}"{% for parameter in method.parameters.path %}.replace("{{ '{' ~ parameter.name | caseCamel ~ '}' }}", {{ parameter.name | caseCamel }}){% endfor %}
6253

6354
val params = mutableMapOf<String, Any?>(
6455
{% for parameter in method.parameters.query | merge(method.parameters.body) %}
65-
"{{ parameter.name }}" to {{ parameter.name | caseCamel }}{% if not loop.last or _self.methodNeedsSecurityParameters(method) %},{% endif %}
56+
"{{ parameter.name }}" to {{ parameter.name | caseCamel }}{% if not loop.last or utils.methodNeedsSecurityParameters(method) %},{% endif %}
6657

6758
{% endfor %}
68-
{% if _self.methodNeedsSecurityParameters(method) %}
59+
{% if utils.methodNeedsSecurityParameters(method) %}
6960
{% for node in method.security %}
7061
{% for key,header in node|keys %}
7162
"{{header|caseLower}}" to client.config["{{header|caseLower}}"]{% if not loop.last %},{% endif %}
@@ -116,56 +107,24 @@ class {{ service.name | caseUcfirst }} : Service {
116107
)
117108
}
118109
{% elseif method.type == 'location' %}
119-
return client.call(
120-
"{{ method.method | caseUpper }}",
121-
path,
122-
params = params,
123-
responseType = {{ _self.resultType(sdk.namespace, method) }}::class.java
124-
)
110+
{{ include('kotlin/base/requests/location.twig') }}
125111
{% else %}
126112
val headers = mutableMapOf(
127113
{{ method.headers|map((header, key) => " \"#{key}\" to \"#{header}\"")|join(',\n')|raw }}
128114
)
129115
{% if method.responseModel %}
130-
val converter: (Map<String, Any>) -> {{ _self.resultType(sdk.namespace, method) }} = {
116+
val converter: (Map<String, Any>) -> {{ utils.resultType(sdk.namespace, method) }} = {
131117
{% if method.responseModel == 'any' %}
132118
it
133119
{% else %}
134-
{{ _self.resultType(sdk.namespace, method) }}.from(map = it)
120+
{{ utils.resultType(sdk.namespace, method) }}.from(map = it)
135121
{% endif %}
136122
}
137123
{% endif %}
138124
{% if 'multipart/form-data' in method.consumes %}
139-
val idParamName: String? = {% if method.parameters.all | filter(p => p.isUploadID) | length > 0 %}{% for parameter in method.parameters.all | filter(parameter => parameter.isUploadID) %}"{{ parameter.name }}"{% endfor %}{% else %}null{% endif %}
140-
141-
{% for parameter in method.parameters.all %}
142-
{% if parameter.type == 'file' %}
143-
val paramName = "{{ parameter.name }}"
144-
{% endif %}
145-
{% endfor %}
146-
return client.chunkedUpload(
147-
path,
148-
headers,
149-
params,
150-
responseType = {{ _self.resultType(sdk.namespace, method) }}::class.java,
151-
{% if method.responseModel %}
152-
converter,
153-
{% endif %}
154-
paramName,
155-
idParamName,
156-
onProgress,
157-
)
125+
{{include('kotlin/base/requests/file.twig')}}
158126
{% else %}
159-
return client.call(
160-
"{{ method.method | caseUpper }}",
161-
path,
162-
headers,
163-
params,
164-
responseType = {{ _self.resultType(sdk.namespace, method) }}::class.java,
165-
{% if method.responseModel %}
166-
converter,
167-
{% endif %}
168-
)
127+
{{include('kotlin/base/requests/api.twig')}}
169128
{% endif %}
170129
{% endif %}
171130
}

0 commit comments

Comments
 (0)