func BuildSchemaFor()

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
}