assetpack_transform_precomp2/
precomp2_zstd.rs1use std::io::{BufRead, Write};
2
3use assetpack_core::{
4 TRANSFORM_ID_PRECOMP2_ZSTD, TRANSFORM_VERSION_PRECOMP2_ZSTD, TransformDecoder,
5 file_transform::{FileHint, FileTransform, FileTransformConfig, TransformStats},
6};
7
8use crate::common::{
9 TransformGate, precomp2_decode_bytes, precomp2_decode_config, precomp2_encode_bytes, precomp2_encode_config, read_all, zstd_compress,
10 zstd_decompress,
11};
12
13#[derive(Debug, Clone)]
14pub struct Precomp2ZstdTransform {
15 gate: TransformGate,
16 encode_config: precomp2::EncodeConfig,
17 decode_config: precomp2::DecodeConfig,
18 level: i32,
19}
20
21impl Precomp2ZstdTransform {
22 pub fn new(config: &FileTransformConfig) -> Self {
23 Self {
24 gate: TransformGate::new(config),
25 encode_config: precomp2_encode_config(&config.precomp2),
26 decode_config: precomp2_decode_config(&config.precomp2),
27 level: config.precomp2_zstd.level,
28 }
29 }
30}
31
32impl TransformDecoder for Precomp2ZstdTransform {
33 fn id(&self) -> u16 {
34 TRANSFORM_ID_PRECOMP2_ZSTD
35 }
36
37 fn version(&self) -> u16 {
38 TRANSFORM_VERSION_PRECOMP2_ZSTD
39 }
40
41 fn decode(&self, input: &mut dyn BufRead, out: &mut dyn Write) -> assetpack_core::Result<()> {
42 let encoded = read_all(input)?;
43 let decoded = zstd_decompress(&encoded)?;
44 let output = precomp2_decode_bytes(&decoded, &self.decode_config)?;
45 out.write_all(&output)?;
46 Ok(())
47 }
48}
49
50impl FileTransform for Precomp2ZstdTransform {
51 fn quick_check(&self, hint: &FileHint) -> bool {
52 self.gate.quick_check(hint)
53 }
54
55 fn encode(&self, input: &mut dyn BufRead, out: &mut dyn Write) -> assetpack_core::Result<TransformStats> {
56 let input_bytes = read_all(input)?;
57 let input_len = input_bytes.len() as u64;
58 let encoded = precomp2_encode_bytes(&input_bytes, &self.encode_config)?;
59 let compressed = zstd_compress(&encoded, self.level)?;
60 out.write_all(&compressed)?;
61 Ok(TransformStats {
62 input_bytes: input_len,
63 output_bytes: compressed.len() as u64,
64 })
65 }
66}