wasmtime_wasi/p2/
network.rs

1use crate::p2::bindings::sockets::network::{ErrorCode, Ipv4Address, Ipv6Address};
2use crate::TrappableError;
3
4pub type SocketResult<T> = Result<T, SocketError>;
5
6pub type SocketError = TrappableError<ErrorCode>;
7
8impl From<wasmtime::component::ResourceTableError> for SocketError {
9    fn from(error: wasmtime::component::ResourceTableError) -> Self {
10        Self::trap(error)
11    }
12}
13
14impl From<std::io::Error> for SocketError {
15    fn from(error: std::io::Error) -> Self {
16        ErrorCode::from(error).into()
17    }
18}
19
20impl From<rustix::io::Errno> for SocketError {
21    fn from(error: rustix::io::Errno) -> Self {
22        ErrorCode::from(error).into()
23    }
24}
25
26pub(crate) fn to_ipv4_addr(addr: Ipv4Address) -> std::net::Ipv4Addr {
27    let (x0, x1, x2, x3) = addr;
28    std::net::Ipv4Addr::new(x0, x1, x2, x3)
29}
30
31pub(crate) fn from_ipv4_addr(addr: std::net::Ipv4Addr) -> Ipv4Address {
32    let [x0, x1, x2, x3] = addr.octets();
33    (x0, x1, x2, x3)
34}
35
36pub(crate) fn to_ipv6_addr(addr: Ipv6Address) -> std::net::Ipv6Addr {
37    let (x0, x1, x2, x3, x4, x5, x6, x7) = addr;
38    std::net::Ipv6Addr::new(x0, x1, x2, x3, x4, x5, x6, x7)
39}
40
41pub(crate) fn from_ipv6_addr(addr: std::net::Ipv6Addr) -> Ipv6Address {
42    let [x0, x1, x2, x3, x4, x5, x6, x7] = addr.segments();
43    (x0, x1, x2, x3, x4, x5, x6, x7)
44}