use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum ArchiveProvider {
Zenodo,
Figshare,
Dryad,
Dataverse,
}
impl std::fmt::Display for ArchiveProvider {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Self::Zenodo => write!(f, "Zenodo"),
Self::Figshare => write!(f, "Figshare"),
Self::Dryad => write!(f, "Dryad"),
Self::Dataverse => write!(f, "Dataverse"),
}
}
}
impl ArchiveProvider {
pub fn base_url(&self) -> &'static str {
match self {
Self::Zenodo => "https://zenodo.org",
Self::Figshare => "https://figshare.com",
Self::Dryad => "https://datadryad.org",
Self::Dataverse => "https://dataverse.harvard.edu",
}
}
pub fn sandbox_url(&self) -> Option<&'static str> {
match self {
Self::Zenodo => Some("https://sandbox.zenodo.org"),
Self::Figshare => None,
Self::Dryad => None,
Self::Dataverse => None,
}
}
pub fn api_endpoint(&self) -> &'static str {
match self {
Self::Zenodo => "https://zenodo.org/api/deposit/depositions",
Self::Figshare => "https://api.figshare.com/v2/account/articles",
Self::Dryad => "https://datadryad.org/api/v2/datasets",
Self::Dataverse => "https://dataverse.harvard.edu/api/dataverses",
}
}
}