Ванильный js это XMLHttpRequest. а fetch это высокоуровневая обертка.
Это плохо, потому что только он позволяет отслеживать прогресс загрузки
use std::{fs::File, io::Write, mem, path::PathBuf, sync::mpsc, thread};
fn main() {
let (tx, rx) = mpsc::channel::<Vec<_>>();
let handle = thread::spawn(move || {
let path = PathBuf::from("...");
let mut output = File::create(&path).unwrap_or_else(|e| {
panic!(
"failed to create file with path {:?}: {:?}",
path.as_os_str(),
e
)
});
loop {
let Ok(buf) = rx.recv() else {
break;
};
output.write(&buf).expect("failed to write");
}
});
let big_buffer = get_big_buffer_input();
let mut buf = Vec::with_capacity(1024);
for byte in big_buffer {
buf.push(byte);
if buf.len() == buf.capacity() {
let buf = mem::take(&mut buf);
tx.send(buf).expect("failed to send buf");
}
}
handle.join().unwrap();
}
fn get_big_buffer_input() -> impl Iterator<Item = u8> {
todo!()
}
mod float_trait {
pub trait Float {
const INITIAL_VALUE: Self;
}
impl Float for f32 {
const INITIAL_VALUE: Self = 0.3;
}
impl Float for f64 {
const INITIAL_VALUE: Self = 0.3;
}
}
// ...
impl<T: Float> FloatStruct<T> {
pub fn new() -> Self {
Self {
_a: 2,
_b: String::from("hi"),
c: T::INITIAL_VALUE,
}
}
}
// ...
From<f64>
, только TryFromтакже, чтобы результат лежал не в heap
получить вектор символов из исходного байт-вектораа почему бы тогда
Vec<char>
не использовать? для понимания, - почему блок A работает, а B - нет:
c.to_string().as_str()
, а ссылка на него в рамках всего блока В. Ссылка не может жить дольше чем то, на что она ссылается.правильно ли я делаю, если важна скорость и нужно конвертировать из Vec_u8 в Vec_Stringважна скорость чего?
u03.push(c.to_string().as_str());
тут Вы сохраняете ссылку на временный объект строки. Строка дропнется прямо на этой же строке, а ссылка на нее останется, а следовательно будет не валидной. Rust запрещает творить такую дичь, и хорошо что запрещает, в плюсах такой код был бы UB.
Rise, проще всего с загрузкой одиночного файла как тела запроса:
С FormData чуть по заморочнее, придется ручками энкодить multipart/form-data в ReadableStream и там же считать прогресс. Зато можно делать много других интересных вещей, которые в устаревшем XMLHttpRequest недоступны, например формировать тело запроса на лету.