Skip to content

Commit 37d51cd

Browse files
committed
feat: allow const spooled temporary files
Cursors are stable in rust as of 1.79. This change lets us keep a global scratch file behind a Mutex.
1 parent 89f69e9 commit 37d51cd

File tree

1 file changed

+17
-2
lines changed

1 file changed

+17
-2
lines changed

src/spooled.rs

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ pub struct SpooledTempFile {
6464
/// # Ok::<(), std::io::Error>(())
6565
/// ```
6666
#[inline]
67-
pub fn spooled_tempfile(max_size: usize) -> SpooledTempFile {
67+
pub const fn spooled_tempfile(max_size: usize) -> SpooledTempFile {
6868
SpooledTempFile::new(max_size)
6969
}
7070

@@ -94,7 +94,7 @@ fn cursor_to_tempfile(cursor: &Cursor<Vec<u8>>, p: &Option<PathBuf>) -> io::Resu
9494
impl SpooledTempFile {
9595
/// Construct a new [`SpooledTempFile`].
9696
#[must_use]
97-
pub fn new(max_size: usize) -> SpooledTempFile {
97+
pub const fn new(max_size: usize) -> SpooledTempFile {
9898
SpooledTempFile {
9999
max_size,
100100
dir: None,
@@ -247,3 +247,18 @@ impl Seek for SpooledTempFile {
247247
}
248248
}
249249
}
250+
251+
#[cfg(test)]
252+
mod test {
253+
use super::SpooledTempFile;
254+
use std::io::Write;
255+
use std::sync::Mutex;
256+
257+
// This is fine because `tempfile` doesn't rely on drop.
258+
static TEMPFILE: Mutex<SpooledTempFile> = Mutex::new(SpooledTempFile::new(1024));
259+
260+
#[test]
261+
fn test_tempfile() {
262+
TEMPFILE.lock().unwrap().write(b"foo").unwrap();
263+
}
264+
}

0 commit comments

Comments
 (0)