From 0a8a33f1db1093963842c6dba61503b2d75f5dde Mon Sep 17 00:00:00 2001 From: Tit Petric Date: Sun, 2 Sep 2018 22:35:39 +0200 Subject: [PATCH] add(codegen): parseJSONText parser --- codegen/codegen.php | 1 + codegen/templates/http_request_inline.tpl | 21 +++++++++++++++++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/codegen/codegen.php b/codegen/codegen.php index 2b9aa6759..6ee927544 100755 --- a/codegen/codegen.php +++ b/codegen/codegen.php @@ -77,6 +77,7 @@ usort($apis, function($a, $b) { $parsers = array( "uint64" => "parseUInt64", "bool" => "parseBool", + "types.JSONText" => "parseJSONText", ); foreach ($generators as $generator) { diff --git a/codegen/templates/http_request_inline.tpl b/codegen/templates/http_request_inline.tpl index 4f13e1267..9548583f8 100644 --- a/codegen/templates/http_request_inline.tpl +++ b/codegen/templates/http_request_inline.tpl @@ -3,12 +3,16 @@ package {package} {load warning.tpl} import ( + "io" "net/http" "encoding/json" "github.com/go-chi/chi" + "github.com/pkg/errors" + "github.com/jmoiron/sqlx/types" ) var _ = chi.URLParam +var _ = types.JSONText{} {foreach $calls as $call} // {name} {call.name} request parameters @@ -25,7 +29,14 @@ func New{name|expose}{call.name|capitalize}() *{name|expose}{call.name|capitaliz } func ({self} *{name|expose}{call.name|capitalize}) Fill(r *http.Request) error { - json.NewDecoder(r.Body).Decode({self}) + var err error + err = json.NewDecoder(r.Body).Decode({self}) + switch { + case err == io.EOF: + err = nil + case err != nil: + err = errors.Wrap(err, "error parsing http request body") + } r.ParseForm() get := map[string]string{} @@ -44,11 +55,17 @@ func ({self} *{name|expose}{call.name|capitalize}) Fill(r *http.Request) error { {self}.{param.name|expose} = {if ($param.type !== "string")}{$parsers[$param.type]}({/if}chi.URLParam(r, "{param.name}"){if ($param.type !== "string")}){/if} {elseif substr($param.type, 0, 2) !== '[]'} if val, ok := {method|strtolower}["{param.name}"]; ok { +{if $param.type === "types.JSONText"} + if {self}.{param.name|expose}, err = {$parsers[$param.type]}(val); err != nil { + return err + } +{else} {self}.{param.name|expose} = {if ($param.type !== "string")}{$parsers[$param.type]}(val){else}val{/if} +{/if} }{/if} {/foreach} {/foreach}{newline} - return nil + return err } var _ RequestFiller = New{name|expose}{call.name|capitalize}()