///|
/// Filesystem path helpers and pm3 directory layout.
///
/// pm3 deliberately keeps its own, tiny path layer instead of pulling in a
/// platform path library: the daemon only ever deals with POSIX-style paths.
///|
/// Return the directory part of `path` (everything before the last `/`).
/// Returns `"."` when there is no separator.
pub fn path_dirname(path : String) -> String {
let view = path.view()
match view.rev_find("/") {
Some(index) =>
if index == 0 {
"/"
} else {
view.view(start_offset=0, end_offset=index).to_owned()
}
None => "."
}
}
///|
/// Return the final component of `path`.
pub fn path_basename(path : String) -> String {
let view = path.view()
match view.rev_find("/") {
Some(index) =>
view.view(start_offset=index + 1, end_offset=view.length()).to_owned()
None => path
}
}
///|
/// Join two path segments with a single `/`.
pub fn path_join(left : String, right : String) -> String {
if left.length() == 0 {
return right
}
if left.view().has_suffix("/") {
"\{left}\{right}"
} else {
"\{left}/\{right}"
}
}
///|
/// Resolve a `pm3 start