func (sg *schemaGenContext) buildArray() error { tpe, err := sg.TypeResolver.ResolveSchema(sg.Schema.Items.Schema, true) if err != nil { return err } // check if the element is a complex object, if so generate a new type for it if tpe.IsComplexObject && tpe.IsAnonymous { pg := sg.makeNewStruct(sg.Name+" items"+strconv.Itoa(sg.Index), *sg.Schema.Items.Schema) if err := pg.makeGenSchema(); err != nil { return err } sg.MergeResult(pg) sg.ExtraSchemas[pg.Name] = pg.GenSchema sg.Schema.Items.Schema = spec.RefProperty("#/definitions/" + pg.Name) if err := sg.makeGenSchema(); err != nil { return err } return nil } elProp := sg.NewSliceBranch(sg.Schema.Items.Schema) if err := elProp.makeGenSchema(); err != nil { return err } sg.MergeResult(elProp) sg.GenSchema.ItemsEnum = elProp.GenSchema.Enum elProp.GenSchema.Suffix = "Items" sg.GenSchema.GoType = "[]" + elProp.GenSchema.GoType sg.GenSchema.Items = &elProp.GenSchema return nil }
func newMapStack(context *schemaGenContext) (first, last *mapStack, err error) { ms := &mapStack{ Type: &context.Schema, Context: context, } l := ms for l.HasMore() { tpe, err := l.Context.TypeResolver.ResolveSchema(l.Type.AdditionalProperties.Schema, true) if err != nil { return nil, nil, err } if !tpe.IsMap { if tpe.IsComplexObject && tpe.IsAnonymous { nw := l.Context.makeNewStruct(l.Context.Name+" Anon", *l.Type.AdditionalProperties.Schema) sch := spec.RefProperty("#/definitions/" + nw.Name) l.NewObj = nw l.Type.AdditionalProperties.Schema = sch l.ValueRef = l.Context.NewAdditionalProperty(*sch) } break } l.Next = &mapStack{ Previous: l, Type: l.Type.AdditionalProperties.Schema, Context: l.Context.NewAdditionalProperty(*l.Type.AdditionalProperties.Schema), } l = l.Next } return ms, l, nil }
func (sg *schemaGenContext) buildAdditionalItems() error { wantsAdditionalItems := sg.Schema.AdditionalItems != nil && (sg.Schema.AdditionalItems.Allows || sg.Schema.AdditionalItems.Schema != nil) sg.GenSchema.HasAdditionalItems = wantsAdditionalItems if wantsAdditionalItems { // check if the element is a complex object, if so generate a new type for it tpe, err := sg.TypeResolver.ResolveSchema(sg.Schema.AdditionalItems.Schema, true) if err != nil { return err } if tpe.IsComplexObject && tpe.IsAnonymous { pg := sg.makeNewStruct(sg.Name+" Items", *sg.Schema.AdditionalItems.Schema) if err := pg.makeGenSchema(); err != nil { return err } sg.Schema.AdditionalItems.Schema = spec.RefProperty("#/definitions/" + pg.Name) pg.GenSchema.HasValidations = true sg.MergeResult(pg) sg.ExtraSchemas[pg.Name] = pg.GenSchema } it := sg.NewAdditionalItems(sg.Schema.AdditionalItems.Schema) if tpe.IsInterface { it.Untyped = true } if err := it.makeGenSchema(); err != nil { return err } sg.MergeResult(it) sg.GenSchema.AdditionalItems = &it.GenSchema } return nil }