use bytes::BytesMut;
use std::io::BufReader;
use std::io::prelude::*;
use std::fs::File;
#[derive(Debug)]
pub struct Clippet {
label: String,
size: i32,
data: Vec<BytesMut>,
}
impl Clippet {
pub fn get_label(&self) -> String {
return self.label.to_string()
}
pub fn set_label(&mut self, label: &str) -> bool {
self.label = label.to_string();
if &self.label == label {
return true
} else {
return false
}
}
pub fn add_bytes(&mut self, bytes: BytesMut) {
self.data.push(bytes);
self.size = self.size + 1;
}
pub fn drop_bytes(&mut self, index: usize) {
self.data.remove(index);
self.size = self.size - 1;
}
pub fn get_size(&self) -> i32 {
return self.size
}
pub fn get_data(&self, index: usize) -> BytesMut {
return self.data[index].to_owned()
}
pub fn get_as_string(&self, index: usize) -> String {
let bytes = self.get_data(index);
let y = bytes.as_ref();
let x = String::from_utf8_lossy(y).to_string();
return x
}
pub fn from_file(name: &str, size: usize) -> Clippet {
let mut i = false;
let mut data: Vec<BytesMut> = vec![];
let f = File::open(name).unwrap();
let mut reader = BufReader::with_capacity(size, f);
while !i {
let buffer = reader.fill_buf().unwrap();
let bytes = BytesMut::from(buffer);
data.push(bytes);
let length = buffer.len();
if length < size { i = true; }
reader.consume(length);
}
let clip = Clippet { label: "".to_string(), size: data.len() as i32, data: data };
return clip
}
pub fn from_bytes(bytes: BytesMut) -> Clippet {
let clip = Clippet { label: "".to_string(), size: 1, data: vec![bytes] };
return clip
}
pub fn len(&self) -> i32 {
return self.get_size()
}
pub fn from_string(str: &str, size: usize) -> Clippet {
let mut i = false;
let mut data: Vec<BytesMut> = vec![];
let string = str.as_bytes();
let mut reader = BufReader::with_capacity(size, string);
while !i {
let buffer = reader.fill_buf().unwrap();
let bytes = BytesMut::from(buffer);
data.push(bytes);
let length = buffer.len();
if length < size { i = true; }
reader.consume(length);
}
let clip = Clippet { label: "".to_string(), size: data.len() as i32, data: data };
return clip
}
pub fn combine(self) -> String {
let mut string = "".to_string();
for v in self.data {
let y = v.as_ref();
let x = String::from_utf8_lossy(y).to_string();
if string == "".to_string() {
string = x;
} else {
string = format!("{}{}", string, x);
}
}
return string
}
pub fn dechunk(self) -> Clippet {
let label = self.label.to_string();
let data = self.combine();
let clip = Clippet { label: label, size: 1, data: vec![BytesMut::from(data.as_str())] };
return clip
}
pub fn rechunk(self, size: usize) -> Clippet {
let label = self.label.to_string();
let data = self.combine();
let mut clip = Clippet::from_string(&data, size);
if label != "".to_string() { clip.label = label; }
return clip
}
}