utils.rs (1420B)
1 /* 2 * This file is part of LibEuFin. 3 * Copyright (C) 2026 Taler Systems S.A. 4 5 * LibEuFin is free software; you can redistribute it and/or modify 6 * it under the terms of the GNU Affero General Public License as 7 * published by the Free Software Foundation; either version 3, or 8 * (at your option) any later version. 9 10 * LibEuFin is distributed in the hope that it will be useful, but 11 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 12 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General 13 * Public License for more details. 14 15 * You should have received a copy of the GNU Affero General Public 16 * License along with LibEuFin; see the file COPYING. If not, see 17 * <http://www.gnu.org/licenses/> 18 */ 19 20 use std::{fmt::Display, io::Write as _}; 21 22 use flate2::{ 23 Compression, 24 write::{ZlibDecoder, ZlibEncoder}, 25 }; 26 27 pub fn deflate(bytes: &[u8]) -> Vec<u8> { 28 let mut encoder = ZlibEncoder::new(Vec::new(), Compression::default()); 29 encoder.write_all(bytes).unwrap(); 30 encoder.finish().unwrap() 31 } 32 33 pub fn inflate(bytes: &[u8]) -> Vec<u8> { 34 let mut encoder = ZlibDecoder::new(Vec::new()); 35 encoder.write_all(bytes).unwrap(); 36 encoder.finish().unwrap() 37 } 38 39 pub fn hex_chunk_by_two<'a>(bytes: impl AsRef<[u8]> + 'a) -> impl Display + 'a { 40 std::fmt::from_fn(move |f| { 41 for b in bytes.as_ref() { 42 write!(f, "{b:02X} ")?; 43 } 44 Ok(()) 45 }) 46 }