-
Notifications
You must be signed in to change notification settings - Fork 1.5k
/
Copy pathmixins.go
155 lines (127 loc) · 3.9 KB
/
mixins.go
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
/*
Copyright 2018 The Kubernetes Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package machinery
import (
"sigs.k8s.io/kubebuilder/v4/pkg/model/resource"
)
// PathMixin provides file builders with a path field
type PathMixin struct {
// Path is the of the file
Path string
}
// GetPath implements Builder
func (t *PathMixin) GetPath() string {
return t.Path
}
// IfExistsActionMixin provides file builders with a if-exists-action field
type IfExistsActionMixin struct {
// IfExistsAction determines what to do if the file exists
IfExistsAction IfExistsAction
}
// GetIfExistsAction implements Builder
func (t *IfExistsActionMixin) GetIfExistsAction() IfExistsAction {
return t.IfExistsAction
}
// TemplateMixin is the mixin that should be embedded in Template builders
type TemplateMixin struct {
PathMixin
IfExistsActionMixin
// TemplateBody is the template body to execute
TemplateBody string
parseDelimLeft string
parseDelimRight string
}
// GetBody implements Template
func (t *TemplateMixin) GetBody() string {
return t.TemplateBody
}
// SetDelim implements Template
func (t *TemplateMixin) SetDelim(left, right string) {
t.parseDelimLeft = left
t.parseDelimRight = right
}
// GetDelim implements Template
func (t *TemplateMixin) GetDelim() (string, string) {
return t.parseDelimLeft, t.parseDelimRight
}
// InserterMixin is the mixin that should be embedded in Inserter builders
type InserterMixin struct {
PathMixin
}
// GetIfExistsAction implements Builder
func (t *InserterMixin) GetIfExistsAction() IfExistsAction {
// Inserter builders always need to overwrite previous files
return OverwriteFile
}
// DomainMixin provides templates with a injectable domain field
type DomainMixin struct {
// Domain is the domain for the APIs
Domain string
}
// InjectDomain implements HasDomain
func (m *DomainMixin) InjectDomain(domain string) {
if m.Domain == "" {
m.Domain = domain
}
}
// RepositoryMixin provides templates with a injectable repository field
type RepositoryMixin struct {
// Repo is the go project package path
Repo string
}
// InjectRepository implements HasRepository
func (m *RepositoryMixin) InjectRepository(repository string) {
if m.Repo == "" {
m.Repo = repository
}
}
// ProjectNameMixin provides templates with an injectable project name field.
type ProjectNameMixin struct {
ProjectName string
}
// InjectProjectName implements HasProjectName.
func (m *ProjectNameMixin) InjectProjectName(projectName string) {
if m.ProjectName == "" {
m.ProjectName = projectName
}
}
// MultiGroupMixin provides templates with a injectable multi-group flag field
type MultiGroupMixin struct {
// MultiGroup is the multi-group flag
MultiGroup bool
}
// InjectMultiGroup implements HasMultiGroup
func (m *MultiGroupMixin) InjectMultiGroup(flag bool) {
m.MultiGroup = flag
}
// BoilerplateMixin provides templates with a injectable boilerplate field
type BoilerplateMixin struct {
// Boilerplate is the contents of a Boilerplate go header file
Boilerplate string
}
// InjectBoilerplate implements HasBoilerplate
func (m *BoilerplateMixin) InjectBoilerplate(boilerplate string) {
if m.Boilerplate == "" {
m.Boilerplate = boilerplate
}
}
// ResourceMixin provides templates with a injectable resource field
type ResourceMixin struct {
Resource *resource.Resource
}
// InjectResource implements HasResource
func (m *ResourceMixin) InjectResource(res *resource.Resource) {
if m.Resource == nil {
m.Resource = res
}
}