use std::fs;
use std::io::ErrorKind;
use base64::alphabet::STANDARD;
use base64::engine::general_purpose;
use base64::engine::Engine;
use base64::engine::GeneralPurpose;
use crate::core::request_interface::RequestInterface;
pub struct ImageInstrument {
engine: GeneralPurpose,
}
impl Default for ImageInstrument {
fn default() -> Self {
ImageInstrument::new()
}
}
impl ImageInstrument {
pub fn new() -> Self {
ImageInstrument {
engine: GeneralPurpose::new(&STANDARD, general_purpose::PAD),
}
}
pub fn read_image_file(&self, file_path: String) -> String {
let contents = match fs::read(&file_path) {
Ok(content) => content,
Err(error) => match error.kind() {
ErrorKind::NotFound => panic!("File `{file_path}` is not exists!"),
_ => panic!("Can't read file - {error}"),
},
};
self.engine.encode(contents)
}
pub async fn read_image_link(&self, file_url: String) -> String {
let request_client = RequestInterface::new();
let result = match request_client.send_get_request(&file_url).await {
Ok(result) => result,
Err(error) => panic!("{}", error),
};
self.engine.encode(result.bytes().await.unwrap())
}
}