in gollm/schema.go [26:70]
func BuildSchemaFor(t reflect.Type) *Schema {
out := &Schema{}
switch t.Kind() {
case reflect.String:
out.Type = TypeString
case reflect.Bool:
out.Type = TypeBoolean
case reflect.Int:
out.Type = TypeInteger
case reflect.Struct:
out.Type = TypeObject
out.Properties = make(map[string]*Schema)
numFields := t.NumField()
required := []string{}
for i := 0; i < numFields; i++ {
field := t.Field(i)
jsonTag := field.Tag.Get("json")
if jsonTag == "" {
continue
}
if strings.HasSuffix(jsonTag, ",omitempty") {
jsonTag = strings.TrimSuffix(jsonTag, ",omitempty")
} else {
required = append(required, jsonTag)
}
fieldType := field.Type
fieldSchema := BuildSchemaFor(fieldType)
out.Properties[jsonTag] = fieldSchema
}
if len(required) != 0 {
out.Required = required
}
case reflect.Slice:
out.Type = TypeArray
out.Items = BuildSchemaFor(t.Elem())
default:
klog.Fatalf("unhandled kind %v", t.Kind())
}
return out
}