Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'helix-core/src/uri.rs')
| -rw-r--r-- | helix-core/src/uri.rs | 25 |
1 files changed, 6 insertions, 19 deletions
diff --git a/helix-core/src/uri.rs b/helix-core/src/uri.rs index ddb9fb7a..cbe0fadd 100644 --- a/helix-core/src/uri.rs +++ b/helix-core/src/uri.rs @@ -1,15 +1,18 @@ use std::{ fmt, path::{Path, PathBuf}, + sync::Arc, }; /// A generic pointer to a file location. /// /// Currently this type only supports paths to local files. +/// +/// Cloning this type is cheap: the internal representation uses an Arc. #[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)] #[non_exhaustive] pub enum Uri { - File(PathBuf), + File(Arc<Path>), } impl Uri { @@ -26,27 +29,11 @@ impl Uri { Self::File(path) => Some(path), } } - - pub fn as_path_buf(self) -> Option<PathBuf> { - match self { - Self::File(path) => Some(path), - } - } } impl From<PathBuf> for Uri { fn from(path: PathBuf) -> Self { - Self::File(path) - } -} - -impl TryFrom<Uri> for PathBuf { - type Error = (); - - fn try_from(uri: Uri) -> Result<Self, Self::Error> { - match uri { - Uri::File(path) => Ok(path), - } + Self::File(path.into()) } } @@ -93,7 +80,7 @@ impl std::error::Error for UrlConversionError {} fn convert_url_to_uri(url: &url::Url) -> Result<Uri, UrlConversionErrorKind> { if url.scheme() == "file" { url.to_file_path() - .map(|path| Uri::File(helix_stdx::path::normalize(path))) + .map(|path| Uri::File(helix_stdx::path::normalize(path).into())) .map_err(|_| UrlConversionErrorKind::UnableToConvert) } else { Err(UrlConversionErrorKind::UnsupportedScheme) |