Skip to main content

yazi_shared/path/
conversion.rs

1use super::{PathBufDyn, PathDyn};
2use crate::path::PathCow;
3
4// --- AsPath
5pub trait AsPath {
6	fn as_path(&self) -> PathDyn<'_>;
7}
8
9impl AsPath for std::path::Path {
10	fn as_path(&self) -> PathDyn<'_> { PathDyn::Os(self) }
11}
12
13impl AsPath for std::path::PathBuf {
14	fn as_path(&self) -> PathDyn<'_> { PathDyn::Os(self) }
15}
16
17impl AsPath for typed_path::UnixPath {
18	fn as_path(&self) -> PathDyn<'_> { PathDyn::Unix(self) }
19}
20
21impl AsPath for typed_path::UnixPathBuf {
22	fn as_path(&self) -> PathDyn<'_> { PathDyn::Unix(self) }
23}
24
25impl AsPath for PathDyn<'_> {
26	fn as_path(&self) -> PathDyn<'_> { *self }
27}
28
29impl AsPath for PathBufDyn {
30	fn as_path(&self) -> PathDyn<'_> {
31		match self {
32			Self::Os(p) => PathDyn::Os(p),
33			Self::Unix(p) => PathDyn::Unix(p),
34		}
35	}
36}
37
38impl AsPath for PathCow<'_> {
39	fn as_path(&self) -> PathDyn<'_> {
40		match self {
41			PathCow::Borrowed(p) => *p,
42			PathCow::Owned(p) => p.as_path(),
43		}
44	}
45}
46
47impl AsPath for super::Components<'_> {
48	fn as_path(&self) -> PathDyn<'_> { self.path() }
49}
50
51// --- AsPathRef
52pub trait AsPathRef<'a> {
53	fn as_path_ref(self) -> PathDyn<'a>;
54}
55
56impl<'a> AsPathRef<'a> for PathDyn<'a> {
57	fn as_path_ref(self) -> Self { self }
58}