macro_rules! decl_ext {
($prefix:literal, $($name:ident => $local:literal),+ $(,)?) => {
rama_utils::macros::paste! {
$(
pub(in crate::protocols::rss) const $name: &str = $local;
pub(in crate::protocols::rss) const [<$name _TAG>]: &str =
concat!($prefix, ":", $local);
)+
}
};
}
pub(in crate::protocols::rss) mod itunes {
decl_ext! { "itunes",
TITLE => "title",
AUTHOR => "author",
SUBTITLE => "subtitle",
SUMMARY => "summary",
IMAGE => "image",
CATEGORY => "category",
DURATION => "duration",
EXPLICIT => "explicit",
EPISODE => "episode",
SEASON => "season",
EPISODE_TYPE => "episodeType",
KEYWORDS => "keywords",
BLOCK => "block",
COMPLETE => "complete",
TYPE => "type",
NEW_FEED_URL => "new-feed-url",
OWNER => "owner",
NAME => "name",
EMAIL => "email",
}
}
pub(in crate::protocols::rss) mod podcast {
decl_ext! { "podcast",
GUID => "guid",
LOCKED => "locked",
FUNDING => "funding",
MEDIUM => "medium",
LICENSE => "license",
PERSON => "person",
LOCATION => "location",
TRAILER => "trailer",
REMOTE_ITEM => "remoteItem",
TRANSCRIPT => "transcript",
ALTERNATE_ENCLOSURE => "alternateEnclosure",
SOURCE => "source",
INTEGRITY => "integrity",
CHAPTERS => "chapters",
SOUNDBITE => "soundbite",
SEASON => "season",
EPISODE => "episode",
}
}
pub(in crate::protocols::rss) mod media {
decl_ext! { "media",
CONTENT => "content",
TITLE => "title",
DESCRIPTION => "description",
THUMBNAIL => "thumbnail",
KEYWORDS => "keywords",
RATING => "rating",
}
}
pub(in crate::protocols::rss) mod dc {
decl_ext! { "dc",
TITLE => "title",
CREATOR => "creator",
SUBJECT => "subject",
DESCRIPTION => "description",
PUBLISHER => "publisher",
CONTRIBUTOR => "contributor",
DATE => "date",
TYPE => "type",
FORMAT => "format",
IDENTIFIER => "identifier",
SOURCE => "source",
LANGUAGE => "language",
RELATION => "relation",
COVERAGE => "coverage",
RIGHTS => "rights",
}
}
pub(in crate::protocols::rss) mod content {
decl_ext! { "content",
ENCODED => "encoded",
}
}
pub(in crate::protocols::rss) mod psc {
decl_ext! { "psc",
CHAPTERS => "chapters",
CHAPTER => "chapter",
}
}
pub(in crate::protocols::rss) mod attr {
macro_rules! decl_attr {
($($name:ident => $lit:literal),+ $(,)?) => {
$(
pub(in crate::protocols::rss) const $name: &str = $lit;
)+
};
}
decl_attr! {
URL => "url",
HREF => "href",
TYPE => "type",
REL => "rel",
HREFLANG => "hreflang",
TITLE => "title",
LENGTH => "length",
URI => "uri",
VERSION => "version",
SRC => "src",
DOMAIN => "domain",
IS_PERMALINK => "isPermaLink",
TERM => "term",
SCHEME => "scheme",
LABEL => "label",
LANGUAGE => "language",
LANG => "lang",
PUB_DATE => "pubDate",
NAME => "name",
MEDIUM => "medium",
DURATION => "duration",
WIDTH => "width",
HEIGHT => "height",
FILE_SIZE => "fileSize",
BITRATE => "bitrate",
CODECS => "codecs",
DEFAULT => "default",
CONTENT_TYPE => "contentType",
VALUE => "value",
ROLE => "role",
GROUP => "group",
IMG => "img",
GEO => "geo",
OSM => "osm",
SEASON => "season",
DISPLAY => "display",
START_TIME => "startTime",
TEXT => "text",
FEED_GUID => "feedGuid",
ITEM_GUID => "itemGuid",
FEED_URL => "feedUrl",
OWNER => "owner",
START => "start",
IMAGE => "image",
}
}