(no title)
yinser | 1 year ago
// Use a mutable slice to represent the buffer:
let mut buffer = [0u8; 16];
// Read into the buffer:
let n = socket.read(&mut buffer)?;
// To move the partial second row to the beginning, you'd use safe operations like:
let second_row_start = 7; // Index where second row starts
buffer.copy_within(second_row_start.., 0);
// Then read more data into the remaining space:
let remaining_space = &mut buffer[9..];
let additional_bytes = socket.read(remaining_space)?;
Is this idiomatic for Rust?
steveklabnik|1 year ago
For the buffer example, the one after "As a made up example, consider:", I'm not sure I would personally write the code to move the previous stuff to the start of the buffer, but instead process the whole buffer, even if that means a partial parse, and then fill the buffer again, finishing the parse.
But if you wanted to translate the "Let's extract this specific example and try:" into Rust:
copy_from_slice is a memcpy: https://doc.rust-lang.org/stable/std/primitive.slice.html#me...This errors at compile time:
We cannot use the help suggestion to make this work, because the slices would be overlapping. But it is a compile time error, not a runtime one. If we did use split_at_mut, that would end up being a runtime panic, because the index comparison happens at runtime.If I wanted to do what the copyForwards example, sure, that works, but you're in the realm of unsafe: https://doc.rust-lang.org/std/ptr/fn.copy.html
yinser|1 year ago