use std::path::Path;
use super::traits::{StringFileReader, StringFileWriter, StringFileSetReader};
use crate::string_file::{StringFile, StringFileSet};
#[derive(Debug, Clone, Default)]
pub struct DefaultStringFileReader;
impl StringFileReader for DefaultStringFileReader {
fn read(&self, path: &Path) -> Result<StringFile, Box<dyn std::error::Error>> {
StringFile::new(path.to_path_buf())
}
}
#[derive(Debug, Clone, Default)]
pub struct DefaultStringFileWriter;
impl StringFileWriter for DefaultStringFileWriter {
fn write(&self, file: &StringFile, path: &Path) -> Result<(), Box<dyn std::error::Error>> {
if let Some(parent) = path.parent() {
std::fs::create_dir_all(parent)?;
}
file.write_to_file(path.to_path_buf())
}
}
#[derive(Debug, Clone, Default)]
pub struct DefaultStringFileSetReader;
impl StringFileSetReader for DefaultStringFileSetReader {
fn read_set(
&self,
dir: &Path,
plugin_name: &str,
language: &str,
) -> Result<StringFileSet, Box<dyn std::error::Error>> {
StringFileSet::load_from_directory(dir, plugin_name, language)
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_string_file_reader_nonexistent() {
let reader = DefaultStringFileReader;
let result = reader.read(Path::new("nonexistent.strings"));
assert!(result.is_err());
}
}