package atomfeed import ( "mime" "net/url" "regexp" "strings" ) type ( EmailAddress string LanguageTag string MediaType string URI string ) func isValidURL(uri URI) bool { _, err := url.ParseRequestURI(string(uri)) return err == nil } func isValidURN(uri URI) bool { pattern := `\A(?i:urn:(?!urn:)(?[a-z0-9][a-z0-9-]{1,31}):(?(?:[-a-z0-9()+,.:=@;$_!*'&~\/]|%[0-9a-f]{2})+)(?:\?\+(?.*?))?(?:\?=(?.*?))?(?:#(?.*?))?)\z` return regexp.MustCompile(pattern).MatchString(string(uri)) } func isValidURI(uri URI) bool { return isValidURL(uri) || isValidURN(uri) } func isCompositeMediaType(mediaType string) bool { mediaType, _, err := mime.ParseMediaType(mediaType) if err != nil { return false } return strings.HasPrefix(mediaType, "multipart/") || strings.HasPrefix(mediaType, "message/") } func isXMLMediaType(mediaType string) bool { mediaType, _, err := mime.ParseMediaType(mediaType) if err != nil { return false } return strings.HasSuffix(mediaType, "/xml") || strings.HasSuffix(mediaType, "+xml") }