use std::{
io,
path::{
Path,
PathBuf,
},
};
use url::Url;
use crate::{
error::StoreError,
value::Value,
};
pub(crate) fn read_transform(value: Result<&[u8], StoreError>) -> Result<Value, StoreError> {
match value {
Ok(bytes) => Value::from_tagged_slice(bytes).map_err(StoreError::DataError),
Err(e) => Err(e),
}
}
pub(crate) fn canonicalize_path<'p, P>(path: P) -> io::Result<PathBuf>
where
P: Into<&'p Path>,
{
let canonical = path.into().canonicalize()?;
Ok(if cfg!(target_os = "windows") {
let map_err = |_| io::Error::new(io::ErrorKind::Other, "path canonicalization error");
Url::from_file_path(&canonical).and_then(|url| url.to_file_path()).map_err(map_err)?
} else {
canonical
})
}