diff options
Diffstat (limited to 'cmd/generate/src_upstreams.go')
-rw-r--r-- | cmd/generate/src_upstreams.go | 46 |
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 +} |