From 31406ebe5a48da20cc37209da700e4c4f1bd13dc Mon Sep 17 00:00:00 2001 From: Konstantin Date: Sat, 8 Oct 2016 11:35:26 +0300 Subject: [PATCH 1/3] Default values in structure Swagger default value for golang stucture. format: doc:"default(my_defaul_value)" type MyStruct struct { Template string `json:"template" doc:"default(

Hello, {{ name }}!

)"` Name string `json:"name"` MyNumber int64 `json:"temp" doc:"default(10)"` MyBool bool `json:"bl" doc:"default(true)"` MyFloat float64 `json:"fl" doc:"default(12.1234)"` } --- g_docs.go | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/g_docs.go b/g_docs.go index 9d6ffe9..4d9f279 100644 --- a/g_docs.go +++ b/g_docs.go @@ -770,6 +770,30 @@ func parseObject(d *ast.Object, k string, m *swagger.Schema, realTypes *[]string var tagValues []string stag := reflect.StructTag(strings.Trim(field.Tag.Value, "`")) + + defaultValue := stag.Get("doc") + if defaultValue != ""{ + r, _ := regexp.Compile(`default\((.*)\)`) + if r.MatchString(defaultValue) { + res := r.FindStringSubmatch(defaultValue) + mp.Default = res[1] + switch realType{ + case "int","int64", "int32", "int16", "int8": + mp.Default, _ = strconv.Atoi(res[1]) + case "bool": + mp.Default, _ = strconv.ParseBool(res[1]) + case "float64": + mp.Default, _ = strconv.ParseFloat(res[1], 64) + case "float32": + mp.Default, _ = strconv.ParseFloat(res[1], 32) + default: + mp.Default = res[1] + } + }else{ + ColorLog("[WARN] Invalid default value: %s\n", defaultValue) + } + } + tag := stag.Get("json") if tag != "" { From e8f85a57c27ecbdaecfd147099cbc42945a0c41c Mon Sep 17 00:00:00 2001 From: Konstantin Date: Mon, 10 Oct 2016 17:36:51 +0300 Subject: [PATCH 2/3] Add types error handler (log) the usual warning not panic --- g_docs.go | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/g_docs.go b/g_docs.go index 4d9f279..a0ae1f6 100644 --- a/g_docs.go +++ b/g_docs.go @@ -779,15 +779,24 @@ func parseObject(d *ast.Object, k string, m *swagger.Schema, realTypes *[]string mp.Default = res[1] switch realType{ case "int","int64", "int32", "int16", "int8": - mp.Default, _ = strconv.Atoi(res[1]) + if mp.Default, err = strconv.Atoi(res[1]); err != nil{ + ColorLog("[WARN] Invalid default value type(%s): %s\n",realType, res[1]) + } + case "bool": - mp.Default, _ = strconv.ParseBool(res[1]) + if mp.Default, err = strconv.ParseBool(res[1]); err != nil{ + ColorLog("[WARN] Invalid default value type(%s): %s\n",realType, res[1]) + } case "float64": - mp.Default, _ = strconv.ParseFloat(res[1], 64) + if mp.Default, err = strconv.ParseFloat(res[1], 64); err != nil{ + ColorLog("[WARN] Invalid default value type(%s): %s\n",realType, res[1]) + } case "float32": - mp.Default, _ = strconv.ParseFloat(res[1], 32) - default: - mp.Default = res[1] + if mp.Default, err = strconv.ParseFloat(res[1], 32); err != nil{ + ColorLog("[WARN] Invalid default value type(%s): %s\n",realType, res[1]) + } + default: + mp.Default = res[1] } }else{ ColorLog("[WARN] Invalid default value: %s\n", defaultValue) From 7c7e75435c3968c10b836d18cd23f5ca877fdd69 Mon Sep 17 00:00:00 2001 From: Konstantin Date: Mon, 10 Oct 2016 19:49:33 +0300 Subject: [PATCH 3/3] Update g_docs.go --- g_docs.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/g_docs.go b/g_docs.go index a0ae1f6..6f78329 100644 --- a/g_docs.go +++ b/g_docs.go @@ -769,6 +769,8 @@ func parseObject(d *ast.Object, k string, m *swagger.Schema, realTypes *[]string } var tagValues []string + var err error + stag := reflect.StructTag(strings.Trim(field.Tag.Value, "`")) defaultValue := stag.Get("doc")