Framework for embedding localizations into Rust types
use std::path::{Path, PathBuf};

use crate::{Context, Localize};

use camino::{Utf8Path, Utf8PathBuf};

macro_rules! impl_std_path {
    ($path_type:ty) => {
        impl Localize for $path_type {
            fn localize(&self, _context: &Context, buffer: &mut String) {
                buffer.push_str(self.to_string_lossy().as_ref());
            }
        }
    };
}

macro_rules! impl_camino_path {
    ($path_type:ty) => {
        impl Localize for $path_type {
            fn localize(&self, _context: &Context, buffer: &mut String) {
                buffer.push_str(self.as_str())
            }
        }
    };
}

impl_std_path!(PathBuf);
impl_std_path!(Path);

impl_camino_path!(Utf8PathBuf);
impl_camino_path!(Utf8Path);