use std::{
borrow::Cow,
fmt::{Display, Formatter},
hash::{DefaultHasher, Hash, Hasher},
path::PathBuf,
};
use url::Url;
#[derive(Clone, Debug, Hash, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum SourcePath {
Anonymous,
Snippet(Cow<'static, str>),
Local(PathBuf),
Remote(Url),
}
impl Display for SourcePath {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
todo!()
}
}
#[derive(Copy, Clone, Eq, PartialEq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct SourceID {
pub(crate) hash: u64,
}
impl SourcePath {
pub fn get_file_id(&self) -> SourceID {
let mut hasher = DefaultHasher::new();
self.hash(&mut hasher);
SourceID { hash: hasher.finish() }
}
}
impl Default for SourcePath {
fn default() -> Self {
Self::Anonymous
}
}