pth/
as_path.rs

1/// Define a private namespace for all its items.
2mod private
3{
4  #[ allow( unused_imports, clippy ::wildcard_imports ) ]
5  use crate :: *;
6  #[ cfg( feature = "no_std" ) ]
7  extern crate std;
8
9  use std ::path ::Path;
10
11  /// A trait for converting various types into a reference to a `Path`.
12  ///
13  /// This trait is used to avoid redundant allocation of memory by providing a reference to a `Path`.
14  /// It is implemented only for types that can either be referenced or are references to `Path` itself.
15  /// Unlike `TryIntoPath`, it does not allocate memory on the heap. However, `TryIntoPath` is implemented for a wider range of types because it is not restricted from allocating memory.
16  /// Unlike `AsRef< Path >`, `AsPath` is implemented for a wider number of types, including those that are not directly convertible to a `Path` using `AsRef`.
17  /// This is because `AsPath` is designed to provide a more flexible interface for path-like types, accommodating various representations that can logically be treated as paths.
18  pub trait AsPath
19  {
20  /// Converts the implementing type into a reference to a `Path`.
21  ///
22  /// # Returns
23  ///
24  /// A reference to a `Path`.
25  fn as_path( &self ) -> &Path;
26 }
27
28  /// Implementation of `AsPath` for `str`.
29  impl AsPath for str
30  {
31  fn as_path( &self ) -> &Path
32  {
33   Path ::new( self )
34 }
35 }
36
37  /// Implementation of `AsPath` for `Path`.
38  impl AsPath for Path
39  {
40  fn as_path( &self ) -> &Path
41  {
42   self
43 }
44 }
45
46  /// Implementation of `AsPath` for `Utf8Path`.
47  #[ cfg( feature = "path_utf8" ) ]
48  impl AsPath for Utf8Path
49  {
50  fn as_path( &self ) -> &Path
51  {
52   self.as_std_path()
53 }
54 }
55
56  /// Blanket implementation of `AsPath` for all types that implement `AsRef< Path >`.
57  impl< T > AsPath for T
58  where
59  T: AsRef< Path >,
60  {
61  fn as_path( &self ) -> &Path
62  {
63   self.as_ref()
64 }
65 }
66}
67
68crate ::mod_interface!
69{
70  orphan use AsPath;
71}