Skip to content

Commit d7c9ec9

Browse files
authored
Merge pull request #498 from appwrite/feat-refactor-swift-templates
feat: refactor swift templates
2 parents af7dd08 + 8f31d40 commit d7c9ec9

File tree

6 files changed

+78
-74
lines changed

6 files changed

+78
-74
lines changed

templates/swift/Sources/Services/Service.swift.twig

Lines changed: 5 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
{% macro methodNeedsSecurityParameters(method) %}
2-
{% if (method.type == "webAuth" or method.type == "location") and method.security|length > 0 %}{{ true }}{% else %}{{false}}{% endif %}
3-
{% endmacro %}
41
{% macro resultType(spec, method) %}
52
{% if method.type == "webAuth" %}Bool{% elseif method.type == "location" %}ByteBuffer{% elseif not method.responseModel or method.responseModel == 'any' %}Any{% else %}{{spec.title | caseUcfirst}}Models.{{method.responseModel | caseUcfirst}}{% endif %}
63
{% endmacro %}
@@ -51,53 +48,11 @@ open class {{ service.name | caseUcfirst }}: Service {
5148
onProgress: ((UploadProgress) -> Void)? = nil
5249
{% endif %}
5350
) async throws -> {{ _self.resultType(spec, method) }} {
54-
{% if method.parameters.path %} var{% else %} let{% endif %} path: String = "{{ method.path }}"
55-
{% for parameter in method.parameters.path %}
56-
path = path.replacingOccurrences(
57-
of: "{{ '{' }}{{ parameter.name | caseCamel }}{{ '}' }}",
58-
with: {% if method.parameters.path %}{% if parameter.isGlobal %}self.{% endif %}{{ parameter.name | caseCamel | escapeKeyword }}{% else %}""{% endif %}
59-
60-
)
61-
{% endfor %}
62-
{% if method.parameters.query or method.parameters.body or method.parameters.formData or _self.methodNeedsSecurityParameters(method) %}
63-
{% if 'multipart/form-data' in method.consumes %}var{% else %}let{% endif %} params: [String: Any?] = [
64-
{% else %}
65-
let params: [String: Any?] = [:]
66-
{% endif %}
67-
{% for parameter in method.parameters.query | merge(method.parameters.body) %}
68-
"{{ parameter.name }}": {% if parameter.isGlobal %}self.{% endif %}{{ parameter.name | caseCamel | escapeKeyword }}{% if not loop.last or _self.methodNeedsSecurityParameters(method) %},{% endif %}
69-
70-
{% endfor %}
71-
{% if _self.methodNeedsSecurityParameters(method) %}
72-
{% for node in method.security %}
73-
{% for key,header in node|keys %}
74-
"{{header|caseLower}}": client.config["{{header|caseLower}}"]{% if not loop.last %},{% endif %}
75-
76-
{% endfor %}
77-
{% endfor %}
78-
{% endif %}
79-
{% if method.parameters.query or method.parameters.body or method.parameters.formData or _self.methodNeedsSecurityParameters(method) %}
80-
]
81-
{% endif %}
51+
{{include('swift/base/params.twig')}}
8252
{% if method.type == 'webAuth' %}
83-
let query = "?\(client.parametersToQueryString(params: params))"
84-
let url = URL(string: client.endPoint + path + query)!
85-
let callbackScheme = "appwrite-callback-\(client.config["project"] ?? "")"
86-
let group = DispatchGroup()
87-
88-
group.enter()
89-
WebAuthComponent.authenticate(url: url, callbackScheme: callbackScheme) { result in
90-
group.leave()
91-
}
92-
group.wait()
93-
94-
return true
53+
{{include('swift/base/requests/OAuth.twig')}}
9554
{% elseif method.type == 'location' %}
96-
return try await client.call(
97-
method: "{{ method.method | caseUpper }}",
98-
path: path,
99-
params: params
100-
)
55+
{{include('swift/base/requests/location.twig')}}
10156
{% else %}
10257
{% if 'multipart/form-data' in method.consumes %}var{% else %}let{% endif %} headers: [String: String] = [
10358
{{ method.headers|map((header, key) => " \"#{key}\": \"#{header}\"")|join(',\n')|raw }}
@@ -112,33 +67,9 @@ open class {{ service.name | caseUcfirst }}: Service {
11267
}
11368
{% endif %}
11469
{% if 'multipart/form-data' in method.consumes %}
115-
let 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 %}nil{% endif %}
116-
117-
{% for parameter in method.parameters.all %}
118-
{% if parameter.type == 'file' %}
119-
let paramName = "{{ parameter.name }}"
120-
{% endif %}
121-
{% endfor %}
122-
return try await client.chunkedUpload(
123-
path: path,
124-
headers: &headers,
125-
params: &params,
126-
paramName: paramName,
127-
idParamName: idParamName,
128-
{% if method.responseModel %}
129-
converter: converter,
130-
{% endif %}
131-
onProgress: onProgress
132-
)
70+
{{include('swift/base/requests/file.twig')}}
13371
{% else %}
134-
return try await client.call(
135-
method: "{{ method.method | caseUpper }}",
136-
path: path,
137-
headers: headers,
138-
params: params{% if method.responseModel %},
139-
converter: converter
140-
{% endif %}
141-
)
72+
{{include('swift/base/requests/api.twig')}}
14273
{% endif %}
14374
{% endif %}
14475
}

