libeufin

Integration and sandbox testing for FinTech APIs and data formats
Log | Files | Refs | Submodules | README | LICENSE

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 }