use std::path::{Path, PathBuf};
use easydoc_core::{DocError, Result};
use office_oxide::edit::EditableDocument;
pub struct DocEditor {
path: PathBuf,
doc: EditableDocument,
}
impl DocEditor {
pub fn open(path: &Path) -> Result<Self> {
let doc = EditableDocument::open(path)
.map_err(|e| DocError::Document(format!("cannot open document: {e}")))?;
Ok(Self {
path: path.to_path_buf(),
doc,
})
}
#[must_use]
pub fn replace_text(mut self, find: &str, replace: &str) -> Self {
self.doc.replace_text(find, replace);
self
}
pub fn save(self) -> Result<()> {
self.doc
.save(&self.path)
.map_err(|e| DocError::Document(format!("cannot save document: {e}")))
}
pub fn save_as(self, path: impl AsRef<Path>) -> Result<()> {
self.doc
.save(path.as_ref())
.map_err(|e| DocError::Document(format!("cannot save document: {e}")))
}
}