pub struct ArchiveStream { /* private fields */ }Implementations§
Source§impl ArchiveStream
impl ArchiveStream
pub fn extract_output( dir: &str, flags: ArchiveFlags, n_threads: i32, ) -> Result<Self>
Sourcepub fn encode_output(
stream: ByteStream,
flags: ArchiveFlags,
n_threads: i32,
) -> Result<Self>
pub fn encode_output( stream: ByteStream, flags: ArchiveFlags, n_threads: i32, ) -> Result<Self>
Examples found in repository?
examples/04_aa_archive_stream_roundtrip.rs (line 28)
9fn main() -> Result<(), Box<dyn std::error::Error>> {
10 let data = b"hello from apple archive".to_vec();
11 let artifact_dir = artifact_dir("aa-archive-stream");
12 let archive_path = artifact_dir.join("sample.aar");
13 let archive_path = path_string(&archive_path);
14
15 let mut header = Header::new()?;
16 let regular_file = u64::from(b'F');
17 let data_len = u64::try_from(data.len())?;
18 header.append_field_uint(FieldKey::TYP, regular_file)?;
19 header.append_field_string(FieldKey::PAT, "greeting.txt")?;
20 header.append_field_uint(FieldKey::SIZ, data_len)?;
21 header.append_field_blob(FieldKey::DAT, data_len)?;
22
23 let byte_stream = ByteStream::open_with_path(
24 &archive_path,
25 OPEN_WRITE_ONLY | OPEN_CREATE | OPEN_TRUNCATE,
26 DEFAULT_FILE_MODE,
27 )?;
28 let mut archive = ArchiveStream::encode_output(byte_stream, ArchiveFlags::empty(), 0)?;
29 archive.write_header(&header)?;
30 archive.write_blob(FieldKey::DAT, &data)?;
31 archive.close()?;
32
33 let byte_stream = ByteStream::open_with_path(&archive_path, OPEN_READ_ONLY, 0)?;
34 let mut archive = ArchiveStream::decode_input(byte_stream, ArchiveFlags::empty(), 0)?;
35 let header = archive.read_header()?.expect("archive entry");
36 assert_eq!(header.path()?.as_deref(), Some("greeting.txt"));
37 let blob = header.blob_with_key(FieldKey::DAT)?.expect("blob field");
38 let mut decoded = vec![0_u8; usize::try_from(blob.size)?];
39 archive.read_blob(FieldKey::DAT, &mut decoded)?;
40 assert_eq!(decoded, data);
41 assert!(archive.read_header()?.is_none());
42 archive.close()?;
43
44 println!("archive path={archive_path}");
45 println!("✅ AppleArchive round-trip OK");
46 Ok(())
47}Sourcepub fn decode_input(
stream: ByteStream,
flags: ArchiveFlags,
n_threads: i32,
) -> Result<Self>
pub fn decode_input( stream: ByteStream, flags: ArchiveFlags, n_threads: i32, ) -> Result<Self>
Examples found in repository?
examples/04_aa_archive_stream_roundtrip.rs (line 34)
9fn main() -> Result<(), Box<dyn std::error::Error>> {
10 let data = b"hello from apple archive".to_vec();
11 let artifact_dir = artifact_dir("aa-archive-stream");
12 let archive_path = artifact_dir.join("sample.aar");
13 let archive_path = path_string(&archive_path);
14
15 let mut header = Header::new()?;
16 let regular_file = u64::from(b'F');
17 let data_len = u64::try_from(data.len())?;
18 header.append_field_uint(FieldKey::TYP, regular_file)?;
19 header.append_field_string(FieldKey::PAT, "greeting.txt")?;
20 header.append_field_uint(FieldKey::SIZ, data_len)?;
21 header.append_field_blob(FieldKey::DAT, data_len)?;
22
23 let byte_stream = ByteStream::open_with_path(
24 &archive_path,
25 OPEN_WRITE_ONLY | OPEN_CREATE | OPEN_TRUNCATE,
26 DEFAULT_FILE_MODE,
27 )?;
28 let mut archive = ArchiveStream::encode_output(byte_stream, ArchiveFlags::empty(), 0)?;
29 archive.write_header(&header)?;
30 archive.write_blob(FieldKey::DAT, &data)?;
31 archive.close()?;
32
33 let byte_stream = ByteStream::open_with_path(&archive_path, OPEN_READ_ONLY, 0)?;
34 let mut archive = ArchiveStream::decode_input(byte_stream, ArchiveFlags::empty(), 0)?;
35 let header = archive.read_header()?.expect("archive entry");
36 assert_eq!(header.path()?.as_deref(), Some("greeting.txt"));
37 let blob = header.blob_with_key(FieldKey::DAT)?.expect("blob field");
38 let mut decoded = vec![0_u8; usize::try_from(blob.size)?];
39 archive.read_blob(FieldKey::DAT, &mut decoded)?;
40 assert_eq!(decoded, data);
41 assert!(archive.read_header()?.is_none());
42 archive.close()?;
43
44 println!("archive path={archive_path}");
45 println!("✅ AppleArchive round-trip OK");
46 Ok(())
47}pub fn convert_output( stream: ArchiveStream, insert_key_set: &FieldKeySet, remove_key_set: &FieldKeySet, flags: ArchiveFlags, n_threads: i32, ) -> Result<Self>
Sourcepub fn write_header(&mut self, header: &Header) -> Result<()>
pub fn write_header(&mut self, header: &Header) -> Result<()>
Examples found in repository?
examples/11_aa_custom_stream_callbacks.rs (line 117)
99fn main() -> Result<(), Box<dyn std::error::Error>> {
100 let byte_state = Rc::new(RefCell::new(MemoryByteState::default()));
101 let mut stream = ByteStream::custom(SharedByteCallbacks { inner: byte_state })?;
102 stream.write_all(b"hello custom stream")?;
103 stream.seek(0, 0)?;
104 let mut buffer = vec![0_u8; 19];
105 stream.read(&mut buffer)?;
106 assert_eq!(&buffer, b"hello custom stream");
107
108 let archive_state = Rc::new(RefCell::new(MemoryArchiveState::default()));
109 let mut writer = ArchiveStream::custom(SharedArchiveCallbacks {
110 inner: archive_state.clone(),
111 })?;
112 let mut header = Header::new()?;
113 header.append_field_uint(FieldKey::TYP, u64::from(b'F'))?;
114 header.append_field_string(FieldKey::PAT, "custom.txt")?;
115 header.append_field_uint(FieldKey::SIZ, buffer.len() as u64)?;
116 header.append_field_blob(FieldKey::DAT, buffer.len() as u64)?;
117 writer.write_header(&header)?;
118 writer.write_blob(FieldKey::DAT, &buffer)?;
119
120 let mut reader = ArchiveStream::custom(SharedArchiveCallbacks {
121 inner: archive_state,
122 })?;
123 let decoded_header = reader.read_header()?.expect("header");
124 assert_eq!(decoded_header.path()?.as_deref(), Some("custom.txt"));
125 let mut decoded = vec![0_u8; buffer.len()];
126 reader.read_blob(FieldKey::DAT, &mut decoded)?;
127 assert_eq!(decoded, buffer);
128
129 println!("✅ Custom AppleArchive byte/archive stream callbacks OK");
130 Ok(())
131}More examples
examples/04_aa_archive_stream_roundtrip.rs (line 29)
9fn main() -> Result<(), Box<dyn std::error::Error>> {
10 let data = b"hello from apple archive".to_vec();
11 let artifact_dir = artifact_dir("aa-archive-stream");
12 let archive_path = artifact_dir.join("sample.aar");
13 let archive_path = path_string(&archive_path);
14
15 let mut header = Header::new()?;
16 let regular_file = u64::from(b'F');
17 let data_len = u64::try_from(data.len())?;
18 header.append_field_uint(FieldKey::TYP, regular_file)?;
19 header.append_field_string(FieldKey::PAT, "greeting.txt")?;
20 header.append_field_uint(FieldKey::SIZ, data_len)?;
21 header.append_field_blob(FieldKey::DAT, data_len)?;
22
23 let byte_stream = ByteStream::open_with_path(
24 &archive_path,
25 OPEN_WRITE_ONLY | OPEN_CREATE | OPEN_TRUNCATE,
26 DEFAULT_FILE_MODE,
27 )?;
28 let mut archive = ArchiveStream::encode_output(byte_stream, ArchiveFlags::empty(), 0)?;
29 archive.write_header(&header)?;
30 archive.write_blob(FieldKey::DAT, &data)?;
31 archive.close()?;
32
33 let byte_stream = ByteStream::open_with_path(&archive_path, OPEN_READ_ONLY, 0)?;
34 let mut archive = ArchiveStream::decode_input(byte_stream, ArchiveFlags::empty(), 0)?;
35 let header = archive.read_header()?.expect("archive entry");
36 assert_eq!(header.path()?.as_deref(), Some("greeting.txt"));
37 let blob = header.blob_with_key(FieldKey::DAT)?.expect("blob field");
38 let mut decoded = vec![0_u8; usize::try_from(blob.size)?];
39 archive.read_blob(FieldKey::DAT, &mut decoded)?;
40 assert_eq!(decoded, data);
41 assert!(archive.read_header()?.is_none());
42 archive.close()?;
43
44 println!("archive path={archive_path}");
45 println!("✅ AppleArchive round-trip OK");
46 Ok(())
47}Sourcepub fn write_blob(&mut self, key: FieldKey, buffer: &[u8]) -> Result<()>
pub fn write_blob(&mut self, key: FieldKey, buffer: &[u8]) -> Result<()>
Examples found in repository?
examples/11_aa_custom_stream_callbacks.rs (line 118)
99fn main() -> Result<(), Box<dyn std::error::Error>> {
100 let byte_state = Rc::new(RefCell::new(MemoryByteState::default()));
101 let mut stream = ByteStream::custom(SharedByteCallbacks { inner: byte_state })?;
102 stream.write_all(b"hello custom stream")?;
103 stream.seek(0, 0)?;
104 let mut buffer = vec![0_u8; 19];
105 stream.read(&mut buffer)?;
106 assert_eq!(&buffer, b"hello custom stream");
107
108 let archive_state = Rc::new(RefCell::new(MemoryArchiveState::default()));
109 let mut writer = ArchiveStream::custom(SharedArchiveCallbacks {
110 inner: archive_state.clone(),
111 })?;
112 let mut header = Header::new()?;
113 header.append_field_uint(FieldKey::TYP, u64::from(b'F'))?;
114 header.append_field_string(FieldKey::PAT, "custom.txt")?;
115 header.append_field_uint(FieldKey::SIZ, buffer.len() as u64)?;
116 header.append_field_blob(FieldKey::DAT, buffer.len() as u64)?;
117 writer.write_header(&header)?;
118 writer.write_blob(FieldKey::DAT, &buffer)?;
119
120 let mut reader = ArchiveStream::custom(SharedArchiveCallbacks {
121 inner: archive_state,
122 })?;
123 let decoded_header = reader.read_header()?.expect("header");
124 assert_eq!(decoded_header.path()?.as_deref(), Some("custom.txt"));
125 let mut decoded = vec![0_u8; buffer.len()];
126 reader.read_blob(FieldKey::DAT, &mut decoded)?;
127 assert_eq!(decoded, buffer);
128
129 println!("✅ Custom AppleArchive byte/archive stream callbacks OK");
130 Ok(())
131}More examples
examples/04_aa_archive_stream_roundtrip.rs (line 30)
9fn main() -> Result<(), Box<dyn std::error::Error>> {
10 let data = b"hello from apple archive".to_vec();
11 let artifact_dir = artifact_dir("aa-archive-stream");
12 let archive_path = artifact_dir.join("sample.aar");
13 let archive_path = path_string(&archive_path);
14
15 let mut header = Header::new()?;
16 let regular_file = u64::from(b'F');
17 let data_len = u64::try_from(data.len())?;
18 header.append_field_uint(FieldKey::TYP, regular_file)?;
19 header.append_field_string(FieldKey::PAT, "greeting.txt")?;
20 header.append_field_uint(FieldKey::SIZ, data_len)?;
21 header.append_field_blob(FieldKey::DAT, data_len)?;
22
23 let byte_stream = ByteStream::open_with_path(
24 &archive_path,
25 OPEN_WRITE_ONLY | OPEN_CREATE | OPEN_TRUNCATE,
26 DEFAULT_FILE_MODE,
27 )?;
28 let mut archive = ArchiveStream::encode_output(byte_stream, ArchiveFlags::empty(), 0)?;
29 archive.write_header(&header)?;
30 archive.write_blob(FieldKey::DAT, &data)?;
31 archive.close()?;
32
33 let byte_stream = ByteStream::open_with_path(&archive_path, OPEN_READ_ONLY, 0)?;
34 let mut archive = ArchiveStream::decode_input(byte_stream, ArchiveFlags::empty(), 0)?;
35 let header = archive.read_header()?.expect("archive entry");
36 assert_eq!(header.path()?.as_deref(), Some("greeting.txt"));
37 let blob = header.blob_with_key(FieldKey::DAT)?.expect("blob field");
38 let mut decoded = vec![0_u8; usize::try_from(blob.size)?];
39 archive.read_blob(FieldKey::DAT, &mut decoded)?;
40 assert_eq!(decoded, data);
41 assert!(archive.read_header()?.is_none());
42 archive.close()?;
43
44 println!("archive path={archive_path}");
45 println!("✅ AppleArchive round-trip OK");
46 Ok(())
47}Sourcepub fn read_header(&mut self) -> Result<Option<Header>>
pub fn read_header(&mut self) -> Result<Option<Header>>
Examples found in repository?
examples/11_aa_custom_stream_callbacks.rs (line 123)
99fn main() -> Result<(), Box<dyn std::error::Error>> {
100 let byte_state = Rc::new(RefCell::new(MemoryByteState::default()));
101 let mut stream = ByteStream::custom(SharedByteCallbacks { inner: byte_state })?;
102 stream.write_all(b"hello custom stream")?;
103 stream.seek(0, 0)?;
104 let mut buffer = vec![0_u8; 19];
105 stream.read(&mut buffer)?;
106 assert_eq!(&buffer, b"hello custom stream");
107
108 let archive_state = Rc::new(RefCell::new(MemoryArchiveState::default()));
109 let mut writer = ArchiveStream::custom(SharedArchiveCallbacks {
110 inner: archive_state.clone(),
111 })?;
112 let mut header = Header::new()?;
113 header.append_field_uint(FieldKey::TYP, u64::from(b'F'))?;
114 header.append_field_string(FieldKey::PAT, "custom.txt")?;
115 header.append_field_uint(FieldKey::SIZ, buffer.len() as u64)?;
116 header.append_field_blob(FieldKey::DAT, buffer.len() as u64)?;
117 writer.write_header(&header)?;
118 writer.write_blob(FieldKey::DAT, &buffer)?;
119
120 let mut reader = ArchiveStream::custom(SharedArchiveCallbacks {
121 inner: archive_state,
122 })?;
123 let decoded_header = reader.read_header()?.expect("header");
124 assert_eq!(decoded_header.path()?.as_deref(), Some("custom.txt"));
125 let mut decoded = vec![0_u8; buffer.len()];
126 reader.read_blob(FieldKey::DAT, &mut decoded)?;
127 assert_eq!(decoded, buffer);
128
129 println!("✅ Custom AppleArchive byte/archive stream callbacks OK");
130 Ok(())
131}More examples
examples/04_aa_archive_stream_roundtrip.rs (line 35)
9fn main() -> Result<(), Box<dyn std::error::Error>> {
10 let data = b"hello from apple archive".to_vec();
11 let artifact_dir = artifact_dir("aa-archive-stream");
12 let archive_path = artifact_dir.join("sample.aar");
13 let archive_path = path_string(&archive_path);
14
15 let mut header = Header::new()?;
16 let regular_file = u64::from(b'F');
17 let data_len = u64::try_from(data.len())?;
18 header.append_field_uint(FieldKey::TYP, regular_file)?;
19 header.append_field_string(FieldKey::PAT, "greeting.txt")?;
20 header.append_field_uint(FieldKey::SIZ, data_len)?;
21 header.append_field_blob(FieldKey::DAT, data_len)?;
22
23 let byte_stream = ByteStream::open_with_path(
24 &archive_path,
25 OPEN_WRITE_ONLY | OPEN_CREATE | OPEN_TRUNCATE,
26 DEFAULT_FILE_MODE,
27 )?;
28 let mut archive = ArchiveStream::encode_output(byte_stream, ArchiveFlags::empty(), 0)?;
29 archive.write_header(&header)?;
30 archive.write_blob(FieldKey::DAT, &data)?;
31 archive.close()?;
32
33 let byte_stream = ByteStream::open_with_path(&archive_path, OPEN_READ_ONLY, 0)?;
34 let mut archive = ArchiveStream::decode_input(byte_stream, ArchiveFlags::empty(), 0)?;
35 let header = archive.read_header()?.expect("archive entry");
36 assert_eq!(header.path()?.as_deref(), Some("greeting.txt"));
37 let blob = header.blob_with_key(FieldKey::DAT)?.expect("blob field");
38 let mut decoded = vec![0_u8; usize::try_from(blob.size)?];
39 archive.read_blob(FieldKey::DAT, &mut decoded)?;
40 assert_eq!(decoded, data);
41 assert!(archive.read_header()?.is_none());
42 archive.close()?;
43
44 println!("archive path={archive_path}");
45 println!("✅ AppleArchive round-trip OK");
46 Ok(())
47}pub fn read_header_into(&mut self, header: &mut Header) -> Result<bool>
Sourcepub fn read_blob(&mut self, key: FieldKey, buffer: &mut [u8]) -> Result<()>
pub fn read_blob(&mut self, key: FieldKey, buffer: &mut [u8]) -> Result<()>
Examples found in repository?
examples/11_aa_custom_stream_callbacks.rs (line 126)
99fn main() -> Result<(), Box<dyn std::error::Error>> {
100 let byte_state = Rc::new(RefCell::new(MemoryByteState::default()));
101 let mut stream = ByteStream::custom(SharedByteCallbacks { inner: byte_state })?;
102 stream.write_all(b"hello custom stream")?;
103 stream.seek(0, 0)?;
104 let mut buffer = vec![0_u8; 19];
105 stream.read(&mut buffer)?;
106 assert_eq!(&buffer, b"hello custom stream");
107
108 let archive_state = Rc::new(RefCell::new(MemoryArchiveState::default()));
109 let mut writer = ArchiveStream::custom(SharedArchiveCallbacks {
110 inner: archive_state.clone(),
111 })?;
112 let mut header = Header::new()?;
113 header.append_field_uint(FieldKey::TYP, u64::from(b'F'))?;
114 header.append_field_string(FieldKey::PAT, "custom.txt")?;
115 header.append_field_uint(FieldKey::SIZ, buffer.len() as u64)?;
116 header.append_field_blob(FieldKey::DAT, buffer.len() as u64)?;
117 writer.write_header(&header)?;
118 writer.write_blob(FieldKey::DAT, &buffer)?;
119
120 let mut reader = ArchiveStream::custom(SharedArchiveCallbacks {
121 inner: archive_state,
122 })?;
123 let decoded_header = reader.read_header()?.expect("header");
124 assert_eq!(decoded_header.path()?.as_deref(), Some("custom.txt"));
125 let mut decoded = vec![0_u8; buffer.len()];
126 reader.read_blob(FieldKey::DAT, &mut decoded)?;
127 assert_eq!(decoded, buffer);
128
129 println!("✅ Custom AppleArchive byte/archive stream callbacks OK");
130 Ok(())
131}More examples
examples/04_aa_archive_stream_roundtrip.rs (line 39)
9fn main() -> Result<(), Box<dyn std::error::Error>> {
10 let data = b"hello from apple archive".to_vec();
11 let artifact_dir = artifact_dir("aa-archive-stream");
12 let archive_path = artifact_dir.join("sample.aar");
13 let archive_path = path_string(&archive_path);
14
15 let mut header = Header::new()?;
16 let regular_file = u64::from(b'F');
17 let data_len = u64::try_from(data.len())?;
18 header.append_field_uint(FieldKey::TYP, regular_file)?;
19 header.append_field_string(FieldKey::PAT, "greeting.txt")?;
20 header.append_field_uint(FieldKey::SIZ, data_len)?;
21 header.append_field_blob(FieldKey::DAT, data_len)?;
22
23 let byte_stream = ByteStream::open_with_path(
24 &archive_path,
25 OPEN_WRITE_ONLY | OPEN_CREATE | OPEN_TRUNCATE,
26 DEFAULT_FILE_MODE,
27 )?;
28 let mut archive = ArchiveStream::encode_output(byte_stream, ArchiveFlags::empty(), 0)?;
29 archive.write_header(&header)?;
30 archive.write_blob(FieldKey::DAT, &data)?;
31 archive.close()?;
32
33 let byte_stream = ByteStream::open_with_path(&archive_path, OPEN_READ_ONLY, 0)?;
34 let mut archive = ArchiveStream::decode_input(byte_stream, ArchiveFlags::empty(), 0)?;
35 let header = archive.read_header()?.expect("archive entry");
36 assert_eq!(header.path()?.as_deref(), Some("greeting.txt"));
37 let blob = header.blob_with_key(FieldKey::DAT)?.expect("blob field");
38 let mut decoded = vec![0_u8; usize::try_from(blob.size)?];
39 archive.read_blob(FieldKey::DAT, &mut decoded)?;
40 assert_eq!(decoded, data);
41 assert!(archive.read_header()?.is_none());
42 archive.close()?;
43
44 println!("archive path={archive_path}");
45 println!("✅ AppleArchive round-trip OK");
46 Ok(())
47}pub fn write_path_list( &mut self, path_list: &PathList, key_set: &FieldKeySet, dir: &str, flags: ArchiveFlags, n_threads: i32, ) -> Result<()>
pub fn process_into( &mut self, output: &mut Self, flags: ArchiveFlags, n_threads: i32, ) -> Result<u64>
pub fn cancel(&mut self) -> Result<()>
pub fn abort(&mut self) -> Result<()>
👎Deprecated since 0.2.2:
Use ArchiveStream::cancel; AAArchiveStreamAbort is a deprecated AppleArchive compatibility shim.
Sourcepub fn close(&mut self) -> Result<()>
pub fn close(&mut self) -> Result<()>
Examples found in repository?
examples/04_aa_archive_stream_roundtrip.rs (line 31)
9fn main() -> Result<(), Box<dyn std::error::Error>> {
10 let data = b"hello from apple archive".to_vec();
11 let artifact_dir = artifact_dir("aa-archive-stream");
12 let archive_path = artifact_dir.join("sample.aar");
13 let archive_path = path_string(&archive_path);
14
15 let mut header = Header::new()?;
16 let regular_file = u64::from(b'F');
17 let data_len = u64::try_from(data.len())?;
18 header.append_field_uint(FieldKey::TYP, regular_file)?;
19 header.append_field_string(FieldKey::PAT, "greeting.txt")?;
20 header.append_field_uint(FieldKey::SIZ, data_len)?;
21 header.append_field_blob(FieldKey::DAT, data_len)?;
22
23 let byte_stream = ByteStream::open_with_path(
24 &archive_path,
25 OPEN_WRITE_ONLY | OPEN_CREATE | OPEN_TRUNCATE,
26 DEFAULT_FILE_MODE,
27 )?;
28 let mut archive = ArchiveStream::encode_output(byte_stream, ArchiveFlags::empty(), 0)?;
29 archive.write_header(&header)?;
30 archive.write_blob(FieldKey::DAT, &data)?;
31 archive.close()?;
32
33 let byte_stream = ByteStream::open_with_path(&archive_path, OPEN_READ_ONLY, 0)?;
34 let mut archive = ArchiveStream::decode_input(byte_stream, ArchiveFlags::empty(), 0)?;
35 let header = archive.read_header()?.expect("archive entry");
36 assert_eq!(header.path()?.as_deref(), Some("greeting.txt"));
37 let blob = header.blob_with_key(FieldKey::DAT)?.expect("blob field");
38 let mut decoded = vec![0_u8; usize::try_from(blob.size)?];
39 archive.read_blob(FieldKey::DAT, &mut decoded)?;
40 assert_eq!(decoded, data);
41 assert!(archive.read_header()?.is_none());
42 archive.close()?;
43
44 println!("archive path={archive_path}");
45 println!("✅ AppleArchive round-trip OK");
46 Ok(())
47}Source§impl ArchiveStream
impl ArchiveStream
Sourcepub fn custom<T: CustomArchiveStreamCallbacks + 'static>(
callbacks: T,
) -> Result<Self>
pub fn custom<T: CustomArchiveStreamCallbacks + 'static>( callbacks: T, ) -> Result<Self>
Examples found in repository?
examples/11_aa_custom_stream_callbacks.rs (lines 109-111)
99fn main() -> Result<(), Box<dyn std::error::Error>> {
100 let byte_state = Rc::new(RefCell::new(MemoryByteState::default()));
101 let mut stream = ByteStream::custom(SharedByteCallbacks { inner: byte_state })?;
102 stream.write_all(b"hello custom stream")?;
103 stream.seek(0, 0)?;
104 let mut buffer = vec![0_u8; 19];
105 stream.read(&mut buffer)?;
106 assert_eq!(&buffer, b"hello custom stream");
107
108 let archive_state = Rc::new(RefCell::new(MemoryArchiveState::default()));
109 let mut writer = ArchiveStream::custom(SharedArchiveCallbacks {
110 inner: archive_state.clone(),
111 })?;
112 let mut header = Header::new()?;
113 header.append_field_uint(FieldKey::TYP, u64::from(b'F'))?;
114 header.append_field_string(FieldKey::PAT, "custom.txt")?;
115 header.append_field_uint(FieldKey::SIZ, buffer.len() as u64)?;
116 header.append_field_blob(FieldKey::DAT, buffer.len() as u64)?;
117 writer.write_header(&header)?;
118 writer.write_blob(FieldKey::DAT, &buffer)?;
119
120 let mut reader = ArchiveStream::custom(SharedArchiveCallbacks {
121 inner: archive_state,
122 })?;
123 let decoded_header = reader.read_header()?.expect("header");
124 assert_eq!(decoded_header.path()?.as_deref(), Some("custom.txt"));
125 let mut decoded = vec![0_u8; buffer.len()];
126 reader.read_blob(FieldKey::DAT, &mut decoded)?;
127 assert_eq!(decoded, buffer);
128
129 println!("✅ Custom AppleArchive byte/archive stream callbacks OK");
130 Ok(())
131}Source§impl ArchiveStream
impl ArchiveStream
pub fn extract_output_with_messages<T: EntryMessageHandler + 'static>( dir: &str, flags: ArchiveFlags, n_threads: i32, handler: T, ) -> Result<Self>
pub fn encode_output_with_messages<T: EntryMessageHandler + 'static>( stream: ByteStream, flags: ArchiveFlags, n_threads: i32, handler: T, ) -> Result<Self>
pub fn decode_input_with_messages<T: EntryMessageHandler + 'static>( stream: ByteStream, flags: ArchiveFlags, n_threads: i32, handler: T, ) -> Result<Self>
pub fn convert_output_with_messages<T: EntryMessageHandler + 'static>( stream: ArchiveStream, insert_key_set: &FieldKeySet, remove_key_set: &FieldKeySet, flags: ArchiveFlags, n_threads: i32, handler: T, ) -> Result<Self>
pub fn write_path_list_with_messages<T: EntryMessageHandler + 'static>( &mut self, path_list: &PathList, key_set: &FieldKeySet, dir: &str, flags: ArchiveFlags, n_threads: i32, handler: T, ) -> Result<()>
pub fn process_into_with_messages<T: EntryMessageHandler + 'static>( &mut self, output: &mut Self, flags: ArchiveFlags, n_threads: i32, handler: T, ) -> Result<u64>
Trait Implementations§
Source§impl Debug for ArchiveStream
impl Debug for ArchiveStream
Source§impl Drop for ArchiveStream
impl Drop for ArchiveStream
Auto Trait Implementations§
impl Freeze for ArchiveStream
impl !RefUnwindSafe for ArchiveStream
impl !Send for ArchiveStream
impl !Sync for ArchiveStream
impl Unpin for ArchiveStream
impl UnsafeUnpin for ArchiveStream
impl !UnwindSafe for ArchiveStream
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