Skip to content

Releases: rhysd/path-slash

v0.2.1

06 Aug 12:22
Compare
Choose a tag to compare
  • 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.

v0.2.0

05 Jul 12:23
Compare
Choose a tag to compare
  • 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

v0.1.5

29 Jun 03:37
Compare
Choose a tag to compare
  • 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

v0.1.4

15 Jan 14:36
Compare
Choose a tag to compare
  • Fix a final letter of paths with some verbatim prefixes was removed (#5)

v0.1.3

01 Jul 00:05
Compare
Choose a tag to compare
  • Fix documentation (#4)

0.1.2

16 Jun 14:19
Compare
Choose a tag to compare
  • 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.