use std::{ffi::c_int, fmt};
use windows_sys::Win32::Networking::WinSock::
{
SOCK_DGRAM, SOCK_RAW, SOCK_STREAM, WINSOCK_SOCKET_TYPE, WSA_FLAG_NO_HANDLE_INHERIT, WSA_FLAG_OVERLAPPED, WSA_FLAG_REGISTERED_IO
};
use bitflags::bitflags;
#[repr(transparent)]
#[derive(Debug, Copy, Clone, Eq, PartialEq)]
pub struct So9SockType(pub WINSOCK_SOCKET_TYPE);
impl So9SockType
{
pub const STREAM: Self = Self(SOCK_STREAM);
pub const DGRAM: Self = Self(SOCK_DGRAM);
pub const RAW: Self = Self(SOCK_RAW);
}
impl fmt::Display for So9SockType
{
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result
{
if self == &Self::STREAM
{
write!(f, "SOCK_STREAM")
}
else if self == &Self::DGRAM
{
write!(f, "SOCK_DGRAM")
}
else if self == &Self::RAW
{
write!(f, "SOCK_RAW")
}
else
{
write!(f, "UNKNOWN {}", self.0)
}
}
}
impl From<c_int> for So9SockType
{
fn from(value: c_int) -> Self
{
Self(value)
}
}
bitflags! {
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct So9SockDwFlags: u32
{
const OVERALPPED = WSA_FLAG_OVERLAPPED;
const NO_HNDL_INHERIT = WSA_FLAG_NO_HANDLE_INHERIT;
const REGISTERED_IO = WSA_FLAG_REGISTERED_IO;
}
}