1 use std::os::wasi::io::{FromRawFd, AsRawFd}; 2 3 use {TcpBuilder, UdpBuilder, FromInner, AsInner}; 4 use socket::Socket; 5 use sys::{self, c::__wasi_fd_t}; 6 7 impl FromRawFd for TcpBuilder { from_raw_fd(fd: __wasi_fd_t) -> TcpBuilder8 unsafe fn from_raw_fd(fd: __wasi_fd_t) -> TcpBuilder { 9 let sock = sys::Socket::from_inner(fd); 10 TcpBuilder::from_inner(Socket::from_inner(sock)) 11 } 12 } 13 14 impl AsRawFd for TcpBuilder { as_raw_fd(&self) -> __wasi_fd_t15 fn as_raw_fd(&self) -> __wasi_fd_t { 16 // TODO: this unwrap() is very bad 17 self.as_inner().borrow().as_ref().unwrap().as_inner().raw() as __wasi_fd_t 18 } 19 } 20 21 impl FromRawFd for UdpBuilder { from_raw_fd(fd: __wasi_fd_t) -> UdpBuilder22 unsafe fn from_raw_fd(fd: __wasi_fd_t) -> UdpBuilder { 23 let sock = sys::Socket::from_inner(fd); 24 UdpBuilder::from_inner(Socket::from_inner(sock)) 25 } 26 } 27 28 impl AsRawFd for UdpBuilder { as_raw_fd(&self) -> __wasi_fd_t29 fn as_raw_fd(&self) -> __wasi_fd_t { 30 // TODO: this unwrap() is very bad 31 self.as_inner().borrow().as_ref().unwrap().as_inner().raw() as __wasi_fd_t 32 } 33 } 34