Skip to content

Commit 21ce54b

Browse files
committed
refactor TemplateVersionParameter to be a converter func
1 parent d2634e2 commit 21ce54b

File tree

1 file changed

+84
-83
lines changed

1 file changed

+84
-83
lines changed

coderd/dynamicparameters/static.go

Lines changed: 84 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
"golang.org/x/xerrors"
1010

1111
"github.com/coder/coder/v2/coderd/database"
12+
"github.com/coder/coder/v2/coderd/database/db2sdk"
1213
"github.com/coder/coder/v2/coderd/util/ptr"
1314
sdkproto "github.com/coder/coder/v2/provisionersdk/proto"
1415
"github.com/coder/preview"
@@ -26,89 +27,7 @@ func (r *loader) staticRender(ctx context.Context, db database.Store) (*staticRe
2627
return nil, xerrors.Errorf("template version parameters: %w", err)
2728
}
2829

29-
params := make([]previewtypes.Parameter, 0, len(dbTemplateVersionParameters))
30-
for _, it := range dbTemplateVersionParameters {
31-
param := previewtypes.Parameter{
32-
ParameterData: previewtypes.ParameterData{
33-
Name: it.Name,
34-
DisplayName: it.DisplayName,
35-
Description: it.Description,
36-
Type: previewtypes.ParameterType(it.Type),
37-
FormType: provider.ParameterFormType(it.FormType),
38-
Styling: previewtypes.ParameterStyling{},
39-
Mutable: it.Mutable,
40-
DefaultValue: previewtypes.StringLiteral(it.DefaultValue),
41-
Icon: it.Icon,
42-
Options: make([]*previewtypes.ParameterOption, 0),
43-
Validations: make([]*previewtypes.ParameterValidation, 0),
44-
Required: it.Required,
45-
Order: int64(it.DisplayOrder),
46-
Ephemeral: it.Ephemeral,
47-
Source: nil,
48-
},
49-
// Always use the default, since we used to assume the empty string
50-
Value: previewtypes.StringLiteral(it.DefaultValue),
51-
Diagnostics: make(previewtypes.Diagnostics, 0),
52-
}
53-
54-
if it.ValidationError != "" || it.ValidationRegex != "" || it.ValidationMonotonic != "" {
55-
var reg *string
56-
if it.ValidationRegex != "" {
57-
reg = ptr.Ref(it.ValidationRegex)
58-
}
59-
60-
var vMin *int64
61-
if it.ValidationMin.Valid {
62-
vMin = ptr.Ref(int64(it.ValidationMin.Int32))
63-
}
64-
65-
var vMax *int64
66-
if it.ValidationMax.Valid {
67-
vMax = ptr.Ref(int64(it.ValidationMax.Int32))
68-
}
69-
70-
var monotonic *string
71-
if it.ValidationMonotonic != "" {
72-
monotonic = ptr.Ref(it.ValidationMonotonic)
73-
}
74-
75-
param.Validations = append(param.Validations, &previewtypes.ParameterValidation{
76-
Error: it.ValidationError,
77-
Regex: reg,
78-
Min: vMin,
79-
Max: vMax,
80-
Monotonic: monotonic,
81-
})
82-
}
83-
84-
var protoOptions []*sdkproto.RichParameterOption
85-
err := json.Unmarshal(it.Options, &protoOptions)
86-
if err != nil {
87-
param.Diagnostics = append(param.Diagnostics, &hcl.Diagnostic{
88-
Severity: hcl.DiagError,
89-
Summary: "Failed to parse json parameter options",
90-
Detail: err.Error(),
91-
})
92-
}
93-
94-
for _, opt := range protoOptions {
95-
param.Options = append(param.Options, &previewtypes.ParameterOption{
96-
Name: opt.Name,
97-
Description: opt.Description,
98-
Value: previewtypes.StringLiteral(opt.Value),
99-
Icon: opt.Icon,
100-
})
101-
}
102-
103-
// Take the form type from the ValidateFormType function. This is a bit
104-
// unfortunate we have to do this, but it will return the default form_type
105-
// for a given set of conditions.
106-
_, param.FormType, _ = provider.ValidateFormType(provider.OptionType(param.Type), len(param.Options), param.FormType)
107-
108-
param.Diagnostics = append(param.Diagnostics, previewtypes.Diagnostics(param.Valid(param.Value))...)
109-
params = append(params, param)
110-
}
111-
30+
params := db2sdk.List(dbTemplateVersionParameters, TemplateVersionParameter)
11231
return &staticRender{
11332
staticParams: params,
11433
}, nil
@@ -140,3 +59,85 @@ func (r *staticRender) Render(_ context.Context, _ uuid.UUID, values map[string]
14059
}
14160

