pub struct UnixStr(/* private fields */);
Implementations§
Source§impl UnixStr
impl UnixStr
pub const EMPTY: &'static UnixStr
Sourcepub const unsafe fn from_str_unchecked(s: &str) -> &UnixStr
pub const unsafe fn from_str_unchecked(s: &str) -> &UnixStr
§Safety
&str
needs to be null terminated or downstream UB may occur
Sourcepub const unsafe fn from_bytes_unchecked(s: &[u8]) -> &UnixStr
pub const unsafe fn from_bytes_unchecked(s: &[u8]) -> &UnixStr
§Safety
&[u8]
needs to be null terminated or downstream UB may occur
Sourcepub const fn from_str_checked(s: &str) -> &UnixStr
pub const fn from_str_checked(s: &str) -> &UnixStr
Const instantiation of a &UnixStr
from a &str
.
Should only be used in a const
-context, although rustc
does not let me enforce this.
§Panics
This method panics since it’s supposed to produce a comptime error, it’s not particularly efficient.
pub fn match_up_to(&self, other: &UnixStr) -> usize
pub fn match_up_to_str(&self, other: &str) -> usize
pub fn find(&self, other: &UnixStr) -> Option<usize>
pub fn find_buf(&self, other: &[u8]) -> Option<usize>
pub fn ends_with(&self, other: &UnixStr) -> bool
Sourcepub fn path_file_name(&self) -> Option<&UnixStr>
pub fn path_file_name(&self) -> Option<&UnixStr>
Get the last component of a path, if possible.
§Example
use rusl::string::unix_str::UnixStr;
use rusl::unix_lit;
fn get_file_paths() {
// Has no filename, just a root path
let a = unix_lit!("/");
assert_eq!(None, a.path_file_name());
// Has a 'filename'
let a = unix_lit!("/etc");
assert_eq!(Some(unix_lit!("etc")), a.path_file_name());
}
Sourcepub fn path_join(&self, ext: &UnixStr) -> UnixString
pub fn path_join(&self, ext: &UnixStr) -> UnixString
Joins this UnixStr
with some other UnixStr
adding a slash if necessary.
Will make sure that there’s at most one slash at the boundary but won’t check
either string for “path validity” in any other case
§Example
use rusl::string::unix_str::UnixStr;
fn join_paths() {
// Combines slash
let a = UnixStr::try_from_str("path/").unwrap();
let b = UnixStr::try_from_str("/ext").unwrap();
let combined = a.path_join(b);
assert_eq!("path/ext", combined.as_str().unwrap());
// Adds slash
let combined_other_way = b.path_join(a);
assert_eq!("/ext/path/", combined_other_way.as_str().unwrap());
// Doesn't truncate other slashes, only works at the boundary between the two paths
let a = UnixStr::try_from_str("path//").unwrap();
let combined_many_slashes = a.path_join(b);
assert_eq!("path//ext", combined_many_slashes.as_str().unwrap());
}
Sourcepub fn path_join_fmt(&self, args: Arguments<'_>) -> UnixString
pub fn path_join_fmt(&self, args: Arguments<'_>) -> UnixString
Joins this UnixStr
with some format string adding a slash if necessary.
Follows the same rules as UnixStr::path_join
.
§Example
use rusl::string::unix_str::UnixStr;
fn join_paths() {
// Combines slash
let a = UnixStr::try_from_str("path/").unwrap();
let combined = a.path_join_fmt(format_args!("ext"));
assert_eq!("path/ext", combined.as_str().unwrap());
}
Sourcepub fn parent_path(&self) -> Option<UnixString>
pub fn parent_path(&self) -> Option<UnixString>
Treats this UnixStr
as a path, then tries to find its parent.
Will treat any double slash as a path with no parent
§Example
use rusl::string::unix_str::UnixStr;
fn find_parent() {
let well_formed = UnixStr::try_from_str("/home/gramar/code/").unwrap();
let up_one = well_formed.parent_path().unwrap();
assert_eq!("/home/gramar", up_one.as_str().unwrap());
let up_two = up_one.parent_path().unwrap();
assert_eq!("/home", up_two.as_str().unwrap());
let up_three = up_two.parent_path().unwrap();
assert_eq!("/", up_three.as_str().unwrap());
assert!(up_three.parent_path().is_none());
let ill_formed = UnixStr::try_from_str("/home/gramar/code//").unwrap();
assert!(ill_formed.parent_path().is_none());
}