use std::io::Result;
use std::io::SeekFrom;
use crate::std_io::WriteSeek;
pub(super) fn write_all_at_preserving_position_impl(
output: &mut dyn WriteSeek,
offset: u64,
buffer: &[u8],
) -> Result<()> {
let position = output.stream_position()?;
let write_result = match output.seek(SeekFrom::Start(offset)) {
Ok(_) => output.write_all(buffer),
Err(error) => Err(error),
};
let restore_result = output.seek(SeekFrom::Start(position));
match (write_result, restore_result) {
(Ok(()), Ok(_)) => Ok(()),
(Err(error), Ok(_)) => Err(error),
(_, Err(error)) => Err(error),
}
}