use crate::Ustring;
use std::{io, io::Read, mem};
pub trait UapiReadExt {
fn read_to_ustring(&mut self, s: &mut Ustring) -> io::Result<usize>;
fn read_to_new_ustring(&mut self) -> io::Result<Ustring>;
}
impl<T: Read> UapiReadExt for T {
fn read_to_ustring(&mut self, orig: &mut Ustring) -> io::Result<usize> {
let mut s = mem::replace(orig, Ustring::new()).into_vec();
let res = self.read_to_end(&mut s);
*orig = Ustring::from_vec(s);
res
}
fn read_to_new_ustring(&mut self) -> io::Result<Ustring> {
let mut s = Ustring::new();
self.read_to_ustring(&mut s).map(|_| s)
}
}