PackageTrack
Sign in Get early access

path-slash

Conversion to/from a file path from/to slash path

0.2.1 35M downloads/mo #1545 most downloaded on crates.io rhysd/path-slash

What this package is like to depend on

Last release 4 years ago

no release in 18 months

Release timing varies

gaps range from 2 weeks to 1.4 years

Most releases are documented

notes for 8 of 9 stable releases

Nothing withdrawn

no release was ever pulled

8 years old

9 releases · first in 2018

0 releases in the last 12 months

see the full history below

Release timeline

9 releases · Dec 2018 to Aug 2022
2019 2020 2021 2022 2023 2024 2025 2026
Release Pre-release

Releases

latest 9
  1. 0.2.1 06 Aug 2022
    Release notes
    • Added CowExt::to_slash and CowExt::to_slash_lossy. PathExt is no longer necessary to convert Cow<'a, Path> paths into slash paths.
    • Clarified minimum supported Rust version. Rust 1.38 or later is supported. rust-version field in Cargo.toml was added so that cargo can check the MSRV is met.
    • Improved documents of trait methods. The documents were moved from implementations of the trait methods to definitions of them so that users can find out the documents more easily. Documents for implementations are folded by default, but definitions aren't.
    Open source →
    Release notes
    • Added CowExt::to_slash and Cow::to_slash_lossy. PathExt is no longer necessary to convert Cow<'a, Path> paths into slash paths.
    • Clarified minimum supported Rust version. Rust 1.38 or later is supported. rust-version field in Cargo.toml was added so that cargo can check the MSRV is met.
    • Improved documents of trait methods. The documents were moved from implementations of the trait methods to definitions of them so that users can find out the documents more easily. Documents for implementations are folded by default, but definitions aren't.

    [Changes][v0.2.1]

    <a name="v0.2.0"></a>

    Open source →
  2. 0.2.0 05 Jul 2022
    Release notes
    • BREAKING: to_slash and to_slash_lossy return Cow<'_, str> instead of String. Now heap allocation hapnens only when path separator is replaced. On Unix-like OS, almost all heap allocations can be removed by this change. Migrating from 0.1 to 0.2 is quite easy by adding Cow::into_owned call. If &str is sufficient for your use case, Cow::as_ref is better to avoid heap allocation. (#9)
      use path_slash::PathExt as _;
      
      // 0.1
      let s: Option<String> = Path::new("/a/b").to_slash();
      let s: String = Path::new("/a/b").to_slash_lossy();
      // 0.2
      let s: Option<String> = Path::new("/a/b").to_slash().map(Cow::into_owned);
      let s: String = Path::new("/a/b").to_slash_lossy().into_owned();
      API changes are as follows:
      • 0.1.5
        • Path::to_slash(&self) -> Option<String>
        • Path::to_slash_lossy(&self) -> String
      • 0.2.0
        • Path::to_slash(&self) -> Option<Cow<'_, Path>>
        • Path::to_slash_lossy(&self) -> Cow<'_, Path>
    • BREAKING: Fix inconsistency on Windows and on Unix-like OS in terms of trailing slash in path. Now a trailing slash in path is always preserved. (#10)
      // 0.1
      #[cfg(target_os = "windows")]
      assert_eq!(Path::new(r"\a\b\").to_slash_lossy(), "/a/b"); // Trailing slash is removed
      #[cfg(not(target_os = "windows"))]
      assert_eq!(Path::new("/a/b/").to_slash_lossy(), "/a/b/"); // Trailing slash is preserved
      
      // 0.2
      #[cfg(target_os = "windows")]
      assert_eq!(Path::new(r"\a\b\").to_slash_lossy(), "/a/b/"); // Trailing slash is preserved
      #[cfg(not(target_os = "windows"))]
      assert_eq!(Path::new("/a/b/").to_slash_lossy(), "/a/b/"); // Trailing slash is preserved
    • New API path_slash::CowExt is added to extend Cow<'_, Path>. Its methods convert slash paths into Cow<'_, Path>. It is useful to avoid heap allocations as much as possible compared with PathBufExt. See the API document for more details. (#9)
      use path_slash::CowExt as _;
      let p = Cow::from_slash("foo/bar/piyo.txt"); // Heap allocation only happens on Windows
      
      #[cfg(target_os = "windows")]
      assert_eq!(p, Cow::Owned(PathBuf::from(r"foo\bar\piyo.txt")));
      #[cfg(not(target_os = "windows"))]
      assert_eq!(p, Cow::Borrowed(Path::new("foo/bar/piyo.txt")));
      All methods added by importing CowExt are as follows:
      • Cow::<Path>::from_slash(s: &str) -> Self
      • Cow::<Path>::from_slash_lossy(s: &OsStr) -> Self
      • Cow::<Path>::from_backslash(s: &str) -> Self
      • Cow::<Path>::from_backslash_lossy(s: &OsStr) -> Self
    • More tests are added. Now the line coverage is 100%.
      • UTF-16 test cases for native encoding on Windows
      • All error cases including broken UTF-8 and UTF-16 sequences
    Open source →
    Release notes
    • BREAKING: to_slash and to_slash_lossy return Cow<'_, str> instead of String. Now heap allocation hapnens only when path separator is replaced. On Unix-like OS, almost all heap allocations can be removed by this change. Migrating from 0.1 to 0.2 is quite easy by adding Cow::into_owned call. If &str is sufficient for your use case, Cow::as_ref is better to avoid heap allocation. (#9)
      use path_slash::PathExt as _;
      
      // 0.1
      let s: Option<String> = Path::new("/a/b").to_slash();
      let s: String = Path::new("/a/b").to_slash_lossy();
      // 0.2
      let s: Option<String> = Path::new("/a/b").to_slash().map(Cow::into_owned);
      let s: String = Path::new("/a/b").to_slash_lossy().into_owned();
      
      API changes are as follows:
      • 0.1.5
        • Path::to_slash(&self) -> Option<String>
        • Path::to_slash_lossy(&self) -> String
      • 0.2.0
        • Path::to_slash(&self) -> Option<Cow<'_, Path>>
        • Path::to_slash_lossy(&self) -> Cow<'_, Path>
    • BREAKING: Fix inconsistency on Windows and on Unix-like OS in terms of trailing slash in path. Now a trailing slash in path is always preserved. (#10)
      // 0.1
      #[cfg(target_os = "windows")]
      assert_eq!(Path::new(r"\a\b\").to_slash_lossy(), "/a/b"); // Trailing slash is removed
      #[cfg(not(target_os = "windows"))]
      assert_eq!(Path::new("/a/b/").to_slash_lossy(), "/a/b/"); // Trailing slash is preserved
      
      // 0.2
      #[cfg(target_os = "windows")]
      assert_eq!(Path::new(r"\a\b\").to_slash_lossy(), "/a/b/"); // Trailing slash is preserved
      #[cfg(not(target_os = "windows"))]
      assert_eq!(Path::new("/a/b/").to_slash_lossy(), "/a/b/"); // Trailing slash is preserved
      
    • New API path_slash::CowExt is added to extend Cow<'_, Path>. Its methods convert slash paths into Cow<'_, Path>. It is useful to avoid heap allocations as much as possible compared with PathBufExt. See the API document for more details. (#9)
      use path_slash::CowExt as _;
      let p = Cow::from_slash("foo/bar/piyo.txt"); // Heap allocation only happens on Windows
      
      #[cfg(target_os = "windows")]
      assert_eq!(p, Cow::Owned(PathBuf::from(r"foo\bar\piyo.txt")));
      #[cfg(not(target_os = "windows"))]
      assert_eq!(p, Cow::Borrowed(Path::new("foo/bar/piyo.txt")));
      
      All methods added by importing CowExt are as follows:
      • Cow::<Path>::from_slash(s: &str) -> Self
      • Cow::<Path>::from_slash_lossy(s: &OsStr) -> Self
      • Cow::<Path>::from_backslash(s: &str) -> Self
      • Cow::<Path>::from_backslash_lossy(s: &OsStr) -> Self
    • More tests are added. Now the line coverage is 100%.
      • UTF-16 test cases for native encoding on Windows
      • All error cases including broken UTF-8 and UTF-16 sequences

    [Changes][v0.2.0]

    <a name="v0.1.5"></a>

    Open source →
    Release notes
    • BREAKING: to_slash and to_slash_lossy return Cow<'_, str> instead of String. Now heap allocation hapnens only when path separator is replaced. On Unix-like OS, almost all heap allocations can be removed by this change. Migrating from 0.1 to 0.2 is easy by adding Cow::into_owned call. (#9)
      use path_slash::PathExt as _;
      
      // 0.1
      let s: Option<String> = Path::new("/a/b").to_slash();
      let s: String = Path::new("/a/b").to_slash_lossy();
      // 0.2
      let s: Option<String> = Path::new("/a/b").to_slash().map(Cow::into_owned);
      let s: String = Path::new("/a/b").to_slash_lossy().into_owned();
      
      API changes are as follows:
      • 0.1.5
        • Path::to_slash(&self) -> Option<String>
        • Path::to_slash_lossy(&self) -> String
      • 0.2.0
        • Path::to_slash(&self) -> Option<Cow<'_, Path>>
        • Path::to_slash_lossy(&self) -> Cow<'_, Path>
    • BREAKING: Fix inconsistency on Windows and on Unix-like OS in terms of trailing slash in path. Now a trailing slash in path is always preserved. (#10)
      // 0.1
      #[cfg(target_os = "windows")]
      assert_eq!(Path::new(r"\a\b\").to_slash_lossy(), "/a/b"); // Trailing slash is removed
      #[cfg(not(target_os = "windows"))]
      assert_eq!(Path::new(r"\a\b\").to_slash_lossy(), "/a/b/"); // Trailing slash is preserved
      
      // 0.2
      #[cfg(target_os = "windows")]
      assert_eq!(Path::new(r"\a\b\").to_slash_lossy(), "/a/b/"); // Trailing slash is preserved
      #[cfg(not(target_os = "windows"))]
      assert_eq!(Path::new(r"\a\b\").to_slash_lossy(), "/a/b/"); // Trailing slash is preserved
      
    • New API path_slash::CowExt is added to extend Cow<'_, Path>. Methods to convert slash paths to Cow<'_, Path> are available. It is useful to avoid heap allocation as much as possible comparing with PathBufExt. See the API document for more details. (#9)
      use path_slash::CowExt as _;
      let p = Cow::from_slash("foo/bar/piyo.txt"); // Heap allocation only happens on Windows
      
      #[cfg(target_os = "windows")]
      assert_eq!(p, Cow::Owned(PathBuf::from(r"foo\bar\piyo.txt")));
      #[cfg(not(target_os = "windows"))]
      assert_eq!(p, Cow::Borrowed(Path::new("foo/bar/piyo.txt")));
      
      All methods added by importing CowExt are as follows:
      • Cow::<Path>::from_slash(s: &str) -> Self
      • Cow::<Path>::from_slash_lossy(s: &OsStr) -> Self
      • Cow::<Path>::from_backslash(s: &str) -> Self
      • Cow::<Path>::from_backslash_lossy(s: &OsStr) -> Self
    • More tests are added. Now the line coverage is 100%.
      • UTF-16 test cases for native encoding on Windows
      • All error cases including broken UTF-8 and UTF-16 sequences

    [Changes][v0.2.0]

    <a name="v0.1.5"></a>

    Open source →
  3. 0.1.5 29 Jun 2022
    Release notes
    • Add new APIs to convert backslash paths to PathBuf. (#8, thanks @picobyte)
      • PathBuf::from_backslash converts &str into PathBuf with replacing \ on non-Windows OS
      • PathBuf::from_backslash_lossy converts &OsStr into PathBuf with replacing \ on non-Windows OS
    Open source →
    Release notes
    • Add new APIs to convert backslash paths to PathBuf. (#8, thanks @picobyte)
      • PathBuf::from_backslash converts &str into PathBuf with replacing \ on non-Windows OS
      • PathBuf::from_backslash_lossy converts &OsStr into PathBuf with replacing \ on non-Windows OS

    [Changes][v0.1.5]

    <a name="v0.1.4"></a>

    Open source →
    Release notes
    • Add new APIs to convert backslash paths to PathBuf. (#8, thanks @picobyte)
      • PathBuf::from_backslash converts &str into PathBuf with replacing \ on non-Windows OS
      • PathBuf::from_backslash converts &OsStr into PathBuf with replacing \ on non-Windows OS

    [Changes][v0.1.5]

    <a name="v0.1.4"></a>

    Open source →
  4. 0.1.4 15 Jan 2021
    Release notes
    • Fix a final letter of paths with some verbatim prefixes was removed (#5)
    Open source →
    Release notes
    • Fix a final letter of paths with some verbatim prefixes was removed (#5)

    [Changes][v0.1.4]

    <a name="v0.1.3"></a>

    Open source →
    Release notes
    • Fix a final letter of paths with some verbatim prefixes was removed (#5)

    [Changes][v0.1.4]

    <a name="v0.1.3"></a>

    Open source →
  5. 0.1.3 01 Jul 2020
    Release notes
    • Fix documentation (#4)
    Open source →
    Release notes
    • Fix documentation (#4)

    [Changes][v0.1.3]

    <a name="v0.1.2"></a>

    Open source →
    Release notes
    • Fix documentation (#4)

    [Changes][v0.1.3]

    <a name="v0.1.2"></a>

    Open source →
  6. 0.1.2 16 Jun 2020
    Release notes
    • Fix: Root path separator was doubled when the path contains Windows driver letter. For example, when C:/foo was given, to_slash converted it to C:\\foo. In this version it converts it to C:\foo correctly.
    • Improve: Remove a redundant allocation at calling to_slash() method.
    Open source →
    Release notes
    • Fix: Root path separator was doubled when the path contains Windows driver letter. For example, when C:/foo was given, to_slash converted it to C:\\foo. In this version it converts it to C:\foo correctly.
    • Improve: Remove a redundant allocation at calling to_slash() method.

    Changes

    <!-- Generated by https://github.com/rhysd/changelog-from-release -->

    Open source →
    Release notes
    • Fix: Root path separator was doubled when the path contains Windows driver letter. For example, when C:/foo was given, to_slash converted it to C:\\foo. In this version it converts it to C:\foo correctly.
    • Improve: Remove a redundant allocation at calling to_slash() method.

    Changes

    <!-- Generated by https://github.com/rhysd/changelog-from-release -->

    Open source →
  7. 0.1.1 12 Jan 2019
    Release notes

    (cargo-release) version 0.1.1

    Open source →
  8. 0.1.0 30 Dec 2018
    Release notes

    (cargo-release) version 0.1.0

    Open source →
  9. 0.0.1 30 Dec 2018

    Nothing published for this version

Every package, every release, already written down.

The archive is open and free. Watching your own project is what we are building next.

Browse the archive