pub struct UnixString(/* private fields */);Implementations§
Source§impl UnixString
impl UnixString
pub fn as_ptr(&self) -> *const u8
Sourcepub fn try_from_string(s: String) -> Result<UnixString, Error>
pub fn try_from_string(s: String) -> Result<UnixString, Error>
Sourcepub fn try_from_vec(s: Vec<u8>) -> Result<UnixString, Error>
pub fn try_from_vec(s: Vec<u8>) -> Result<UnixString, Error>
Sourcepub fn try_from_bytes(s: &[u8]) -> Result<UnixString, Error>
pub fn try_from_bytes(s: &[u8]) -> Result<UnixString, Error>
Create a UnixString from a &[u8].
Will allocate and push a null byte if not null terminated
§Errors
Bytes aren’t properly null terminated, several nulls contained.
Sourcepub fn try_from_str(s: &str) -> Result<UnixString, Error>
pub fn try_from_str(s: &str) -> Result<UnixString, Error>
Create a UnixString from a &str.
Will allocate and push a null byte if not null terminated
§Errors
String isn’t properly null terminated, several nulls contained.
Sourcepub fn from_format(args: Arguments<'_>) -> UnixString
pub fn from_format(args: Arguments<'_>) -> UnixString
A slightly less efficient that creating a format string way of
creating a UnixString, since it’ll in all likelihood lead to two allocations.
Can’t do much since fmt internals are feature gated in core.
Still a bit more ergonomic than creating a format-String and then creating a UnixString from that.
More efficient if a null byte is added to the format strings.
§Example
use rusl::string::unix_str::UnixString;
fn create_format_unix_string() {
let ins_with = "gramar";
let good = UnixString::from_format(format_args!("/home/{ins_with}/code"));
assert_eq!("/home/gramar/code", good.as_str().unwrap());
let great = UnixString::from_format(format_args!("/home/{ins_with}/code\0"));
assert_eq!("/home/gramar/code", great.as_str().unwrap());
}Methods from Deref<Target = UnixStr>§
pub const EMPTY: &'static UnixStr
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());
}Trait Implementations§
Source§impl AsRef<UnixStr> for UnixString
Available on crate feature alloc only.
impl AsRef<UnixStr> for UnixString
alloc only.Source§impl Clone for UnixString
impl Clone for UnixString
Source§fn clone(&self) -> UnixString
fn clone(&self) -> UnixString
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for UnixString
Available on crate feature alloc only.
impl Debug for UnixString
alloc only.Source§impl Deref for UnixString
Available on crate feature alloc only.
impl Deref for UnixString
alloc only.Source§impl From<&UnixStr> for UnixString
Available on crate feature alloc only.
impl From<&UnixStr> for UnixString
alloc only.Source§fn from(s: &UnixStr) -> UnixString
fn from(s: &UnixStr) -> UnixString
Source§impl FromStr for UnixString
Available on crate feature alloc only.
impl FromStr for UnixString
alloc only.