Skip to main content

entrenar/research/archive/
provider.rs

1//! Archive provider definitions.
2
3use serde::{Deserialize, Serialize};
4
5/// Archive provider
6#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
7pub enum ArchiveProvider {
8    /// Zenodo (CERN)
9    Zenodo,
10    /// Figshare
11    Figshare,
12    /// Dryad
13    Dryad,
14    /// Dataverse
15    Dataverse,
16}
17
18impl std::fmt::Display for ArchiveProvider {
19    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
20        match self {
21            Self::Zenodo => write!(f, "Zenodo"),
22            Self::Figshare => write!(f, "Figshare"),
23            Self::Dryad => write!(f, "Dryad"),
24            Self::Dataverse => write!(f, "Dataverse"),
25        }
26    }
27}
28
29impl ArchiveProvider {
30    /// Get the base URL for the provider
31    pub fn base_url(&self) -> &'static str {
32        match self {
33            Self::Zenodo => "https://zenodo.org",
34            Self::Figshare => "https://figshare.com",
35            Self::Dryad => "https://datadryad.org",
36            Self::Dataverse => "https://dataverse.harvard.edu",
37        }
38    }
39
40    /// Get the sandbox URL (if available)
41    pub fn sandbox_url(&self) -> Option<&'static str> {
42        match self {
43            Self::Zenodo => Some("https://sandbox.zenodo.org"),
44            Self::Figshare => None,
45            Self::Dryad => None,
46            Self::Dataverse => None,
47        }
48    }
49
50    /// Get the API endpoint
51    pub fn api_endpoint(&self) -> &'static str {
52        match self {
53            Self::Zenodo => "https://zenodo.org/api/deposit/depositions",
54            Self::Figshare => "https://api.figshare.com/v2/account/articles",
55            Self::Dryad => "https://datadryad.org/api/v2/datasets",
56            Self::Dataverse => "https://dataverse.harvard.edu/api/dataverses",
57        }
58    }
59}