Skip to content

Commit 5032095

Browse files
committed
feat: Export as option
1 parent 42037ab commit 5032095

File tree

3 files changed

+17
-7
lines changed

3 files changed

+17
-7
lines changed

transformers/name.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ func DefaultNameTransformer(field reflect.StructField) (string, error) {
2626
return defaultCaser.ToSnake(name), nil
2727
}
2828

29-
func JSONTagOrFieldName(field reflect.StructField) (string, error) {
29+
func DefaultJSONColumnSchemaNameTransformer(field reflect.StructField) (string, error) {
3030
name := field.Name
3131
if jsonTag := strings.Split(field.Tag.Get("json"), ",")[0]; len(jsonTag) > 0 {
3232
// return empty string if the field is not related api response

transformers/options.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,14 @@ func WithNameTransformer(transformer NameTransformer) StructTransformerOption {
3131
}
3232
}
3333

34+
// WithJSONSchemaNameTransformer overrides how column name will be determined.
35+
// DefaultJSONColumnSchemaNameTransformer is used as the default.
36+
func WithJSONSchemaNameTransformer(transformer NameTransformer) StructTransformerOption {
37+
return func(t *structTransformer) {
38+
t.jsonSchemaNameTransformer = transformer
39+
}
40+
}
41+
3442
// WithTypeTransformer overrides how column type will be determined.
3543
// DefaultTypeTransformer is used as the default.
3644
func WithTypeTransformer(transformer TypeTransformer) StructTransformerOption {

transformers/struct.go

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ type structTransformer struct {
2929
pkFieldsFound []string
3030
pkComponentFields []string
3131
pkComponentFieldsFound []string
32+
jsonSchemaNameTransformer NameTransformer
3233

3334
maxJSONTypeSchemaDepth int
3435
}
@@ -194,11 +195,12 @@ func (t *structTransformer) addColumnFromField(field reflect.StructField, parent
194195

195196
func TransformWithStruct(st any, opts ...StructTransformerOption) schema.Transform {
196197
t := &structTransformer{
197-
nameTransformer: DefaultNameTransformer,
198-
typeTransformer: DefaultTypeTransformer,
199-
resolverTransformer: DefaultResolverTransformer,
200-
ignoreInTestsTransformer: DefaultIgnoreInTestsTransformer,
201-
maxJSONTypeSchemaDepth: DefaultMaxJSONTypeSchemaDepth,
198+
nameTransformer: DefaultNameTransformer,
199+
typeTransformer: DefaultTypeTransformer,
200+
resolverTransformer: DefaultResolverTransformer,
201+
ignoreInTestsTransformer: DefaultIgnoreInTestsTransformer,
202+
jsonSchemaNameTransformer: DefaultJSONColumnSchemaNameTransformer,
203+
maxJSONTypeSchemaDepth: DefaultMaxJSONTypeSchemaDepth,
202204
}
203205
for _, opt := range opts {
204206
opt(t)
@@ -284,7 +286,7 @@ func (t *structTransformer) fieldToJSONSchema(field reflect.StructField, depth i
284286
if !structField.IsExported() || isTypeIgnored(structField.Type) {
285287
continue
286288
}
287-
name, err := JSONTagOrFieldName(structField)
289+
name, err := t.jsonSchemaNameTransformer(structField)
288290
if err != nil {
289291
continue
290292
}

0 commit comments

Comments
 (0)