Skip to content

Commit

Permalink
Merge pull request #75 from balki/yamltag
Browse files Browse the repository at this point in the history
Add test for FieldNameTag
  • Loading branch information
samlown committed Sep 6, 2023
2 parents 5ac1546 + 7f2e6ff commit 2d282ec
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 1 deletion.
23 changes: 23 additions & 0 deletions fixtures/test_config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://github.com/invopop/jsonschema/config",
"$ref": "#/$defs/Config",
"$defs": {
"Config": {
"properties": {
"name": {
"type": "string"
},
"count": {
"type": "integer"
}
},
"additionalProperties": false,
"type": "object",
"required": [
"name",
"count"
]
}
}
}
9 changes: 8 additions & 1 deletion reflect.go
Original file line number Diff line number Diff line change
Expand Up @@ -183,6 +183,9 @@ type Reflector struct {
// root as opposed to a definition with a reference.
ExpandedStruct bool

// FieldNameTag will change the tag used to get field names. json tags are used by default.
FieldNameTag string

// IgnoredTypes defines a slice of types that should be ignored in the schema,
// switching to just allowing additional properties instead.
IgnoredTypes []interface{}
Expand Down Expand Up @@ -990,7 +993,11 @@ func ignoredByJSONSchemaTags(tags []string) bool {
}

func (r *Reflector) reflectFieldName(f reflect.StructField) (string, bool, bool, bool) {
jsonTagString, _ := f.Tag.Lookup("json")
tagKey := r.FieldNameTag
if tagKey == "" {
tagKey = "json"
}
jsonTagString := f.Tag.Get(tagKey)
jsonTags := strings.Split(jsonTagString, ",")

if ignoredByJSONTags(jsonTags) {
Expand Down
12 changes: 12 additions & 0 deletions reflect_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -547,3 +547,15 @@ func TestArrayExtraTags(t *testing.T) {
pt = p.Items.Pattern
require.Equal(t, pt, "^https://.*")
}

func TestFieldNameTag(t *testing.T) {
type Config struct {
Name string `yaml:"name"`
Count int `yaml:"count"`
}

r := Reflector{
FieldNameTag: "yaml",
}
compareSchemaOutput(t, "fixtures/test_config.json", &r, &Config{})
}

0 comments on commit 2d282ec

Please sign in to comment.