14261
func (*staticRender) Close() {}
62+
63+
func TemplateVersionParameter(it database.TemplateVersionParameter) previewtypes.Parameter {
64+
param := previewtypes.Parameter{
65+
ParameterData: previewtypes.ParameterData{
66+
Name: it.Name,
67+
DisplayName: it.DisplayName,
68+
Description: it.Description,
69+
Type: previewtypes.ParameterType(it.Type),
70+
FormType: provider.ParameterFormType(it.FormType),
71+
Styling: previewtypes.ParameterStyling{},
72+
Mutable: it.Mutable,
73+
DefaultValue: previewtypes.StringLiteral(it.DefaultValue),
74+
Icon: it.Icon,
75+
Options: make([]*previewtypes.ParameterOption, 0),
76+
Validations: make([]*previewtypes.ParameterValidation, 0),
77+
Required: it.Required,
78+
Order: int64(it.DisplayOrder),
79+
Ephemeral: it.Ephemeral,
80+
Source: nil,
81+
},
82+
// Always use the default, since we used to assume the empty string
83+
Value: previewtypes.StringLiteral(it.DefaultValue),
84+
Diagnostics: make(previewtypes.Diagnostics, 0),
85+
}
86+
87+
if it.ValidationError != "" || it.ValidationRegex != "" || it.ValidationMonotonic != "" {
88+
var reg *string
89+
if it.ValidationRegex != "" {
90+
reg = ptr.Ref(it.ValidationRegex)
91+
}
92+
93+
var vMin *int64
94+
if it.ValidationMin.Valid {
95+
vMin = ptr.Ref(int64(it.ValidationMin.Int32))
96+
}
97+
98+
var vMax *int64
99+
if it.ValidationMax.Valid {
100+
vMax = ptr.Ref(int64(it.ValidationMax.Int32))
101+
}
102+
103+
var monotonic *string
104+
if it.ValidationMonotonic != "" {
105+
monotonic = ptr.Ref(it.ValidationMonotonic)
106+
}
107+
108+
param.Validations = append(param.Validations, &previewtypes.ParameterValidation{
109+
Error: it.ValidationError,
110+
Regex: reg,
111+
Min: vMin,
112+
Max: vMax,
113+
Monotonic: monotonic,
114+
})
115+
}
116+
117+
var protoOptions []*sdkproto.RichParameterOption
118+
err := json.Unmarshal(it.Options, &protoOptions)
119+
if err != nil {
120+
param.Diagnostics = append(param.Diagnostics, &hcl.Diagnostic{
121+
Severity: hcl.DiagError,
122+
Summary: "Failed to parse json parameter options",
123+
Detail: err.Error(),
124+
})
125+
}
126+
127+
for _, opt := range protoOptions {
128+
param.Options = append(param.Options, &previewtypes.ParameterOption{
129+
Name: opt.Name,
130+
Description: opt.Description,
131+
Value: previewtypes.StringLiteral(opt.Value),
132+
Icon: opt.Icon,
133+
})
134+
}
135+
136+
// Take the form type from the ValidateFormType function. This is a bit
137+
// unfortunate we have to do this, but it will return the default form_type
138+
// for a given set of conditions.
139+
_, param.FormType, _ = provider.ValidateFormType(provider.OptionType(param.Type), len(param.Options), param.FormType)
140+
141+
param.Diagnostics = append(param.Diagnostics, previewtypes.Diagnostics(param.Valid(param.Value))...)
142+
return param
143+
}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy