summaryrefslogtreecommitdiff
path: root/cmd/generate/src_upstreams.go
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/generate/src_upstreams.go')
-rw-r--r--cmd/generate/src_upstreams.go46
1 files changed, 46 insertions, 0 deletions
diff --git a/cmd/generate/src_upstreams.go b/cmd/generate/src_upstreams.go
new file mode 100644
index 0000000..1ea7750
--- /dev/null
+++ b/cmd/generate/src_upstreams.go
@@ -0,0 +1,46 @@
+package main
+
+import (
+ _ "embed"
+ "net/url"
+ "os"
+ "path"
+
+ "sigs.k8s.io/yaml"
+)
+
+type Upstream struct {
+ URLs []string `json:"urls"`
+ Name string `json:"name"`
+ Desc string `json:"desc"`
+}
+
+func ReadUpstreams(filename string) ([]Upstream, error) {
+ bs, err := os.ReadFile(filename)
+ if err != nil {
+ return nil, err
+ }
+ var ret []Upstream
+ if err := yaml.UnmarshalStrict(bs, &ret); err != nil {
+ return []Upstream{}, err
+ }
+ for i := range ret {
+ upstream := ret[i]
+ if err := upstream.Fill(); err != nil {
+ return nil, err
+ }
+ ret[i] = upstream
+ }
+ return ret, nil
+}
+
+func (upstream *Upstream) Fill() error {
+ if upstream.Name == "" {
+ u, err := url.Parse(upstream.URLs[0])
+ if err != nil {
+ return err
+ }
+ _, upstream.Name = path.Split(path.Clean(u.Path))
+ }
+ return nil
+}