trait FileDescriptor: Debug {
fn as_file_handle<'tcx>(&self) -> InterpResult<'tcx, &FileHandle>;
fn read<'tcx>(
&mut self,
communicate_allowed: bool,
bytes: &mut [u8]
) -> InterpResult<'tcx, Result<usize>>;
fn write<'tcx>(
&self,
communicate_allowed: bool,
bytes: &[u8]
) -> InterpResult<'tcx, Result<usize>>;
fn seek<'tcx>(
&mut self,
communicate_allowed: bool,
offset: SeekFrom
) -> InterpResult<'tcx, Result<u64>>;
fn close<'tcx>(
self: Box<Self>,
_communicate_allowed: bool
) -> InterpResult<'tcx, Result<i32>>;
fn dup(&mut self) -> Result<Box<dyn FileDescriptor>>;
}