pub struct Record { /* private fields */ }Expand description
One AU3 resource record.
Implementations§
Source§impl Record
impl Record
Sourcepub const fn index(&self) -> usize
pub const fn index(&self) -> usize
Examples found in repository?
142fn print_records(records: &[Record]) {
143 section(&format!("records ({})", records.len()));
144 for record in records {
145 println!(" #{} @ offset {}", record.index(), record.offset());
146 subfield("subtype", escape_inline(record.subtype()));
147 subfield("name", escape_inline(record.name()));
148 let profile = record.profile();
149 subfield(
150 "profile",
151 format!(
152 "encoding={:?} encryption={:?} compression={:?}",
153 profile.encoding, profile.encryption, profile.compression
154 ),
155 );
156 subfield(
157 "compressed",
158 format!(
159 "{} (compressed_size={}, uncompressed_size={})",
160 record.compressed(),
161 record.compressed_size(),
162 record.uncompressed_size()
163 ),
164 );
165 subfield(
166 "checksum",
167 format!(
168 "{:#010x} ({})",
169 record.checksum(),
170 if record.checksum_valid() {
171 "valid"
172 } else {
173 "invalid"
174 }
175 ),
176 );
177 subfield(
178 "timestamps",
179 format!(
180 "created={} last_write={}",
181 record.creation_time(),
182 record.last_write_time()
183 ),
184 );
185 subfield(
186 "data sizes",
187 format!(
188 "encrypted={} decrypted={} decompressed={} payload={}",
189 record.encrypted_data().len(),
190 record.decrypted_data().len(),
191 record
192 .decompressed_data()
193 .map_or_else(|| "none".to_string(), |data| data.len().to_string()),
194 record.payload_data().len()
195 ),
196 );
197 subfield(
198 "decompression",
199 format!("{:?}", record.decompression_status()),
200 );
201 }
202}Sourcepub const fn offset(&self) -> usize
pub const fn offset(&self) -> usize
Returns the file offset where this record starts.
§Returns
The absolute byte offset of the record’s FILE marker in the input.
Examples found in repository?
142fn print_records(records: &[Record]) {
143 section(&format!("records ({})", records.len()));
144 for record in records {
145 println!(" #{} @ offset {}", record.index(), record.offset());
146 subfield("subtype", escape_inline(record.subtype()));
147 subfield("name", escape_inline(record.name()));
148 let profile = record.profile();
149 subfield(
150 "profile",
151 format!(
152 "encoding={:?} encryption={:?} compression={:?}",
153 profile.encoding, profile.encryption, profile.compression
154 ),
155 );
156 subfield(
157 "compressed",
158 format!(
159 "{} (compressed_size={}, uncompressed_size={})",
160 record.compressed(),
161 record.compressed_size(),
162 record.uncompressed_size()
163 ),
164 );
165 subfield(
166 "checksum",
167 format!(
168 "{:#010x} ({})",
169 record.checksum(),
170 if record.checksum_valid() {
171 "valid"
172 } else {
173 "invalid"
174 }
175 ),
176 );
177 subfield(
178 "timestamps",
179 format!(
180 "created={} last_write={}",
181 record.creation_time(),
182 record.last_write_time()
183 ),
184 );
185 subfield(
186 "data sizes",
187 format!(
188 "encrypted={} decrypted={} decompressed={} payload={}",
189 record.encrypted_data().len(),
190 record.decrypted_data().len(),
191 record
192 .decompressed_data()
193 .map_or_else(|| "none".to_string(), |data| data.len().to_string()),
194 record.payload_data().len()
195 ),
196 );
197 subfield(
198 "decompression",
199 format!("{:?}", record.decompression_status()),
200 );
201 }
202}Sourcepub fn subtype(&self) -> &str
pub fn subtype(&self) -> &str
Returns the decoded subtype text.
§Returns
The record subtype as decoded text (e.g. the >>>AUTOIT SCRIPT<<< tag).
Examples found in repository?
142fn print_records(records: &[Record]) {
143 section(&format!("records ({})", records.len()));
144 for record in records {
145 println!(" #{} @ offset {}", record.index(), record.offset());
146 subfield("subtype", escape_inline(record.subtype()));
147 subfield("name", escape_inline(record.name()));
148 let profile = record.profile();
149 subfield(
150 "profile",
151 format!(
152 "encoding={:?} encryption={:?} compression={:?}",
153 profile.encoding, profile.encryption, profile.compression
154 ),
155 );
156 subfield(
157 "compressed",
158 format!(
159 "{} (compressed_size={}, uncompressed_size={})",
160 record.compressed(),
161 record.compressed_size(),
162 record.uncompressed_size()
163 ),
164 );
165 subfield(
166 "checksum",
167 format!(
168 "{:#010x} ({})",
169 record.checksum(),
170 if record.checksum_valid() {
171 "valid"
172 } else {
173 "invalid"
174 }
175 ),
176 );
177 subfield(
178 "timestamps",
179 format!(
180 "created={} last_write={}",
181 record.creation_time(),
182 record.last_write_time()
183 ),
184 );
185 subfield(
186 "data sizes",
187 format!(
188 "encrypted={} decrypted={} decompressed={} payload={}",
189 record.encrypted_data().len(),
190 record.decrypted_data().len(),
191 record
192 .decompressed_data()
193 .map_or_else(|| "none".to_string(), |data| data.len().to_string()),
194 record.payload_data().len()
195 ),
196 );
197 subfield(
198 "decompression",
199 format!("{:?}", record.decompression_status()),
200 );
201 }
202}Sourcepub fn subtype_bytes(&self) -> &[u8] ⓘ
pub fn subtype_bytes(&self) -> &[u8] ⓘ
Returns the raw decrypted subtype bytes.
§Returns
The decrypted subtype bytes prior to text decoding.
Sourcepub fn name(&self) -> &str
pub fn name(&self) -> &str
Returns the decoded stored name/path text.
§Returns
The record’s stored name or path as decoded text.
Examples found in repository?
142fn print_records(records: &[Record]) {
143 section(&format!("records ({})", records.len()));
144 for record in records {
145 println!(" #{} @ offset {}", record.index(), record.offset());
146 subfield("subtype", escape_inline(record.subtype()));
147 subfield("name", escape_inline(record.name()));
148 let profile = record.profile();
149 subfield(
150 "profile",
151 format!(
152 "encoding={:?} encryption={:?} compression={:?}",
153 profile.encoding, profile.encryption, profile.compression
154 ),
155 );
156 subfield(
157 "compressed",
158 format!(
159 "{} (compressed_size={}, uncompressed_size={})",
160 record.compressed(),
161 record.compressed_size(),
162 record.uncompressed_size()
163 ),
164 );
165 subfield(
166 "checksum",
167 format!(
168 "{:#010x} ({})",
169 record.checksum(),
170 if record.checksum_valid() {
171 "valid"
172 } else {
173 "invalid"
174 }
175 ),
176 );
177 subfield(
178 "timestamps",
179 format!(
180 "created={} last_write={}",
181 record.creation_time(),
182 record.last_write_time()
183 ),
184 );
185 subfield(
186 "data sizes",
187 format!(
188 "encrypted={} decrypted={} decompressed={} payload={}",
189 record.encrypted_data().len(),
190 record.decrypted_data().len(),
191 record
192 .decompressed_data()
193 .map_or_else(|| "none".to_string(), |data| data.len().to_string()),
194 record.payload_data().len()
195 ),
196 );
197 subfield(
198 "decompression",
199 format!("{:?}", record.decompression_status()),
200 );
201 }
202}Sourcepub fn name_bytes(&self) -> &[u8] ⓘ
pub fn name_bytes(&self) -> &[u8] ⓘ
Returns the raw decrypted name/path bytes.
§Returns
The decrypted name/path bytes prior to text decoding.
Sourcepub const fn compressed(&self) -> bool
pub const fn compressed(&self) -> bool
Returns whether the record payload is marked compressed.
§Returns
true when the record’s compression flag is set, false otherwise.
Examples found in repository?
142fn print_records(records: &[Record]) {
143 section(&format!("records ({})", records.len()));
144 for record in records {
145 println!(" #{} @ offset {}", record.index(), record.offset());
146 subfield("subtype", escape_inline(record.subtype()));
147 subfield("name", escape_inline(record.name()));
148 let profile = record.profile();
149 subfield(
150 "profile",
151 format!(
152 "encoding={:?} encryption={:?} compression={:?}",
153 profile.encoding, profile.encryption, profile.compression
154 ),
155 );
156 subfield(
157 "compressed",
158 format!(
159 "{} (compressed_size={}, uncompressed_size={})",
160 record.compressed(),
161 record.compressed_size(),
162 record.uncompressed_size()
163 ),
164 );
165 subfield(
166 "checksum",
167 format!(
168 "{:#010x} ({})",
169 record.checksum(),
170 if record.checksum_valid() {
171 "valid"
172 } else {
173 "invalid"
174 }
175 ),
176 );
177 subfield(
178 "timestamps",
179 format!(
180 "created={} last_write={}",
181 record.creation_time(),
182 record.last_write_time()
183 ),
184 );
185 subfield(
186 "data sizes",
187 format!(
188 "encrypted={} decrypted={} decompressed={} payload={}",
189 record.encrypted_data().len(),
190 record.decrypted_data().len(),
191 record
192 .decompressed_data()
193 .map_or_else(|| "none".to_string(), |data| data.len().to_string()),
194 record.payload_data().len()
195 ),
196 );
197 subfield(
198 "decompression",
199 format!("{:?}", record.decompression_status()),
200 );
201 }
202}Sourcepub const fn compressed_size(&self) -> u32
pub const fn compressed_size(&self) -> u32
Returns the stored encrypted/compressed data size.
§Returns
The byte length of the on-disk encrypted (and possibly compressed) blob.
Examples found in repository?
142fn print_records(records: &[Record]) {
143 section(&format!("records ({})", records.len()));
144 for record in records {
145 println!(" #{} @ offset {}", record.index(), record.offset());
146 subfield("subtype", escape_inline(record.subtype()));
147 subfield("name", escape_inline(record.name()));
148 let profile = record.profile();
149 subfield(
150 "profile",
151 format!(
152 "encoding={:?} encryption={:?} compression={:?}",
153 profile.encoding, profile.encryption, profile.compression
154 ),
155 );
156 subfield(
157 "compressed",
158 format!(
159 "{} (compressed_size={}, uncompressed_size={})",
160 record.compressed(),
161 record.compressed_size(),
162 record.uncompressed_size()
163 ),
164 );
165 subfield(
166 "checksum",
167 format!(
168 "{:#010x} ({})",
169 record.checksum(),
170 if record.checksum_valid() {
171 "valid"
172 } else {
173 "invalid"
174 }
175 ),
176 );
177 subfield(
178 "timestamps",
179 format!(
180 "created={} last_write={}",
181 record.creation_time(),
182 record.last_write_time()
183 ),
184 );
185 subfield(
186 "data sizes",
187 format!(
188 "encrypted={} decrypted={} decompressed={} payload={}",
189 record.encrypted_data().len(),
190 record.decrypted_data().len(),
191 record
192 .decompressed_data()
193 .map_or_else(|| "none".to_string(), |data| data.len().to_string()),
194 record.payload_data().len()
195 ),
196 );
197 subfield(
198 "decompression",
199 format!("{:?}", record.decompression_status()),
200 );
201 }
202}Sourcepub const fn uncompressed_size(&self) -> u32
pub const fn uncompressed_size(&self) -> u32
Returns the advertised uncompressed data size.
§Returns
The uncompressed byte length declared in the record header.
Examples found in repository?
142fn print_records(records: &[Record]) {
143 section(&format!("records ({})", records.len()));
144 for record in records {
145 println!(" #{} @ offset {}", record.index(), record.offset());
146 subfield("subtype", escape_inline(record.subtype()));
147 subfield("name", escape_inline(record.name()));
148 let profile = record.profile();
149 subfield(
150 "profile",
151 format!(
152 "encoding={:?} encryption={:?} compression={:?}",
153 profile.encoding, profile.encryption, profile.compression
154 ),
155 );
156 subfield(
157 "compressed",
158 format!(
159 "{} (compressed_size={}, uncompressed_size={})",
160 record.compressed(),
161 record.compressed_size(),
162 record.uncompressed_size()
163 ),
164 );
165 subfield(
166 "checksum",
167 format!(
168 "{:#010x} ({})",
169 record.checksum(),
170 if record.checksum_valid() {
171 "valid"
172 } else {
173 "invalid"
174 }
175 ),
176 );
177 subfield(
178 "timestamps",
179 format!(
180 "created={} last_write={}",
181 record.creation_time(),
182 record.last_write_time()
183 ),
184 );
185 subfield(
186 "data sizes",
187 format!(
188 "encrypted={} decrypted={} decompressed={} payload={}",
189 record.encrypted_data().len(),
190 record.decrypted_data().len(),
191 record
192 .decompressed_data()
193 .map_or_else(|| "none".to_string(), |data| data.len().to_string()),
194 record.payload_data().len()
195 ),
196 );
197 subfield(
198 "decompression",
199 format!("{:?}", record.decompression_status()),
200 );
201 }
202}Sourcepub const fn checksum(&self) -> u32
pub const fn checksum(&self) -> u32
Returns the stored checksum value.
For EA04/JB01 records, which carry no checksum field, this is 0.
§Returns
The stored adler32 checksum (EA05/EA06), or 0 when absent (EA04/JB01).
Examples found in repository?
142fn print_records(records: &[Record]) {
143 section(&format!("records ({})", records.len()));
144 for record in records {
145 println!(" #{} @ offset {}", record.index(), record.offset());
146 subfield("subtype", escape_inline(record.subtype()));
147 subfield("name", escape_inline(record.name()));
148 let profile = record.profile();
149 subfield(
150 "profile",
151 format!(
152 "encoding={:?} encryption={:?} compression={:?}",
153 profile.encoding, profile.encryption, profile.compression
154 ),
155 );
156 subfield(
157 "compressed",
158 format!(
159 "{} (compressed_size={}, uncompressed_size={})",
160 record.compressed(),
161 record.compressed_size(),
162 record.uncompressed_size()
163 ),
164 );
165 subfield(
166 "checksum",
167 format!(
168 "{:#010x} ({})",
169 record.checksum(),
170 if record.checksum_valid() {
171 "valid"
172 } else {
173 "invalid"
174 }
175 ),
176 );
177 subfield(
178 "timestamps",
179 format!(
180 "created={} last_write={}",
181 record.creation_time(),
182 record.last_write_time()
183 ),
184 );
185 subfield(
186 "data sizes",
187 format!(
188 "encrypted={} decrypted={} decompressed={} payload={}",
189 record.encrypted_data().len(),
190 record.decrypted_data().len(),
191 record
192 .decompressed_data()
193 .map_or_else(|| "none".to_string(), |data| data.len().to_string()),
194 record.payload_data().len()
195 ),
196 );
197 subfield(
198 "decompression",
199 format!("{:?}", record.decompression_status()),
200 );
201 }
202}Sourcepub const fn checksum_valid(&self) -> bool
pub const fn checksum_valid(&self) -> bool
Returns whether the stored checksum matches the decrypted record data.
EA04/JB01 records carry no checksum, so they are treated as validated and
this returns true.
§Returns
true when the adler32 of the decrypted data matches the stored checksum,
or when no checksum is present (EA04/JB01); false on mismatch.
Examples found in repository?
142fn print_records(records: &[Record]) {
143 section(&format!("records ({})", records.len()));
144 for record in records {
145 println!(" #{} @ offset {}", record.index(), record.offset());
146 subfield("subtype", escape_inline(record.subtype()));
147 subfield("name", escape_inline(record.name()));
148 let profile = record.profile();
149 subfield(
150 "profile",
151 format!(
152 "encoding={:?} encryption={:?} compression={:?}",
153 profile.encoding, profile.encryption, profile.compression
154 ),
155 );
156 subfield(
157 "compressed",
158 format!(
159 "{} (compressed_size={}, uncompressed_size={})",
160 record.compressed(),
161 record.compressed_size(),
162 record.uncompressed_size()
163 ),
164 );
165 subfield(
166 "checksum",
167 format!(
168 "{:#010x} ({})",
169 record.checksum(),
170 if record.checksum_valid() {
171 "valid"
172 } else {
173 "invalid"
174 }
175 ),
176 );
177 subfield(
178 "timestamps",
179 format!(
180 "created={} last_write={}",
181 record.creation_time(),
182 record.last_write_time()
183 ),
184 );
185 subfield(
186 "data sizes",
187 format!(
188 "encrypted={} decrypted={} decompressed={} payload={}",
189 record.encrypted_data().len(),
190 record.decrypted_data().len(),
191 record
192 .decompressed_data()
193 .map_or_else(|| "none".to_string(), |data| data.len().to_string()),
194 record.payload_data().len()
195 ),
196 );
197 subfield(
198 "decompression",
199 format!("{:?}", record.decompression_status()),
200 );
201 }
202}Sourcepub const fn creation_time(&self) -> u64
pub const fn creation_time(&self) -> u64
Returns the creation timestamp as a raw Windows FILETIME.
§Returns
The record’s creation time as a 64-bit Windows FILETIME value.
Examples found in repository?
142fn print_records(records: &[Record]) {
143 section(&format!("records ({})", records.len()));
144 for record in records {
145 println!(" #{} @ offset {}", record.index(), record.offset());
146 subfield("subtype", escape_inline(record.subtype()));
147 subfield("name", escape_inline(record.name()));
148 let profile = record.profile();
149 subfield(
150 "profile",
151 format!(
152 "encoding={:?} encryption={:?} compression={:?}",
153 profile.encoding, profile.encryption, profile.compression
154 ),
155 );
156 subfield(
157 "compressed",
158 format!(
159 "{} (compressed_size={}, uncompressed_size={})",
160 record.compressed(),
161 record.compressed_size(),
162 record.uncompressed_size()
163 ),
164 );
165 subfield(
166 "checksum",
167 format!(
168 "{:#010x} ({})",
169 record.checksum(),
170 if record.checksum_valid() {
171 "valid"
172 } else {
173 "invalid"
174 }
175 ),
176 );
177 subfield(
178 "timestamps",
179 format!(
180 "created={} last_write={}",
181 record.creation_time(),
182 record.last_write_time()
183 ),
184 );
185 subfield(
186 "data sizes",
187 format!(
188 "encrypted={} decrypted={} decompressed={} payload={}",
189 record.encrypted_data().len(),
190 record.decrypted_data().len(),
191 record
192 .decompressed_data()
193 .map_or_else(|| "none".to_string(), |data| data.len().to_string()),
194 record.payload_data().len()
195 ),
196 );
197 subfield(
198 "decompression",
199 format!("{:?}", record.decompression_status()),
200 );
201 }
202}Sourcepub const fn last_write_time(&self) -> u64
pub const fn last_write_time(&self) -> u64
Returns the last-write timestamp as a raw Windows FILETIME.
§Returns
The record’s last-write time as a 64-bit Windows FILETIME value.
Examples found in repository?
142fn print_records(records: &[Record]) {
143 section(&format!("records ({})", records.len()));
144 for record in records {
145 println!(" #{} @ offset {}", record.index(), record.offset());
146 subfield("subtype", escape_inline(record.subtype()));
147 subfield("name", escape_inline(record.name()));
148 let profile = record.profile();
149 subfield(
150 "profile",
151 format!(
152 "encoding={:?} encryption={:?} compression={:?}",
153 profile.encoding, profile.encryption, profile.compression
154 ),
155 );
156 subfield(
157 "compressed",
158 format!(
159 "{} (compressed_size={}, uncompressed_size={})",
160 record.compressed(),
161 record.compressed_size(),
162 record.uncompressed_size()
163 ),
164 );
165 subfield(
166 "checksum",
167 format!(
168 "{:#010x} ({})",
169 record.checksum(),
170 if record.checksum_valid() {
171 "valid"
172 } else {
173 "invalid"
174 }
175 ),
176 );
177 subfield(
178 "timestamps",
179 format!(
180 "created={} last_write={}",
181 record.creation_time(),
182 record.last_write_time()
183 ),
184 );
185 subfield(
186 "data sizes",
187 format!(
188 "encrypted={} decrypted={} decompressed={} payload={}",
189 record.encrypted_data().len(),
190 record.decrypted_data().len(),
191 record
192 .decompressed_data()
193 .map_or_else(|| "none".to_string(), |data| data.len().to_string()),
194 record.payload_data().len()
195 ),
196 );
197 subfield(
198 "decompression",
199 format!("{:?}", record.decompression_status()),
200 );
201 }
202}Sourcepub fn encrypted_data(&self) -> &[u8] ⓘ
pub fn encrypted_data(&self) -> &[u8] ⓘ
Returns the encrypted record data bytes as stored on disk.
§Returns
The raw encrypted (and possibly compressed) payload bytes.
Examples found in repository?
142fn print_records(records: &[Record]) {
143 section(&format!("records ({})", records.len()));
144 for record in records {
145 println!(" #{} @ offset {}", record.index(), record.offset());
146 subfield("subtype", escape_inline(record.subtype()));
147 subfield("name", escape_inline(record.name()));
148 let profile = record.profile();
149 subfield(
150 "profile",
151 format!(
152 "encoding={:?} encryption={:?} compression={:?}",
153 profile.encoding, profile.encryption, profile.compression
154 ),
155 );
156 subfield(
157 "compressed",
158 format!(
159 "{} (compressed_size={}, uncompressed_size={})",
160 record.compressed(),
161 record.compressed_size(),
162 record.uncompressed_size()
163 ),
164 );
165 subfield(
166 "checksum",
167 format!(
168 "{:#010x} ({})",
169 record.checksum(),
170 if record.checksum_valid() {
171 "valid"
172 } else {
173 "invalid"
174 }
175 ),
176 );
177 subfield(
178 "timestamps",
179 format!(
180 "created={} last_write={}",
181 record.creation_time(),
182 record.last_write_time()
183 ),
184 );
185 subfield(
186 "data sizes",
187 format!(
188 "encrypted={} decrypted={} decompressed={} payload={}",
189 record.encrypted_data().len(),
190 record.decrypted_data().len(),
191 record
192 .decompressed_data()
193 .map_or_else(|| "none".to_string(), |data| data.len().to_string()),
194 record.payload_data().len()
195 ),
196 );
197 subfield(
198 "decompression",
199 format!("{:?}", record.decompression_status()),
200 );
201 }
202}Sourcepub fn decrypted_data(&self) -> &[u8] ⓘ
pub fn decrypted_data(&self) -> &[u8] ⓘ
Returns the decrypted record data bytes.
These are still in their compressed (wrapped) form when the record is marked compressed.
§Returns
The decrypted payload bytes, prior to any decompression.
Examples found in repository?
142fn print_records(records: &[Record]) {
143 section(&format!("records ({})", records.len()));
144 for record in records {
145 println!(" #{} @ offset {}", record.index(), record.offset());
146 subfield("subtype", escape_inline(record.subtype()));
147 subfield("name", escape_inline(record.name()));
148 let profile = record.profile();
149 subfield(
150 "profile",
151 format!(
152 "encoding={:?} encryption={:?} compression={:?}",
153 profile.encoding, profile.encryption, profile.compression
154 ),
155 );
156 subfield(
157 "compressed",
158 format!(
159 "{} (compressed_size={}, uncompressed_size={})",
160 record.compressed(),
161 record.compressed_size(),
162 record.uncompressed_size()
163 ),
164 );
165 subfield(
166 "checksum",
167 format!(
168 "{:#010x} ({})",
169 record.checksum(),
170 if record.checksum_valid() {
171 "valid"
172 } else {
173 "invalid"
174 }
175 ),
176 );
177 subfield(
178 "timestamps",
179 format!(
180 "created={} last_write={}",
181 record.creation_time(),
182 record.last_write_time()
183 ),
184 );
185 subfield(
186 "data sizes",
187 format!(
188 "encrypted={} decrypted={} decompressed={} payload={}",
189 record.encrypted_data().len(),
190 record.decrypted_data().len(),
191 record
192 .decompressed_data()
193 .map_or_else(|| "none".to_string(), |data| data.len().to_string()),
194 record.payload_data().len()
195 ),
196 );
197 subfield(
198 "decompression",
199 format!("{:?}", record.decompression_status()),
200 );
201 }
202}Sourcepub fn decompressed_data(&self) -> Option<&[u8]>
pub fn decompressed_data(&self) -> Option<&[u8]>
Returns the decompressed record data bytes when decompression succeeded.
§Returns
Some with the decompressed bytes when the record was compressed and
decompression succeeded, or None when the record was not compressed or
decompression failed.
Examples found in repository?
142fn print_records(records: &[Record]) {
143 section(&format!("records ({})", records.len()));
144 for record in records {
145 println!(" #{} @ offset {}", record.index(), record.offset());
146 subfield("subtype", escape_inline(record.subtype()));
147 subfield("name", escape_inline(record.name()));
148 let profile = record.profile();
149 subfield(
150 "profile",
151 format!(
152 "encoding={:?} encryption={:?} compression={:?}",
153 profile.encoding, profile.encryption, profile.compression
154 ),
155 );
156 subfield(
157 "compressed",
158 format!(
159 "{} (compressed_size={}, uncompressed_size={})",
160 record.compressed(),
161 record.compressed_size(),
162 record.uncompressed_size()
163 ),
164 );
165 subfield(
166 "checksum",
167 format!(
168 "{:#010x} ({})",
169 record.checksum(),
170 if record.checksum_valid() {
171 "valid"
172 } else {
173 "invalid"
174 }
175 ),
176 );
177 subfield(
178 "timestamps",
179 format!(
180 "created={} last_write={}",
181 record.creation_time(),
182 record.last_write_time()
183 ),
184 );
185 subfield(
186 "data sizes",
187 format!(
188 "encrypted={} decrypted={} decompressed={} payload={}",
189 record.encrypted_data().len(),
190 record.decrypted_data().len(),
191 record
192 .decompressed_data()
193 .map_or_else(|| "none".to_string(), |data| data.len().to_string()),
194 record.payload_data().len()
195 ),
196 );
197 subfield(
198 "decompression",
199 format!("{:?}", record.decompression_status()),
200 );
201 }
202}Sourcepub fn payload_data(&self) -> &[u8] ⓘ
pub fn payload_data(&self) -> &[u8] ⓘ
Returns the best available payload bytes.
This is decompressed data when present, otherwise decrypted record data.
§Returns
The decompressed bytes when available, otherwise the decrypted bytes.
Examples found in repository?
142fn print_records(records: &[Record]) {
143 section(&format!("records ({})", records.len()));
144 for record in records {
145 println!(" #{} @ offset {}", record.index(), record.offset());
146 subfield("subtype", escape_inline(record.subtype()));
147 subfield("name", escape_inline(record.name()));
148 let profile = record.profile();
149 subfield(
150 "profile",
151 format!(
152 "encoding={:?} encryption={:?} compression={:?}",
153 profile.encoding, profile.encryption, profile.compression
154 ),
155 );
156 subfield(
157 "compressed",
158 format!(
159 "{} (compressed_size={}, uncompressed_size={})",
160 record.compressed(),
161 record.compressed_size(),
162 record.uncompressed_size()
163 ),
164 );
165 subfield(
166 "checksum",
167 format!(
168 "{:#010x} ({})",
169 record.checksum(),
170 if record.checksum_valid() {
171 "valid"
172 } else {
173 "invalid"
174 }
175 ),
176 );
177 subfield(
178 "timestamps",
179 format!(
180 "created={} last_write={}",
181 record.creation_time(),
182 record.last_write_time()
183 ),
184 );
185 subfield(
186 "data sizes",
187 format!(
188 "encrypted={} decrypted={} decompressed={} payload={}",
189 record.encrypted_data().len(),
190 record.decrypted_data().len(),
191 record
192 .decompressed_data()
193 .map_or_else(|| "none".to_string(), |data| data.len().to_string()),
194 record.payload_data().len()
195 ),
196 );
197 subfield(
198 "decompression",
199 format!("{:?}", record.decompression_status()),
200 );
201 }
202}Sourcepub const fn decompression_status(&self) -> DecompressionStatus
pub const fn decompression_status(&self) -> DecompressionStatus
Returns the decompression status for this record.
§Returns
A DecompressionStatus describing whether the record was compressed and,
if so, whether decompression succeeded.
Examples found in repository?
142fn print_records(records: &[Record]) {
143 section(&format!("records ({})", records.len()));
144 for record in records {
145 println!(" #{} @ offset {}", record.index(), record.offset());
146 subfield("subtype", escape_inline(record.subtype()));
147 subfield("name", escape_inline(record.name()));
148 let profile = record.profile();
149 subfield(
150 "profile",
151 format!(
152 "encoding={:?} encryption={:?} compression={:?}",
153 profile.encoding, profile.encryption, profile.compression
154 ),
155 );
156 subfield(
157 "compressed",
158 format!(
159 "{} (compressed_size={}, uncompressed_size={})",
160 record.compressed(),
161 record.compressed_size(),
162 record.uncompressed_size()
163 ),
164 );
165 subfield(
166 "checksum",
167 format!(
168 "{:#010x} ({})",
169 record.checksum(),
170 if record.checksum_valid() {
171 "valid"
172 } else {
173 "invalid"
174 }
175 ),
176 );
177 subfield(
178 "timestamps",
179 format!(
180 "created={} last_write={}",
181 record.creation_time(),
182 record.last_write_time()
183 ),
184 );
185 subfield(
186 "data sizes",
187 format!(
188 "encrypted={} decrypted={} decompressed={} payload={}",
189 record.encrypted_data().len(),
190 record.decrypted_data().len(),
191 record
192 .decompressed_data()
193 .map_or_else(|| "none".to_string(), |data| data.len().to_string()),
194 record.payload_data().len()
195 ),
196 );
197 subfield(
198 "decompression",
199 format!("{:?}", record.decompression_status()),
200 );
201 }
202}Sourcepub const fn profile(&self) -> RecordProfile
pub const fn profile(&self) -> RecordProfile
Returns the extraction profile facts for this record.
§Returns
A RecordProfile describing the encoding, encryption stream, and
compression wrapper observed for the record.
Examples found in repository?
142fn print_records(records: &[Record]) {
143 section(&format!("records ({})", records.len()));
144 for record in records {
145 println!(" #{} @ offset {}", record.index(), record.offset());
146 subfield("subtype", escape_inline(record.subtype()));
147 subfield("name", escape_inline(record.name()));
148 let profile = record.profile();
149 subfield(
150 "profile",
151 format!(
152 "encoding={:?} encryption={:?} compression={:?}",
153 profile.encoding, profile.encryption, profile.compression
154 ),
155 );
156 subfield(
157 "compressed",
158 format!(
159 "{} (compressed_size={}, uncompressed_size={})",
160 record.compressed(),
161 record.compressed_size(),
162 record.uncompressed_size()
163 ),
164 );
165 subfield(
166 "checksum",
167 format!(
168 "{:#010x} ({})",
169 record.checksum(),
170 if record.checksum_valid() {
171 "valid"
172 } else {
173 "invalid"
174 }
175 ),
176 );
177 subfield(
178 "timestamps",
179 format!(
180 "created={} last_write={}",
181 record.creation_time(),
182 record.last_write_time()
183 ),
184 );
185 subfield(
186 "data sizes",
187 format!(
188 "encrypted={} decrypted={} decompressed={} payload={}",
189 record.encrypted_data().len(),
190 record.decrypted_data().len(),
191 record
192 .decompressed_data()
193 .map_or_else(|| "none".to_string(), |data| data.len().to_string()),
194 record.payload_data().len()
195 ),
196 );
197 subfield(
198 "decompression",
199 format!("{:?}", record.decompression_status()),
200 );
201 }
202}