func typeToItems(pidl *idl.Idl, t *idl.Type) *swagger2.ItemsDef { it := new(swagger2.ItemsDef) it.Ref = "" if t.IsPrimitive() { it.Format = t.String() if t.IsInt() || t.IsByte() { it.Type = "integer" it.Format = "int32" if t.Name == "int64" { if swagInt && restful { // Swagger style int64 it.Format = "int64" } else { // Babel style int64 it.Type = "string" // ??? Babel quotes large integers to avoid precision loss in JavaScript it.Format = "int64" // SWAGGER-CLARIFICATION: is format int64 legal with type string? } } } else if t.IsFloat() { it.Type = "number" it.Format = "float" if t.Name == "float64" { it.Format = "double" } } else if t.IsBool() { it.Type = "boolean" it.Format = "" } else if t.IsDatetime() { it.Type = "string" it.Format = "date-time" } else if t.IsDecimal() { it.Type = "string" it.Format = "" } else if t.IsString() || t.IsChar() { it.Type = "string" it.Format = "" } } else if t.IsBinary() { it.Type = "string" it.Format = "byte" } else if t.IsMap() { it.Type = "object" // hmmm....what to do if keytype is not string? // SWAGGER-CLARIFICATION: Does swagger require all key types to be strings? it.AdditionalProperties = typeToItems(pidl, t.ValueType) } else if t.IsList() { it.Type = "array" it.Format = "" it.Items = typeToItems(pidl, t.ValueType) } else if t.IsEnum(pidl) { // SWAGGER-BUG: Enums cannot be delared in a schema it.Type = "string" it.Format = "" it.Enum = make([]interface{}, 0) e := pidl.FindEnum(t.Name) if e != nil { for _, x := range e.Values { it.Enum = append(it.Enum, x.Name) } } } else { // user-defined, struct or enum it.Ref = "#/definitions/" + t.Name } return it }