use std::io;
use crate::{
api::{ops, resource::FromResource},
fs::File,
operation::{OpMeta, Operation, OperationExt},
};
pub struct OpenatFile(ops::OpenAt);
impl OperationExt for OpenatFile {
type Result = io::Result<File>;
}
impl Operation for OpenatFile {
fn run_blocking(&self) -> isize {
self.0.run_blocking()
}
fn meta(&self) -> OpMeta {
self.0.meta()
}
fn result(&mut self, ret: isize) -> *const () {
let ptr =
self.0.result(ret) as *const <ops::Socket as OperationExt>::Result;
let accept_result = unsafe { ptr.read() };
let socket_result = accept_result.map(File::from_resource);
Box::into_raw(Box::new(socket_result)) as *const ()
}
fn cap(&self) -> i32 {
self.0.cap()
}
#[cfg(linux)]
fn create_entry(&self) -> lio_uring::submission::Entry {
self.0.create_entry()
}
}