use std::{path::PathBuf, time::SystemTime};
use serde::{Deserialize, Serialize};
use crate::version::GitTarget;
#[derive(Serialize, Deserialize, Debug, Clone, Hash)]
#[serde(untagged, rename_all = "snake_case")]
pub enum Authority {
Path {
path: PathBuf,
crate_name: String,
#[serde(skip_serializing_if = "Option::is_none")]
last_modification: Option<SystemTime>,
},
Git {
crate_name: String,
repository_url: String,
#[serde(skip_serializing_if = "Option::is_none")]
subpath: Option<String>,
#[serde(default)]
#[serde(flatten)]
target: GitTarget,
},
Cargo {
#[serde(skip_serializing_if = "Option::is_none")]
package: Option<String>,
version: semver::Version,
},
}
impl From<Authority> for crate::version::Authority {
fn from(value: Authority) -> Self {
match value {
Authority::Path { path, last_modification, crate_name: _ } => {
Self::Path { path, last_modification }
},
Authority::Git {
repository_url,
subpath,
target,
crate_name: _,
} => Self::Git { repository_url, subpath, target },
Authority::Cargo { version, package: _ } => Self::Registry { version },
}
}
}