pub enum Utf8WindowsComponent<'a> {
Prefix(Utf8WindowsPrefixComponent<'a>),
RootDir,
CurDir,
ParentDir,
Normal(&'a str),
}
Expand description
str
slice version of std::path::Component
that represents a Windows-specific component
Variants§
Implementations§
Source§impl<'a> Utf8WindowsComponent<'a>
impl<'a> Utf8WindowsComponent<'a>
Sourcepub fn as_path<T>(&self) -> &Utf8Path<T>where
T: Utf8Encoding,
pub fn as_path<T>(&self) -> &Utf8Path<T>where
T: Utf8Encoding,
Returns path representing this specific component
Sourcepub fn from_utf8(component: &WindowsComponent<'a>) -> Result<Self, Utf8Error>
pub fn from_utf8(component: &WindowsComponent<'a>) -> Result<Self, Utf8Error>
Converts a non-UTF-8 WindowsComponent
to a UTF-8 Utf8WindowsComponent
by checking that
the component contains valid UTF-8.
§Errors
Returns Err
if the component is not UTF-8 with a description as to why the
provided component is not UTF-8.
§Examples
Basic usage:
use typed_path::{Utf8Component, WindowsComponent, Utf8WindowsComponent};
// some bytes, in a vector
let component = WindowsComponent::Normal(&[240, 159, 146, 150]);
// We know these bytes are valid, so just use `unwrap()`.
let utf8_component = Utf8WindowsComponent::from_utf8(&component).unwrap();
assert_eq!("💖", utf8_component.as_str());
Incorrect bytes:
use typed_path::{WindowsComponent, Utf8WindowsComponent};
// some invalid bytes, in a vector
let component = WindowsComponent::Normal(&[0, 159, 146, 150]);
assert!(Utf8WindowsComponent::from_utf8(&component).is_err());
See the docs for Utf8Error
for more details on the kinds of
errors that can be returned.
Sourcepub unsafe fn from_utf8_unchecked(component: &WindowsComponent<'a>) -> Self
pub unsafe fn from_utf8_unchecked(component: &WindowsComponent<'a>) -> Self
Converts a non-UTF-8 WindowsComponent
to a UTF-8 Utf8WindowsComponent
without checking
that the string contains valid UTF-8.
See the safe version, from_utf8
, for more information.
§Safety
The bytes passed in must be valid UTF-8.
§Examples
Basic usage:
use typed_path::{Utf8Component, WindowsComponent, Utf8WindowsComponent};
// some bytes, in a vector
let component = WindowsComponent::Normal(&[240, 159, 146, 150]);
let utf8_component = unsafe {
Utf8WindowsComponent::from_utf8_unchecked(&component)
};
assert_eq!("💖", utf8_component.as_str());
Sourcepub fn prefix(self) -> Option<Utf8WindowsPrefixComponent<'a>>
pub fn prefix(self) -> Option<Utf8WindowsPrefixComponent<'a>>
Converts from Utf8WindowsComponent
to Option<Utf8WindowsPrefixComponent>
Converts self
into an Option<Utf8WindowsPrefixComponent>
, consuming self
, and
discarding if not a Utf8WindowsPrefixComponent
Sourcepub fn prefix_kind(self) -> Option<Utf8WindowsPrefix<'a>>
pub fn prefix_kind(self) -> Option<Utf8WindowsPrefix<'a>>
Converts from Utf8WindowsComponent
to Option<Utf8WindowsPrefix>
Converts self
into an Option<Utf8WindowsPrefix>
, consuming self
, and
discarding if not a Utf8WindowsPrefixComponent
whose kind
method we invoke
Trait Implementations§
Source§impl AsRef<[u8]> for Utf8WindowsComponent<'_>
impl AsRef<[u8]> for Utf8WindowsComponent<'_>
Source§impl<T> AsRef<Utf8Path<T>> for Utf8WindowsComponent<'_>where
T: Utf8Encoding,
impl<T> AsRef<Utf8Path<T>> for Utf8WindowsComponent<'_>where
T: Utf8Encoding,
Source§impl AsRef<str> for Utf8WindowsComponent<'_>
impl AsRef<str> for Utf8WindowsComponent<'_>
Source§impl<'a> Clone for Utf8WindowsComponent<'a>
impl<'a> Clone for Utf8WindowsComponent<'a>
Source§fn clone(&self) -> Utf8WindowsComponent<'a>
fn clone(&self) -> Utf8WindowsComponent<'a>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl<'a> Debug for Utf8WindowsComponent<'a>
impl<'a> Debug for Utf8WindowsComponent<'a>
Source§impl Display for Utf8WindowsComponent<'_>
impl Display for Utf8WindowsComponent<'_>
Source§impl<'a> Hash for Utf8WindowsComponent<'a>
impl<'a> Hash for Utf8WindowsComponent<'a>
Source§impl<'a> Ord for Utf8WindowsComponent<'a>
impl<'a> Ord for Utf8WindowsComponent<'a>
Source§fn cmp(&self, other: &Utf8WindowsComponent<'a>) -> Ordering
fn cmp(&self, other: &Utf8WindowsComponent<'a>) -> Ordering
1.21.0 · Source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
Source§impl<'a> PartialEq for Utf8WindowsComponent<'a>
impl<'a> PartialEq for Utf8WindowsComponent<'a>
Source§impl<'a> PartialOrd for Utf8WindowsComponent<'a>
impl<'a> PartialOrd for Utf8WindowsComponent<'a>
Source§impl<'a> TryFrom<&'a str> for Utf8WindowsComponent<'a>
impl<'a> TryFrom<&'a str> for Utf8WindowsComponent<'a>
Source§fn try_from(path: &'a str) -> Result<Self, Self::Error>
fn try_from(path: &'a str) -> Result<Self, Self::Error>
Parses the byte slice into a Utf8WindowsComponent
§Examples
use typed_path::{Utf8WindowsComponent, Utf8WindowsPrefix};
use std::convert::TryFrom;
// Supports parsing Windows prefixes
let component = Utf8WindowsComponent::try_from("c:").unwrap();
assert_eq!(component.prefix_kind(), Some(Utf8WindowsPrefix::Disk('C')));
// Supports parsing standard windows path components
assert_eq!(Utf8WindowsComponent::try_from(r"\"), Ok(Utf8WindowsComponent::RootDir));
assert_eq!(Utf8WindowsComponent::try_from("."), Ok(Utf8WindowsComponent::CurDir));
assert_eq!(Utf8WindowsComponent::try_from(".."), Ok(Utf8WindowsComponent::ParentDir));
assert_eq!(Utf8WindowsComponent::try_from(r"file.txt"), Ok(Utf8WindowsComponent::Normal("file.txt")));
assert_eq!(Utf8WindowsComponent::try_from(r"dir\"), Ok(Utf8WindowsComponent::Normal("dir")));
// Parsing more than one component will fail
assert!(Utf8WindowsComponent::try_from(r"\file").is_err());
Source§impl<'a> Utf8Component<'a> for Utf8WindowsComponent<'a>
impl<'a> Utf8Component<'a> for Utf8WindowsComponent<'a>
Source§fn as_str(&self) -> &'a str
fn as_str(&self) -> &'a str
Extracts the underlying str
slice
§Examples
use typed_path::{Utf8Component, Utf8WindowsPath};
let path = Utf8WindowsPath::new(r"C:\tmp\foo\..\bar.txt");
let components: Vec<_> = path.components().map(|comp| comp.as_str()).collect();
assert_eq!(&components, &["C:", r"\", "tmp", "foo", "..", "bar.txt"]);
Source§fn is_root(&self) -> bool
fn is_root(&self) -> bool
Root is one of two situations
- Is the root separator, e.g.
\windows
- Is a non-disk prefix, e.g.
\\server\share
§Examples
use typed_path::{Utf8Component, Utf8WindowsComponent};
use std::convert::TryFrom;
let root_dir = Utf8WindowsComponent::try_from(r"\").unwrap();
assert!(root_dir.is_root());
let non_disk_prefix = Utf8WindowsComponent::try_from(r"\\?\pictures").unwrap();
assert!(non_disk_prefix.is_root());
let disk_prefix = Utf8WindowsComponent::try_from("C:").unwrap();
assert!(!disk_prefix.is_root());
let normal = Utf8WindowsComponent::try_from("file.txt").unwrap();
assert!(!normal.is_root());
Source§fn is_normal(&self) -> bool
fn is_normal(&self) -> bool
Returns true if component is normal
§Examples
use typed_path::{Utf8Component, Utf8WindowsComponent};
use std::convert::TryFrom;
let normal = Utf8WindowsComponent::try_from("file.txt").unwrap();
assert!(normal.is_normal());
let root_dir = Utf8WindowsComponent::try_from(r"\").unwrap();
assert!(!root_dir.is_normal());
Source§fn is_parent(&self) -> bool
fn is_parent(&self) -> bool
Returns true if is a parent directory component
§Examples
use typed_path::{Utf8Component, Utf8WindowsComponent};
use std::convert::TryFrom;
let parent = Utf8WindowsComponent::try_from("..").unwrap();
assert!(parent.is_parent());
let root_dir = Utf8WindowsComponent::try_from(r"\").unwrap();
assert!(!root_dir.is_parent());
Source§fn is_current(&self) -> bool
fn is_current(&self) -> bool
Returns true if is the current directory component
§Examples
use typed_path::{Utf8Component, Utf8WindowsComponent};
use std::convert::TryFrom;
let current = Utf8WindowsComponent::try_from(".").unwrap();
assert!(current.is_current());
let root_dir = Utf8WindowsComponent::try_from(r"\").unwrap();
assert!(!root_dir.is_current());
Source§fn is_valid(&self) -> bool
fn is_valid(&self) -> bool
Returns true if this component is valid.
A component can only be invalid if it represents a normal component with characters that are disallowed by the encoding.
§Examples
use typed_path::{Utf8Component, Utf8WindowsComponent};
use std::convert::TryFrom;
assert!(Utf8WindowsComponent::try_from("c:").unwrap().is_valid());
assert!(Utf8WindowsComponent::RootDir.is_valid());
assert!(Utf8WindowsComponent::ParentDir.is_valid());
assert!(Utf8WindowsComponent::CurDir.is_valid());
assert!(Utf8WindowsComponent::Normal("abc").is_valid());
assert!(!Utf8WindowsComponent::Normal("|").is_valid());
Source§fn root() -> Self
fn root() -> Self
Returns the root directory component.
§Examples
use typed_path::{Utf8Component, Utf8WindowsComponent};
assert_eq!(Utf8WindowsComponent::root(), Utf8WindowsComponent::RootDir);
Source§fn parent() -> Self
fn parent() -> Self
Returns the parent directory component.
§Examples
use typed_path::{Utf8Component, Utf8WindowsComponent};
assert_eq!(Utf8WindowsComponent::parent(), Utf8WindowsComponent::ParentDir);