1
- {% macro sub_schema(property ) %}{% if property .sub_schema %}{% if property .type == ' array' %}List< {{property .sub_schema | caseUcfirst }}>{% else %}{{property .sub_schema | caseUcfirst }}{% endif %}{% else %}{% if property .type == ' object' and property .additionalProperties %}Map<String , Any >{% else %}{{property | typeName }}{% endif %}{% endif %}{% endmacro %}
2
1
package {{ sdk .namespace | caseDot }}.models
3
2
4
3
import com.google.gson.annotations.SerializedName
4
+ import io.appwrite.extensions.jsonCast
5
5
6
6
/**
7
7
* {{ definition .description }}
8
8
*/
9
- data class {{ definition . name | caseUcfirst }}(
10
- {% for property in definition .properties %}
9
+ {% if definition . properties | length != 0 or definition . additionalProperties %} data {% endif %} class {{ definition | modelType( spec ) | raw }}(
10
+ {%~ for property in definition .properties %}
11
11
/**
12
12
* {{ property .description }}
13
- *
14
13
*/
15
14
@SerializedName("{{ property .name | escapeKeyword | escapeDollarSign }}")
16
- {% if property .required %}val{% else%}var{% endif %} {{ property .name | escapeKeyword | removeDollarSign }}: {{_self.sub_schema (property )}}{% if not property .required %}?{% endif %}{% if not loop .last or (loop .last and definition .additionalProperties ) %},{{ " \n" }}{% endif %}
15
+ {% if property .required -%} val
16
+ {%- else -%} var
17
+ {%- endif %} {{ property .name | escapeKeyword | removeDollarSign }}: {{ property | propertyType(spec ) | raw }},
17
18
18
- {% endfor %}
19
- {% if definition .additionalProperties %}
20
- val data: Map<String , Any >
21
- {% endif %}
19
+ {%~ endfor %}
20
+ {%~ if definition .additionalProperties %}
21
+ /**
22
+ * Additional properties
23
+ */
24
+ @SerializedName("data")
25
+ val data: T
26
+ {%~ endif %}
22
27
) {
23
- companion object {
24
- @Suppress("UNCHECKED_CAST")
25
- fun from(map: Map<String , Any >) = {{ definition .name | caseUcfirst }}(
26
- {% for property in definition .properties %}
27
- {{ property.name | escapeKeyword | removeDollarSign }} = {% if property.sub_schema %}{% if property.type == 'array' %}(map["{{ property.name | escapeDollarSign }}"] as List<Map<String, Any>>).map { {{property.sub_schema | caseUcfirst}}.from(map = it) }{% else %}{{property.sub_schema | caseUcfirst}}.from(map = map["{{property.name | escapeDollarSign }}"] as Map<String, Any>){% endif %}{% else %}{% if property.type == "integer" or property.type == "number" %}({% endif %}map["{{ property.name | escapeDollarSign }}"]{% if property.type == "integer" or property.type == "number" %} as{% if not property.required %}?{% endif %} Number){% endif %}{% if property.type == "integer" %}{% if not property.required %}?{% endif %}.toLong(){% elseif property.type == "number" %}{% if not property.required %}?{% endif %}.toDouble(){% else %} as{% if not property.required %}?{% endif %} {{ _self.sub_schema(property) }}{% endif %}{% endif %}{% if not loop.last or (loop.last and definition.additionalProperties) %},{% endif %}
28
-
29
- {% endfor %}
30
- {% if definition .additionalProperties %}
31
- data = map
32
- {% endif %}
33
- )
34
- }
35
-
36
28
fun toMap(): Map<String , Any > = mapOf(
37
- {% for property in definition .properties %}
38
- "{{ property .name | escapeDollarSign }}" to {% if property .sub_schema %}{% if property .type == ' array' %}{{property .name | escapeKeyword | removeDollarSign }}.map { it.toMap() }{% else %}{{property .name | escapeKeyword | removeDollarSign }}.toMap(){% endif %}{% else %}{{property .name | escapeKeyword | removeDollarSign }}{% endif %} as Any{% if not loop .last or (loop .last and definition .additionalProperties ) %},{% endif %}
39
-
40
- {% endfor %}
41
- {% if definition .additionalProperties %}
42
- "data" to data
43
- {% endif %}
29
+ {%~ for property in definition .properties %}
30
+ "{{ property .name | escapeDollarSign }}" to {% if property .sub_schema %}{% if property .type == ' array' %}{{property .name | escapeKeyword | removeDollarSign }}.map { it.toMap() }{% else %}{{property .name | escapeKeyword | removeDollarSign }}.toMap(){% endif %}{% else %}{{property .name | escapeKeyword | removeDollarSign }}{% endif %} as Any,
31
+ {%~ endfor %}
32
+ {%~ if definition .additionalProperties %}
33
+ "data" to data!!.jsonCast(to = Map::class.java)
34
+ {%~ endif %}
44
35
)
45
- {% if definition .additionalProperties %}
46
36
47
- fun <T > convertTo(fromJson: (Map<String , Any >) -> T): T {
48
- return fromJson(data)
49
- }
50
- {% endif %}
51
- {% for property in definition .properties %}
52
- {% if property .sub_schema %}
53
- {% for def in spec .definitions %}
54
- {% if def .name == property .sub_schema and def .additionalProperties and property .type == ' array' %}
37
+ companion object {
38
+ {%~ if definition .name | hasGenericType(spec ) %}
39
+ operator fun invoke(
40
+ {%~ for property in definition .properties %}
41
+ {{ property .name | escapeKeyword | removeDollarSign }}: {{ property | propertyType(spec , ' Map<String, Any>' ) | raw }},
42
+ {%~ endfor %}
43
+ {%~ if definition .additionalProperties %}
44
+ data: Map<String , Any >
45
+ {%~ endif %}
46
+ ) = {{ definition | modelType(spec , ' Map<String, Any>' ) | raw }}(
47
+ {%~ for property in definition .properties %}
48
+ {{ property .name | escapeKeyword | removeDollarSign }},
49
+ {%~ endfor %}
50
+ {%~ if definition .additionalProperties %}
51
+ data
52
+ {%~ endif %}
53
+ )
54
+ {%~ endif %}
55
55
56
- fun <T > convertTo(fromJson: (Map<String , Any >) -> T) =
57
- {{property .name | removeDollarSign }}.map { it.convertTo(fromJson = fromJson) }
58
- {% endif %}
59
- {% endfor %}
60
- {% endif %}
61
- {% endfor %}
56
+ @Suppress("UNCHECKED_CAST")
57
+ fun {% if definition .name | hasGenericType(spec ) %}<T > {% endif %}from(
58
+ map: Map<String , Any >,
59
+ {%~ if definition .name | hasGenericType(spec ) %}
60
+ nestedType: Class<T >
61
+ {%~ endif %}
62
+ ) = {{ definition | modelType(spec ) | raw }}(
63
+ {%~ for property in definition .properties %}
64
+ {{ property.name | escapeKeyword | removeDollarSign }} = {% if property.sub_schema %}{% if property.type == 'array' %}(map["{{ property.name | escapeDollarSign }}"] as List<Map<String, Any>>).map { {{ property.sub_schema | caseUcfirst }}.from(map = it{% if definition.name | hasGenericType(spec) %}, nestedType{% endif %}) }{% else %}{{ property.sub_schema | caseUcfirst }}.from(map = map["{{property.name | escapeDollarSign }}"] as Map<String, Any>{% if definition.name | hasGenericType(spec) %}, nestedType{% endif %}){% endif %}{% else %}{% if property.type == "integer" or property.type == "number" %}({% endif %}map["{{ property.name | escapeDollarSign }}"]{% if property.type == "integer" or property.type == "number" %} as{% if not property.required %}?{% endif %} Number){% endif %}{% if property.type == "integer" %}{% if not property.required %}?{% endif %}.toLong(){% elseif property.type == "number" %}{% if not property.required %}?{% endif %}.toDouble(){% else %} as{% if not property.required %}?{% endif %} {{ property | propertyType(spec) | raw }}{% endif %}{% endif %},
65
+ {%~ endfor %}
66
+ {%~ if definition .additionalProperties %}
67
+ data = map.jsonCast(to = nestedType)
68
+ {%~ endif %}
69
+ )
70
+ }
62
71
}
0 commit comments