Skip to content

Commit 31eab0e

Browse files
authored
Merge pull request #10 from svix/jplatte/finish-go-tpl
2 parents 8b6f60f + be56a5b commit 31eab0e

File tree

1 file changed

+93
-13
lines changed

1 file changed

+93
-13
lines changed

templates/svix_lib_resource.go.jinja

+93-13
Original file line numberDiff line numberDiff line change
@@ -28,48 +28,128 @@ type {{ resource_type_name }} struct {
2828
{% endfor -%}
2929

3030
{% for op in resource.operations -%}
31+
{% set op_name = op.name | to_upper_camel_case %}
3132
{% set has_query_params = op.query_params | length > 0 -%}
3233
{% set has_required_query_params =
3334
op.query_params | selectattr("required") | length > 0 -%}
3435
{% set has_header_params = op.header_params | length > 0 -%}
36+
{% if op.request_body_schema_name is defined -%}
37+
{% set request_body_param = op.request_body_schema_name | to_lower_camel_case -%}
38+
{% endif -%}
39+
40+
{# return type -#}
3541
{% if op.response_body_schema_name is defined -%}
3642
{% set return_type -%}
3743
(*{{ op.response_body_schema_name | to_upper_camel_case }}, error)
3844
{%- endset -%}
3945
{% else -%}
40-
{% set response_type %}error{% endset -%}
46+
{% set return_type %}error{% endset -%}
4147
{% endif -%}
42-
{{ op.description | to_doc_comment(style="go") }}
43-
func (self *{{ resource_type_name }}) {{ op.name | to_upper_camel_case }}(
44-
{# path parameters -#}
48+
49+
{# separated because we might need it twice: arguments except PostOptions #}
50+
{% set common_args -%}
51+
ctx context.Context,
52+
53+
{#- path parameters #}
4554
{% for p in op.path_params -%}
4655
{{ p | to_lower_camel_case }} string,
4756
{% endfor -%}
4857

4958
{# body parameter interface -#}
5059
{% if op.request_body_schema_name is defined -%}
51-
{% set field_name = op.request_body_schema_name | to_lower_camel_case -%}
52-
{{ field_name }} *{{ op.request_body_schema_name }},
60+
{{ request_body_param }} *{{ op.request_body_schema_name }},
5361
{% endif -%}
5462

5563
{# query parameters -#}
5664
{% if has_query_params -%}
5765
{% set field_ty -%}
58-
{{ resource_type_name }}{{ op.name | to_upper_camel_case }}Options
66+
{{ resource_type_name }}{{ op_name }}Options
5967
{%- endset -%}
6068
{% if not has_required_query_params -%}
6169
{% set field_ty %}*{{ field_ty }}{% endset -%}
6270
{% endif -%}
6371
options {{ field_ty }},
6472
{% endif -%}
73+
{% endset -%}
74+
75+
{# separated because it goes in a different place depending on the operation: inner API call #}
76+
{% set main_impl -%}
77+
req := self.api.{{ resource_type_name }}API.{{ op.id | to_upper_camel_case }}(
78+
ctx,
79+
{% for p in op.path_params -%}
80+
{{ p | to_lower_camel_case }},
81+
{% endfor -%}
82+
)
83+
{#- body -#}
84+
{% if op.request_body_schema_name is defined -%}
85+
.{{ op.request_body_schema_name }}(*{{ request_body_param }})
86+
{% endif %}
87+
88+
{# query params -#}
89+
{% if has_query_params -%}
90+
if options != nil {
91+
{% for p in op.query_params -%}
92+
{% set name = p.name | to_upper_camel_case -%}
93+
if options.{{ name }} != nil {
94+
req = req.{{ name }}(*options.{{ name }})
95+
}
96+
{% endfor -%}
97+
}
98+
99+
{% endif -%}
65100

66-
{# PostOptions -#}
101+
{# idempotency -#}
67102
{% if has_header_params -%}
68-
{# for now, only idempotency-key is supported in header params -#}
69-
options *PostOptions,
103+
if options != nil {
104+
if options.IdempotencyKey != nil {
105+
req = req.IdempotencyKey(*options.IdempotencyKey)
106+
}
107+
}
108+
109+
{% endif -%}
110+
111+
{% if op.response_body_schema_name is defined -%}
112+
ret, res, err := req.Execute()
113+
if err != nil {
114+
return nil, wrapError(err, res)
115+
}
116+
117+
return ret, nil
118+
{% else -%}
119+
res, err := req.Execute()
120+
return wrapError(err, res)
70121
{% endif -%}
122+
{% endset -%}
123+
124+
{# regular method #}
125+
{{ op.description | to_doc_comment(style="go") }}
126+
func (self *{{ resource_type_name }}) {{ op_name }}(
127+
{{ common_args -}}
71128
) {{ return_type }} {
72-
// TODO
73-
}{% if not loop.last %}{{ "\n" }}{% endif %}
74-
{% endfor -%}
129+
{% if has_header_params -%}
130+
return self.{{ op_name }}WithOptions(
131+
ctx,
132+
{% for p in op.path_params -%}
133+
{{ p | to_lower_camel_case }},
134+
{% endfor -%}
135+
{% if op.request_body_schema_name is defined -%}
136+
{{ op.request_body_schema_name | to_lower_camel_case }},
137+
{% endif -%}
138+
nil,
139+
);
140+
{% else -%}
141+
{{ main_impl -}}
142+
{% endif -%}
143+
}
75144

145+
{# if op has PostOptions: separate OpWithOptions method #}
146+
{% if has_header_params -%}
147+
{{ op.description | to_doc_comment(style="go") }}
148+
func (self *{{ resource_type_name }}) {{ op_name }}WithOptions(
149+
{{ common_args -}}
150+
options *PostOptions,
151+
) {{ return_type }} {
152+
{{ main_impl -}}
153+
}
154+
{% endif %}
155+
{% endfor -%}

0 commit comments

Comments
 (0)