use serde::{Deserialize, Serialize};
use super::provider::ArchiveProvider;
use super::DOI_REGEX;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DepositResult {
pub doi: String,
pub record_id: String,
pub url: String,
pub provider: ArchiveProvider,
}
impl DepositResult {
pub fn generate_url(&self) -> String {
self.url.clone()
}
pub fn doi_url(&self) -> String {
format!("https://doi.org/{}", self.doi)
}
}
#[derive(Debug, Clone, thiserror::Error)]
pub enum DepositError {
#[error("No files provided for deposit")]
NoFiles,
#[error("Authentication failed")]
AuthenticationFailed,
#[error("Invalid metadata: {0}")]
InvalidMetadata(String),
#[error("Upload failed: {0}")]
UploadFailed(String),
#[error("API error: {0}")]
ApiError(String),
}
pub fn validate_doi(doi: &str) -> bool {
DOI_REGEX.is_match(doi)
}