use crate::app_error_from;
use crate::tina::data::AppResult;
use std::io::{Cursor, Read, Write};
pub struct Base64;
impl Base64 {
pub fn encode_string(src: &str) -> AppResult<String> {
if src.is_empty() {
return Ok(src.to_owned());
}
let mut enc = base64::write::EncoderStringWriter::new(&base64::engine::general_purpose::STANDARD);
match enc.write_all(src.as_bytes()) {
Ok(_) => Ok(enc.into_inner()),
Err(err) => Err(app_error_from!(err)),
}
}
pub fn encode_string_to_bytes(src: &str) -> AppResult<Vec<u8>> {
if src.is_empty() {
return Ok(src.as_bytes().to_vec());
}
let mut enc = base64::write::EncoderStringWriter::new(&base64::engine::general_purpose::STANDARD);
match enc.write_all(src.as_bytes()) {
Ok(_) => Ok(enc.into_inner().into_bytes()),
Err(err) => Err(app_error_from!(err)),
}
}
pub fn encode_bytes(buf: &[u8]) -> AppResult<Vec<u8>> {
if buf.is_empty() {
return Ok(buf.to_vec());
}
let mut enc = base64::write::EncoderStringWriter::new(&base64::engine::general_purpose::STANDARD);
match enc.write_all(buf) {
Ok(_) => Ok(enc.into_inner().into_bytes()),
Err(err) => Err(app_error_from!(err)),
}
}
pub fn encode_bytes_to_string(buf: &[u8]) -> AppResult<String> {
if buf.is_empty() {
return match String::from_utf8(buf.to_vec()) {
Ok(s) => Ok(s),
Err(err) => Err(app_error_from!(err)),
};
}
let mut enc = base64::write::EncoderStringWriter::new(&base64::engine::general_purpose::STANDARD);
match enc.write_all(buf) {
Ok(_) => Ok(enc.into_inner()),
Err(err) => Err(app_error_from!(err)),
}
}
pub fn decode_string(src: &str) -> AppResult<String> {
if src.is_empty() {
return Ok(src.to_owned());
}
let mut wrapped_reader = Cursor::new(src);
let mut decoder = base64::read::DecoderReader::new(&mut wrapped_reader, &base64::engine::general_purpose::STANDARD);
let mut result = Vec::new();
match decoder.read_to_end(&mut result) {
Ok(_) => match String::from_utf8(result) {
Ok(s) => Ok(s),
Err(err) => Err(app_error_from!(err)),
},
Err(err) => Err(app_error_from!(err)),
}
}
pub fn decode_string_to_bytes(src: &str) -> AppResult<Vec<u8>> {
if src.is_empty() {
return Ok(src.as_bytes().to_vec());
}
let mut wrapped_reader = Cursor::new(src);
let mut decoder = base64::read::DecoderReader::new(&mut wrapped_reader, &base64::engine::general_purpose::STANDARD);
let mut result = Vec::new();
match decoder.read_to_end(&mut result) {
Ok(_) => Ok(result),
Err(err) => Err(app_error_from!(err)),
}
}
pub fn decode_bytes(buf: &[u8]) -> AppResult<Vec<u8>> {
if buf.is_empty() {
return Ok(buf.to_vec());
}
let mut wrapped_reader = Cursor::new(buf);
let mut decoder = base64::read::DecoderReader::new(&mut wrapped_reader, &base64::engine::general_purpose::STANDARD);
let mut result = Vec::new();
match decoder.read_to_end(&mut result) {
Ok(_) => Ok(result),
Err(err) => Err(app_error_from!(err)),
}
}
pub fn decode_bytes_to_string(buf: &[u8]) -> AppResult<String> {
if buf.is_empty() {
return match String::from_utf8(buf.to_vec()) {
Ok(s) => Ok(s),
Err(err) => Err(app_error_from!(err)),
};
}
let mut wrapped_reader = Cursor::new(buf);
let mut decoder = base64::read::DecoderReader::new(&mut wrapped_reader, &base64::engine::general_purpose::STANDARD);
let mut result = Vec::new();
match decoder.read_to_end(&mut result) {
Ok(_) => match String::from_utf8(result) {
Ok(s) => Ok(s),
Err(err) => Err(app_error_from!(err)),
},
Err(err) => Err(app_error_from!(err)),
}
}
}