templates/swift/base/params.twig

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
{% macro methodNeedsSecurityParameters(method) %}
2+
{% if (method.type == "webAuth" or method.type == "location") and method.security|length > 0 %}{{ true }}{% else %}{{false}}{% endif %}
3+
{% endmacro %}
4+
{% if method.parameters.path %} var{% else %} let{% endif %} path: String = "{{ method.path }}"
5+
{% for parameter in method.parameters.path %}
6+
path = path.replacingOccurrences(
7+
of: "{{ '{' }}{{ parameter.name | caseCamel }}{{ '}' }}",
8+
with: {% if method.parameters.path %}{% if parameter.isGlobal %}self.{% endif %}{{ parameter.name | caseCamel | escapeKeyword }}{% else %}""{% endif %}
9+
)
10+
{% endfor %}
11+
{% if method.parameters.query or method.parameters.body or method.parameters.formData or _self.methodNeedsSecurityParameters(method) %}
12+
{% if 'multipart/form-data' in method.consumes %}var{% else %}let{% endif %} params: [String: Any?] = [
13+
{% else %}
14+
let params: [String: Any?] = [:]
15+
{% endif %}
16+
{% for parameter in method.parameters.query | merge(method.parameters.body) %}
17+
"{{ parameter.name }}": {% if parameter.isGlobal %}self.{% endif %}{{ parameter.name | caseCamel | escapeKeyword }}{% if not loop.last or _self.methodNeedsSecurityParameters(method) %},{% endif %}
18+
19+
{% endfor %}
20+
{% if _self.methodNeedsSecurityParameters(method) %}
21+
{% for node in method.security %}
22+
{% for key,header in node|keys %}
23+
"{{header|caseLower}}": client.config["{{header|caseLower}}"]{% if not loop.last %},{% endif %}
24+
25+
{% endfor %}
26+
{% endfor %}
27+
{% endif %}
28+
{% if method.parameters.query or method.parameters.body or method.parameters.formData or _self.methodNeedsSecurityParameters(method) %}
29+
]
30+
{% endif %}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
let query = "?\(client.parametersToQueryString(params: params))"
2+
let url = URL(string: client.endPoint + path + query)!
3+
let callbackScheme = "appwrite-callback-\(client.config["project"] ?? "")"
4+
let group = DispatchGroup()
5+
6+
group.enter()
7+
WebAuthComponent.authenticate(url: url, callbackScheme: callbackScheme) { result in
8+
group.leave()
9+
}
10+
group.wait()
11+
12+
return true
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
return try await client.call(
2+
method: "{{ method.method | caseUpper }}",
3+
path: path,
4+
headers: headers,
5+
params: params{% if method.responseModel %},
6+
converter: converter
7+
{% endif %}
8+
)
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
let 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 %}nil{% endif %}
2+
3+
{% for parameter in method.parameters.all %}
4+
{% if parameter.type == 'file' %}
5+
let paramName = "{{ parameter.name }}"
6+
{% endif %}
7+
{% endfor %}
8+
return try await client.chunkedUpload(
9+
path: path,
10+
headers: &headers,
11+
params: &params,
12+
paramName: paramName,
13+
idParamName: idParamName,
14+
{% if method.responseModel %}
15+
converter: converter,
16+
{% endif %}
17+
onProgress: onProgress
18+
)
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
return try await client.call(
2+
method: "{{ method.method | caseUpper }}",
3+
path: path,
4+
params: params
5+
)

0 commit comments

Comments
 (0)