internal/uri/uri.go (37 lines of code) (raw):

package uri import ( "fmt" "net/url" "path/filepath" ) func FromPath(path string) string { p := filepath.ToSlash(path) p = wrapPath(p) u := &url.URL{ Scheme: "file", Path: p, } return u.String() } func IsURIValid(uri string) bool { _, err := parseUri(uri) return err == nil } func mustParseUri(uri string) string { u, err := parseUri(uri) if err != nil { panic(fmt.Sprintf("invalid URI: %s", uri)) } return u } func parseUri(uri string) (string, error) { u, err := url.ParseRequestURI(uri) if err != nil { return "", err } if u.Scheme != "file" { return "", fmt.Errorf("unexpected scheme %q in URI %q", u.Scheme, uri) } return url.PathUnescape(u.Path) }