// Analyze an attribute, create corresponding ActionParam func (a *ApiAnalyzer) AnalyzeAttribute(name, query string, attr map[string]interface{}) (*gen.ActionParam, error) { param := gen.ActionParam{Name: name, QueryName: query, VarName: toVarName(name)} if d, ok := attr["description"]; ok { param.Description = removeBlankLines(d.(string)) } if r, ok := attr["required"]; ok { if r.(bool) { param.Mandatory = true } } if options, ok := attr["options"]; ok { opts, ok := options.(map[string]interface{}) if ok { for n, o := range opts { switch n { case "max": param.Max = int(o.(float64)) case "min": param.Min = int(o.(float64)) case "regexp": param.Regexp = o.(string) } } } } if values, ok := attr["values"]; ok { param.ValidValues = values.([]interface{}) } t := attr["type"].(map[string]interface{}) dataType, err := a.AnalyzeType(t, query) if err != nil { return nil, err } param.Type = dataType switch dataType.(type) { case *gen.ArrayDataType: param.QueryName += "[]" } return ¶m, nil }