#![doc(html_root_url = "https://docs.rs/feed/")]
#![deny(missing_docs)]
extern crate chrono;
extern crate curl;
extern crate mime;
extern crate rss;
extern crate url;
mod enums;
pub mod extension;
pub mod channel;
mod utils;
use rss::{Category, Channel, Cloud, Enclosure, Guid, Image, Item, Source, TextInput};
use rss::extension::itunes::{ITunesChannelExtension, ITunesItemExtension};
pub trait CategoryGetters
{
fn name(&self) -> String;
fn domain(&self) -> Option<String>;
}
#[derive(Clone, Default)]
pub struct CategoryBuilder
{
name: String,
domain: Option<String>,
}
pub trait FromUrl
{
fn from_url(url: &str) -> Result<Channel, String>;
}
pub trait Validate
{
fn validate(&self) -> Result<Channel, String>;
}
pub trait ChannelGetters
{
fn title(&self) -> String;
fn link(&self) -> String;
fn description(&self) -> String;
fn language(&self) -> Option<String>;
fn copyright(&self) -> Option<String>;
fn managing_editor(&self) -> Option<String>;
fn webmaster(&self) -> Option<String>;
fn pub_date(&self) -> Option<String>;
fn last_build_date(&self) -> Option<String>;
fn categories(&self) -> Vec<Category>;
fn generator(&self) -> Option<String>;
fn docs(&self) -> Option<String>;
fn cloud(&self) -> Option<Cloud>;
fn ttl(&self) -> Option<String>;
fn image(&self) -> Option<Image>;
fn text_input(&self) -> Option<TextInput>;
fn rating(&self) -> Option<String>;
fn skip_hours(&self) -> Vec<String>;
fn skip_days(&self) -> Vec<String>;
fn items(&self) -> Vec<Item>;
fn itunes_ext(&self) -> Option<ITunesChannelExtension>;
}
#[derive(Clone, Default)]
pub struct ChannelBuilder
{
title: String,
link: String,
description: String,
language: Option<String>,
copyright: Option<String>,
managing_editor: Option<String>,
webmaster: Option<String>,
pub_date: Option<String>,
last_build_date: Option<String>,
categories: Vec<Category>,
generator: Option<String>,
docs: Option<String>,
cloud: Option<Cloud>,
ttl: Option<i64>,
image: Option<Image>,
rating: Option<String>,
text_input: Option<TextInput>,
skip_hours: Vec<i64>,
skip_days: Vec<String>,
items: Vec<Item>,
itunes_ext: Option<ITunesChannelExtension>,
}
pub trait CloudGetters
{
fn domain(&self) -> String;
fn port(&self) -> String;
fn path(&self) -> String;
fn register_procedure(&self) -> String;
fn protocol(&self) -> String;
}
#[derive(Clone, Default)]
pub struct CloudBuilder
{
domain: String,
port: i64,
path: String,
register_procedure: String,
protocol: String,
}
pub trait EnclosureGetters
{
fn url(&self) -> String;
fn length(&self) -> String;
fn mime_type(&self) -> String;
}
#[derive(Clone, Default)]
pub struct EnclosureBuilder
{
url: String,
length: i64,
mime_type: String,
}
pub trait GuidGetters
{
fn is_permalink(&self) -> bool;
fn value(&self) -> String;
}
#[derive(Clone, Default)]
pub struct GuidBuilder
{
is_permalink: Option<bool>,
value: String,
}
pub trait ImageGetters
{
fn url(&self) -> String;
fn title(&self) -> String;
fn link(&self) -> String;
fn width(&self) -> Option<String>;
fn height(&self) -> Option<String>;
fn description(&self) -> Option<String>;
}
#[derive(Clone, Default)]
pub struct ImageBuilder
{
url: String,
title: String,
link: String,
width: Option<i64>,
height: Option<i64>,
description: Option<String>,
}
pub trait ItemGetters
{
fn title(&self) -> Option<String>;
fn link(&self) -> Option<String>;
fn description(&self) -> Option<String>;
fn author(&self) -> Option<String>;
fn categories(&self) -> Vec<Category>;
fn comments(&self) -> Option<String>;
fn enclosure(&self) -> Option<Enclosure>;
fn guid(&self) -> Option<Guid>;
fn pub_date(&self) -> Option<String>;
fn source(&self) -> Option<Source>;
fn itunes_ext(&self) -> Option<ITunesItemExtension>;
}
#[derive(Clone, Default)]
pub struct ItemBuilder
{
title: Option<String>,
link: Option<String>,
description: Option<String>,
author: Option<String>,
categories: Vec<Category>,
comments: Option<String>,
enclosure: Option<Enclosure>,
guid: Option<Guid>,
pub_date: Option<String>,
source: Option<Source>,
itunes_ext: Option<ITunesItemExtension>,
}
pub trait SourceGetters
{
fn url(&self) -> String;
fn title(&self) -> Option<String>;
}
#[derive(Clone, Default)]
pub struct SourceBuilder
{
url: String,
title: Option<String>,
}
pub trait TextInputGetters
{
fn title(&self) -> String;
fn description(&self) -> String;
fn name(&self) -> String;
fn link(&self) -> String;
}
#[derive(Clone, Default)]
pub struct TextInputBuilder
{
title: String,
description: String,
name: String,
link: String,
}