summaryrefslogtreecommitdiff
path: root/src/util.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/util.rs')
-rw-r--r--src/util.rs26
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