File size: 1,420 Bytes
7def60a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
package grammars

type GrammarOption struct {
	PropOrder               string
	Prefix                  string
	MaybeArray              bool
	DisableParallelNewLines bool
	MaybeString             bool
	NoMixedFreeString       bool
	ExpectStringsAfterJSON  bool

	FunctionName string
	SchemaType   SchemaConverterType
}

func (o *GrammarOption) Apply(options ...func(*GrammarOption)) {
	for _, l := range options {
		l(o)
	}
}

var EnableMaybeArray = func(o *GrammarOption) {
	o.MaybeArray = true
}

var DisableParallelNewLines = func(o *GrammarOption) {
	o.DisableParallelNewLines = true
}

var EnableMaybeString = func(o *GrammarOption) {
	o.MaybeString = true
}

var NoMixedFreeString func(*GrammarOption) = func(o *GrammarOption) {
	o.NoMixedFreeString = true
}

// ExpectStringsAfterJSON enables mixed string suffix
var ExpectStringsAfterJSON func(*GrammarOption) = func(o *GrammarOption) {
	o.ExpectStringsAfterJSON = true
}

func SetPrefix(suffix string) func(*GrammarOption) {
	return func(o *GrammarOption) {
		o.Prefix = suffix
	}
}

func SetPropOrder(order string) func(*GrammarOption) {
	return func(o *GrammarOption) {
		o.PropOrder = order
	}
}

func WithSchemaType(schemaType SchemaConverterType) func(*GrammarOption) {
	return func(o *GrammarOption) {
		o.SchemaType = schemaType
	}
}

func WithFunctionName(name string) func(*GrammarOption) {
	return func(o *GrammarOption) {
		o.FunctionName = name
	}
}