url_bot_rs/plugins/
mod.rs1use reqwest::Url;
2use failure::Error;
3use serde::{Serialize, Deserialize};
4
5use crate::config::Rtd;
6
7pub trait TitlePlugin {
8 fn name(&self) -> &'static str;
10 fn check(&self, config: &PluginConfig, url: &Url) -> bool;
12 fn evaluate(&self, rtd: &Rtd, url: &Url) -> Result<String, Error>;
14}
15
16pub mod imgur;
18pub mod youtube;
19pub mod vimeo;
20
21#[derive(Serialize, Deserialize, Default, Clone)]
23#[serde(default)]
24pub struct PluginConfig {
25 imgur: imgur::Config,
26 youtube: youtube::Config,
27 vimeo: vimeo::Config,
28}
29
30pub const TITLE_PLUGINS: [&dyn TitlePlugin; 3] = [
32 &imgur::ImgurPlugin {},
33 &youtube::YouTubePlugin {},
34 &vimeo::VimeoPlugin {},
35];
36
37#[macro_export]
38macro_rules! plugin_conf {
39 ($rtd:expr, $name:ident) => {
40 $rtd.conf.plugins.$name
41 };
42}