-
Notifications
You must be signed in to change notification settings - Fork 0
/
util.go
69 lines (60 loc) · 1.57 KB
/
util.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
// Copyright 2022 Cosmos Nicolaou. All rights reserved.
// Use of this source code is governed by the Apache-2.0
// license that can be found in the LICENSE file.
package transforms
import (
"encoding/json"
"fmt"
"regexp"
"strings"
"gopkg.in/yaml.v3"
)
func formatJSON(t any) string {
buf, _ := json.MarshalIndent(t, "", " ")
return string(buf)
}
func formatYAML(indent int, v any) string {
out := &strings.Builder{}
enc := yaml.NewEncoder(out)
enc.SetIndent(indent)
if err := enc.Encode(v); err != nil {
return ""
}
return out.String()
}
// Replacement represents a replacement string of the
// form /<match-re>/<replacement>/
type Replacement struct {
match *regexp.Regexp
replace string
}
// Match applies regexp.MatchString.
func (sr Replacement) MatchString(input string) bool {
return sr.match.MatchString(input)
}
// ReplaceAllString(input string) applies regexp.ReplaceAllString.
func (sr Replacement) ReplaceAllString(input string) string {
return sr.match.ReplaceAllString(input, sr.replace)
}
// NewReplacement accepts a string of the form /<match-re>/<replacement>/
// to create a Replacement that will apply
// <match-re.ReplaceAllString(<replace>).
func NewReplacement(s string) (Replacement, error) {
var sr Replacement
var parts []string
for _, p := range strings.Split(s, "/") {
if len(p) > 0 {
parts = append(parts, p)
}
}
if len(parts) != 2 {
return sr, fmt.Errorf("%q is not in /<match>/<replace>/ form", s)
}
m, err := regexp.Compile(parts[0])
if err != nil {
return sr, err
}
sr.match = m
sr.replace = parts[1]
return sr, nil
}