use std::path::{Path, PathBuf};


pub trait PathExt {
    /// appends a `path` to self. if `path` is a unix-like rooted path, then it is transformed into a relative path.
    ///
    /// # examples
    ///
    /// ```
    /// # use std::path::PathBuf;
    /// # use hina::path::PathExt;
    ///
    /// let mut path = PathBuf::from("/home/code");
    /// path.append("/rust/projects/awesome");
    ///
    /// let expected = PathBuf::from("/home/code/rust/projects/awesome");
    /// assert_eq!(path, expected);
    /// ```
    fn append(&mut self, path: impl AsRef<Path>);
}

impl PathExt for PathBuf {
    fn append(&mut self, path: impl AsRef<Path>) {
        crate::path::util::__for_internal_usage_only_append__(self, path);
    }
}