diff options
Diffstat (limited to 'src/util.rs')
-rw-r--r-- | src/util.rs | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/util.rs b/src/util.rs index eac71f1..227f251 100644 --- a/src/util.rs +++ b/src/util.rs @@ -1,6 +1,7 @@ use libc::{timespec, utimensat, AT_FDCWD, AT_SYMLINK_NOFOLLOW}; use log::{debug, error, trace}; use std::ffi::CString; +use std::io::Write; use std::os::unix::ffi::OsStrExt; use std::path::{Component, Path, PathBuf}; use std::time::{SystemTime, UNIX_EPOCH}; @@ -19,6 +20,14 @@ pub enum UtilError { #[error("failed to copy {0} to {1}")] CopyFile(PathBuf, PathBuf, #[source] std::io::Error), + /// Failed to create a file. + #[error("failed to create file {0}")] + CreateFile(PathBuf, #[source] std::io::Error), + + /// Failed to write to a file. + #[error("failed to write to file {0}")] + FileWrite(PathBuf, #[source] std::io::Error), + #[error("failed to get file metadata: {0}")] FileMetadata(PathBuf, #[source] std::io::Error), @@ -48,6 +57,23 @@ pub fn copy(src: &Path, dest: &Path) -> Result<(), UtilError> { Ok(()) } +pub fn write(filename: &Path, content: &str) -> Result<(), UtilError> { + if let Some(parent) = filename.parent() { + trace!("parent: {}", parent.display()); + if !parent.exists() { + debug!("creating directory {}", parent.display()); + std::fs::create_dir_all(parent).map_err(|e| UtilError::CreateDir(parent.into(), e))?; + } + } + + trace!("writing HTML: {}", filename.display()); + let mut f = + std::fs::File::create(filename).map_err(|e| UtilError::CreateFile(filename.into(), e))?; + f.write_all(content.as_bytes()) + .map_err(|e| UtilError::FileWrite(filename.into(), e))?; + Ok(()) +} + pub fn get_mtime(src: &Path) -> Result<SystemTime, UtilError> { let metadata = std::fs::metadata(src).map_err(|e| UtilError::FileMetadata(src.into(), e))?; let mtime = metadata |