pub struct TempProject { /* private fields */ }Expand description
A temporary project directory that auto-cleans on drop.
Holds an internal tempfile::TempDir. The temp directory is deleted
when this value is dropped.
§Example
use dev_fixtures::TempProject;
let p = TempProject::new()
.with_file("README.md", "hello")
.build()
.unwrap();
assert!(p.path().join("README.md").exists());Implementations§
Source§impl TempProject
impl TempProject
Sourcepub fn new() -> TempProjectBuilder
pub fn new() -> TempProjectBuilder
Begin building a temp project.
Returns a TempProjectBuilder (not Self); call .build()
on it to materialize the directory.
Examples found in repository?
examples/temp_project.rs (line 17)
16fn main() {
17 let project = TempProject::new()
18 .with_file(
19 "Cargo.toml",
20 "[package]\nname = \"sample\"\nversion = \"0.1.0\"\n",
21 )
22 .with_file("src/lib.rs", "pub fn answer() -> u32 { 42 }\n")
23 .with_file(
24 "README.md",
25 "# sample\n\nGenerated by the dev-fixtures example.\n",
26 )
27 .with_bytes("assets/payload.bin", vec![0u8, 1, 2, 3, 4, 5])
28 .build()
29 .expect("build temp project");
30
31 println!("temp project root: {}", project.path().display());
32 for (rel, bytes) in project.declared_files() {
33 let absolute = project.path().join(rel);
34 let read_ok = fs::metadata(&absolute).is_ok();
35 println!(
36 " {:>4} bytes — declared {:?} — exists on disk: {}",
37 bytes.len(),
38 rel,
39 read_ok
40 );
41 }
42
43 let kept_root = project.path().to_path_buf();
44 drop(project);
45 println!(
46 "after drop: {} still on disk? {}",
47 kept_root.display(),
48 kept_root.exists()
49 );
50}Sourcepub fn path(&self) -> &Path
pub fn path(&self) -> &Path
Path to the root of the temp project.
Examples found in repository?
examples/temp_project.rs (line 31)
16fn main() {
17 let project = TempProject::new()
18 .with_file(
19 "Cargo.toml",
20 "[package]\nname = \"sample\"\nversion = \"0.1.0\"\n",
21 )
22 .with_file("src/lib.rs", "pub fn answer() -> u32 { 42 }\n")
23 .with_file(
24 "README.md",
25 "# sample\n\nGenerated by the dev-fixtures example.\n",
26 )
27 .with_bytes("assets/payload.bin", vec![0u8, 1, 2, 3, 4, 5])
28 .build()
29 .expect("build temp project");
30
31 println!("temp project root: {}", project.path().display());
32 for (rel, bytes) in project.declared_files() {
33 let absolute = project.path().join(rel);
34 let read_ok = fs::metadata(&absolute).is_ok();
35 println!(
36 " {:>4} bytes — declared {:?} — exists on disk: {}",
37 bytes.len(),
38 rel,
39 read_ok
40 );
41 }
42
43 let kept_root = project.path().to_path_buf();
44 drop(project);
45 println!(
46 "after drop: {} still on disk? {}",
47 kept_root.display(),
48 kept_root.exists()
49 );
50}Sourcepub fn declared_files(&self) -> impl Iterator<Item = (&Path, &[u8])>
pub fn declared_files(&self) -> impl Iterator<Item = (&Path, &[u8])>
Files declared at build time. Useful for diagnostics.
Examples found in repository?
examples/temp_project.rs (line 32)
16fn main() {
17 let project = TempProject::new()
18 .with_file(
19 "Cargo.toml",
20 "[package]\nname = \"sample\"\nversion = \"0.1.0\"\n",
21 )
22 .with_file("src/lib.rs", "pub fn answer() -> u32 { 42 }\n")
23 .with_file(
24 "README.md",
25 "# sample\n\nGenerated by the dev-fixtures example.\n",
26 )
27 .with_bytes("assets/payload.bin", vec![0u8, 1, 2, 3, 4, 5])
28 .build()
29 .expect("build temp project");
30
31 println!("temp project root: {}", project.path().display());
32 for (rel, bytes) in project.declared_files() {
33 let absolute = project.path().join(rel);
34 let read_ok = fs::metadata(&absolute).is_ok();
35 println!(
36 " {:>4} bytes — declared {:?} — exists on disk: {}",
37 bytes.len(),
38 rel,
39 read_ok
40 );
41 }
42
43 let kept_root = project.path().to_path_buf();
44 drop(project);
45 println!(
46 "after drop: {} still on disk? {}",
47 kept_root.display(),
48 kept_root.exists()
49 );
50}Auto Trait Implementations§
impl Freeze for TempProject
impl RefUnwindSafe for TempProject
impl Send for TempProject
impl Sync for TempProject
impl Unpin for TempProject
impl UnsafeUnpin for TempProject
impl UnwindSafe for TempProject
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more