diff --git a/renderer/schema_renderer.go b/renderer/schema_renderer.go index 96adc528..8329ab66 100644 --- a/renderer/schema_renderer.go +++ b/renderer/schema_renderer.go @@ -139,6 +139,18 @@ func (wr *SchemaRenderer) DiveIntoSchema(schema *base.Schema, key string, struct maxLength = *schema.MaxLength } + if schema.Examples != nil && len(schema.Examples) > 0 { + var renderedExample any + exmp := schema.Examples[0] + if exmp != nil { + var ex any + _ = exmp.Decode(&ex) + renderedExample = fmt.Sprint(ex) + } + structure[key] = renderedExample + return + } + switch schema.Format { case dateTimeType: structure[key] = time.Now().Format(time.RFC3339) @@ -243,23 +255,16 @@ func (wr *SchemaRenderer) DiveIntoSchema(schema *base.Schema, key string, struct maximum = int64(*schema.Maximum) } - if schema.Example != nil { - var example any - _ = schema.Example.Decode(&example) - structure[key] = example - return - } if schema.Examples != nil { if len(schema.Examples) > 0 { - renderedExamples := make([]any, len(schema.Examples)) - for i, exmp := range schema.Examples { - if exmp != nil { - var ex any - _ = exmp.Decode(&ex) - renderedExamples[i] = fmt.Sprint(ex) - } + var renderedExample any + exmp := schema.Examples[0] + if exmp != nil { + var ex any + _ = exmp.Decode(&ex) + renderedExample = ex } - structure[key] = renderedExamples + structure[key] = renderedExample return } } diff --git a/renderer/schema_renderer_test.go b/renderer/schema_renderer_test.go index 8393c0cd..3608e7b4 100644 --- a/renderer/schema_renderer_test.go +++ b/renderer/schema_renderer_test.go @@ -1111,6 +1111,38 @@ properties: assert.Equal(t, `{"bigint":8821239038968084,"bigintStr":"9223372036854775808","decimal":3.141592653589793,"decimalStr":"3.14159265358979344719667586"}`, string(rendered)) } +func TestRenderSchema_NonStandard_Format_MultiExample(t *testing.T) { + testObject := `type: object +properties: + bigint: + type: integer + format: bigint + examples: + - 8821239038968084 + bigintStr: + type: string + format: bigint + examples: + - "9223372036854775808" + decimal: + type: number + format: decimal + examples: + - 3.141592653589793 + decimalStr: + type: string + format: decimal + examples: + - "3.14159265358979344719667586"` + + compiled := getSchema([]byte(testObject)) + schema := make(map[string]any) + wr := createSchemaRenderer() + wr.DiveIntoSchema(compiled, "pb33f", schema, 0) + rendered, _ := json.Marshal(schema["pb33f"]) + assert.Equal(t, `{"bigint":8821239038968084,"bigintStr":"9223372036854775808","decimal":3.141592653589793,"decimalStr":"3.14159265358979344719667586"}`, string(rendered)) +} + func TestCreateRendererUsingDefaultDictionary(t *testing.T) { assert.NotNil(t, CreateRendererUsingDefaultDictionary()) }