pub struct InterleavedTempFile { /* private fields */ }Implementations§
Source§impl InterleavedTempFile
impl InterleavedTempFile
Sourcepub fn new_temp() -> Result<Self, VirtualFileError>
pub fn new_temp() -> Result<Self, VirtualFileError>
Examples found in repository?
examples/interleaved_temp_storage.rs (line 9)
8fn main() {
9 let storage = InterleavedTempFile::new_temp().unwrap();
10 let mut handles = Vec::new();
11
12 for stream_index in 0..4 {
13 let mut writer = storage.spawn_stream();
14 handles.push(thread::spawn(move || {
15 let stream_id = writer.stream_id();
16 let chunks = [
17 format!("track-{stream_index}:header|"),
18 format!("track-{stream_index}:events|"),
19 format!("track-{stream_index}:tail"),
20 ];
21
22 let mut expected = String::new();
23 for chunk in chunks {
24 writer.write_all(chunk.as_bytes()).unwrap();
25 expected.push_str(&chunk);
26 }
27
28 writer.flush().unwrap();
29 (stream_id, expected)
30 }));
31 }
32
33 let mut expected_streams = Vec::new();
34 for handle in handles {
35 expected_streams.push(handle.join().unwrap());
36 }
37 expected_streams.sort_unstable_by_key(|(stream_id, _)| *stream_id);
38
39 println!("Backing file: {}", storage.path().display());
40 for (stream_id, expected) in expected_streams {
41 let mut reader = storage.open_reader(stream_id).unwrap();
42 let mut actual = String::new();
43 reader.read_to_string(&mut actual).unwrap();
44
45 assert_eq!(actual, expected);
46 println!("stream {stream_id}: {actual}");
47 }
48}pub fn new_at_path(path: impl AsRef<Path>) -> Result<Self, VirtualFileError>
pub fn new_temp_at_path( path: impl AsRef<Path>, ) -> Result<Self, VirtualFileError>
Sourcepub fn path(&self) -> &Path
pub fn path(&self) -> &Path
Examples found in repository?
examples/interleaved_temp_storage.rs (line 39)
8fn main() {
9 let storage = InterleavedTempFile::new_temp().unwrap();
10 let mut handles = Vec::new();
11
12 for stream_index in 0..4 {
13 let mut writer = storage.spawn_stream();
14 handles.push(thread::spawn(move || {
15 let stream_id = writer.stream_id();
16 let chunks = [
17 format!("track-{stream_index}:header|"),
18 format!("track-{stream_index}:events|"),
19 format!("track-{stream_index}:tail"),
20 ];
21
22 let mut expected = String::new();
23 for chunk in chunks {
24 writer.write_all(chunk.as_bytes()).unwrap();
25 expected.push_str(&chunk);
26 }
27
28 writer.flush().unwrap();
29 (stream_id, expected)
30 }));
31 }
32
33 let mut expected_streams = Vec::new();
34 for handle in handles {
35 expected_streams.push(handle.join().unwrap());
36 }
37 expected_streams.sort_unstable_by_key(|(stream_id, _)| *stream_id);
38
39 println!("Backing file: {}", storage.path().display());
40 for (stream_id, expected) in expected_streams {
41 let mut reader = storage.open_reader(stream_id).unwrap();
42 let mut actual = String::new();
43 reader.read_to_string(&mut actual).unwrap();
44
45 assert_eq!(actual, expected);
46 println!("stream {stream_id}: {actual}");
47 }
48}Sourcepub fn spawn_stream(&self) -> VirtualStreamWriter ⓘ
pub fn spawn_stream(&self) -> VirtualStreamWriter ⓘ
Examples found in repository?
examples/interleaved_temp_storage.rs (line 13)
8fn main() {
9 let storage = InterleavedTempFile::new_temp().unwrap();
10 let mut handles = Vec::new();
11
12 for stream_index in 0..4 {
13 let mut writer = storage.spawn_stream();
14 handles.push(thread::spawn(move || {
15 let stream_id = writer.stream_id();
16 let chunks = [
17 format!("track-{stream_index}:header|"),
18 format!("track-{stream_index}:events|"),
19 format!("track-{stream_index}:tail"),
20 ];
21
22 let mut expected = String::new();
23 for chunk in chunks {
24 writer.write_all(chunk.as_bytes()).unwrap();
25 expected.push_str(&chunk);
26 }
27
28 writer.flush().unwrap();
29 (stream_id, expected)
30 }));
31 }
32
33 let mut expected_streams = Vec::new();
34 for handle in handles {
35 expected_streams.push(handle.join().unwrap());
36 }
37 expected_streams.sort_unstable_by_key(|(stream_id, _)| *stream_id);
38
39 println!("Backing file: {}", storage.path().display());
40 for (stream_id, expected) in expected_streams {
41 let mut reader = storage.open_reader(stream_id).unwrap();
42 let mut actual = String::new();
43 reader.read_to_string(&mut actual).unwrap();
44
45 assert_eq!(actual, expected);
46 println!("stream {stream_id}: {actual}");
47 }
48}pub fn stream_ids(&self) -> Vec<u64>
Sourcepub fn open_reader(
&self,
stream_id: u64,
) -> Result<VirtualStreamReader, VirtualFileError>
pub fn open_reader( &self, stream_id: u64, ) -> Result<VirtualStreamReader, VirtualFileError>
Examples found in repository?
examples/interleaved_temp_storage.rs (line 41)
8fn main() {
9 let storage = InterleavedTempFile::new_temp().unwrap();
10 let mut handles = Vec::new();
11
12 for stream_index in 0..4 {
13 let mut writer = storage.spawn_stream();
14 handles.push(thread::spawn(move || {
15 let stream_id = writer.stream_id();
16 let chunks = [
17 format!("track-{stream_index}:header|"),
18 format!("track-{stream_index}:events|"),
19 format!("track-{stream_index}:tail"),
20 ];
21
22 let mut expected = String::new();
23 for chunk in chunks {
24 writer.write_all(chunk.as_bytes()).unwrap();
25 expected.push_str(&chunk);
26 }
27
28 writer.flush().unwrap();
29 (stream_id, expected)
30 }));
31 }
32
33 let mut expected_streams = Vec::new();
34 for handle in handles {
35 expected_streams.push(handle.join().unwrap());
36 }
37 expected_streams.sort_unstable_by_key(|(stream_id, _)| *stream_id);
38
39 println!("Backing file: {}", storage.path().display());
40 for (stream_id, expected) in expected_streams {
41 let mut reader = storage.open_reader(stream_id).unwrap();
42 let mut actual = String::new();
43 reader.read_to_string(&mut actual).unwrap();
44
45 assert_eq!(actual, expected);
46 println!("stream {stream_id}: {actual}");
47 }
48}pub fn flush(&self) -> Result<(), VirtualFileError>
pub fn remove_backing_file(&self) -> Result<(), VirtualFileError>
Trait Implementations§
Source§impl Clone for InterleavedTempFile
impl Clone for InterleavedTempFile
Source§fn clone(&self) -> InterleavedTempFile
fn clone(&self) -> InterleavedTempFile
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreAuto Trait Implementations§
impl Freeze for InterleavedTempFile
impl RefUnwindSafe for InterleavedTempFile
impl Send for InterleavedTempFile
impl Sync for InterleavedTempFile
impl Unpin for InterleavedTempFile
impl UnsafeUnpin for InterleavedTempFile
impl UnwindSafe for InterleavedTempFile
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more