use base64::{engine::general_purpose::STANDARD as BASE64, Engine};
use rand::distr::{Alphanumeric, SampleString};
use rand::RngExt;
use serde::{de::DeserializeOwned, Serialize};
pub struct DataHelpers;
impl DataHelpers {
pub fn serialize<T: Serialize>(value: &T) -> Result<String, serde_json::Error> {
serde_json::to_string(value)
}
pub fn deserialize<T: DeserializeOwned>(s: &str) -> Result<T, serde_json::Error> {
serde_json::from_str(s)
}
pub fn to_base64(s: &str) -> String {
BASE64.encode(s.as_bytes())
}
pub fn from_base64(s: &str) -> Result<String, base64::DecodeError> {
let bytes = BASE64.decode(s)?;
Ok(String::from_utf8_lossy(&bytes).to_string())
}
pub fn create_token(len: usize) -> String {
Alphanumeric.sample_string(&mut rand::rng(), len)
}
pub fn create_token_range(min: usize, max: usize, _range: usize, _prefix: &str, _alphanum: bool) -> String {
let len = if max > min { rand::rng().random_range(min..=max) } else { min };
Self::create_token(len)
}
pub fn to_json<T: Serialize>(v: &T) -> serde_json::Value {
serde_json::to_value(v).unwrap_or(serde_json::Value::Null)
}
}