Skip to main content

gemini_cli/
fs.rs

1use nils_common::fs as shared_fs;
2use std::io;
3use std::path::Path;
4
5pub const SECRET_FILE_MODE: u32 = shared_fs::SECRET_FILE_MODE;
6
7pub fn sha256_file(path: &Path) -> io::Result<String> {
8    match shared_fs::sha256_file(path) {
9        Ok(hash) => Ok(hash),
10        Err(shared_fs::FileHashError::OpenFile { source, .. }) => Err(source),
11        Err(shared_fs::FileHashError::ReadFile { source, .. }) => Err(source),
12    }
13}
14
15pub fn write_atomic(path: &Path, contents: &[u8], mode: u32) -> io::Result<()> {
16    match shared_fs::write_atomic(path, contents, mode) {
17        Ok(()) => Ok(()),
18        Err(shared_fs::AtomicWriteError::CreateParentDir { source, .. }) => Err(source),
19        Err(shared_fs::AtomicWriteError::CreateTempFile { source, .. }) => Err(source),
20        Err(shared_fs::AtomicWriteError::WriteTempFile { source, .. }) => Err(source),
21        Err(shared_fs::AtomicWriteError::SetPermissions { source, .. }) => Err(source),
22        Err(shared_fs::AtomicWriteError::ReplaceFile { source, .. }) => Err(source),
23        Err(shared_fs::AtomicWriteError::TempPathExhausted { target, .. }) => Err(io::Error::new(
24            io::ErrorKind::AlreadyExists,
25            format!("failed to create unique temp file for {}", target.display()),
26        )),
27    }
28}
29
30pub fn write_timestamp(path: &Path, iso: Option<&str>) -> io::Result<()> {
31    match shared_fs::write_timestamp(path, iso) {
32        Ok(()) => Ok(()),
33        Err(shared_fs::TimestampError::CreateParentDir { source, .. }) => Err(source),
34        Err(shared_fs::TimestampError::WriteFile { source, .. }) => Err(source),
35        Err(shared_fs::TimestampError::RemoveFile { source, .. }) => Err(source),
36    }
37}