entrenar/research/archive/
provider.rs1use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
7pub enum ArchiveProvider {
8 Zenodo,
10 Figshare,
12 Dryad,
14 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 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 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 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}