all repos — gopkgs @ af4d9175c8ff1518afcdaf62073e4a2f0b02739e

Go module vanity import paths

unmarshal URLs into objects

Alan Pearce
commit

af4d9175c8ff1518afcdaf62073e4a2f0b02739e

parent

ce1e1c781504c085b50cd114f925d17859daf6f5

1 file changed, 23 insertions(+), 10 deletions(-)

changed files
M main.gomain.go
@@ -11,17 +11,30 @@ "go.alanpearce.eu/gomponents"
"gopkg.in/yaml.v3" ) +type URL struct { + *url.URL +} + +func (u *URL) UnmarshalYAML(value *yaml.Node) (err error) { + var s string + if err := value.Decode(&s); err != nil { + return err + } + u.URL, err = url.Parse(s) + return err +} + type Config struct { Title string - Domain string - Forge string + Domain URL + Forge URL Menu []*MenuLink Packages []string } type MenuLink struct { Name string - URL string + URL URL } func must[T any](t T, err error) T {
@@ -39,16 +52,16 @@ }
func importString(config *Config, pkg string) string { return fmt.Sprintf("%s git %s", - must(url.JoinPath(config.Domain, pkg)), - must(url.JoinPath(config.Forge, pkg)), + config.Domain.JoinPath(pkg), + config.Forge.JoinPath(pkg), ) } func sourceString(config *Config, pkg string) string { return fmt.Sprintf("%s _ %s %s", - must(url.JoinPath(config.Domain, pkg)), - must(url.JoinPath(config.Forge, pkg))+"/tree/main{/dir}", - must(url.JoinPath(config.Forge, pkg))+"/tree/main{/dir}/{file}#n{line}", + config.Domain.JoinPath(pkg), + config.Forge.JoinPath(pkg).String()+"/tree/main{/dir}", + config.Forge.JoinPath(pkg).String()+"/tree/main{/dir}/{file}#n{line}", ) }
@@ -57,11 +70,11 @@ return must(url.JoinPath("https://pkg.go.dev", packageImportPath(config, pkg)))
} func packageImportPath(config *Config, pkg string) string { - return must(url.JoinPath(config.Domain, pkg)) + return config.Domain.JoinPath(pkg).String() } func packageForgeURL(config *Config, pkg string) string { - return must(url.JoinPath(config.Forge, pkg)) + return config.Forge.JoinPath(pkg).String() } func getConfig(filename string) (cfg *Config, err error) {