use reqwest::{Error, Url};
use serde::Deserialize;
use std::time::Duration;
use strum::{Display, EnumIter, EnumString, VariantNames};
mod wayback;
#[non_exhaustive]
#[derive(
Debug, Deserialize, Default, Clone, Display, EnumIter, EnumString, VariantNames, PartialEq, Eq,
)]
pub enum Archive {
#[serde(rename = "wayback")]
#[strum(serialize = "wayback", ascii_case_insensitive)]
#[default]
WaybackMachine,
}
impl Archive {
pub async fn get_archive_snapshot(
&self,
url: &Url,
timeout: Duration,
) -> Result<Option<Url>, Error> {
let function = match self {
Archive::WaybackMachine => wayback::get_archive_snapshot,
};
function(url, timeout).await
}
}