#![cfg(windows)]
#![cfg_attr(not(feature = "std"), no_std)]
#[cfg(feature = "std")]
mod convert;
mod ntstring;
mod raw;
#[cfg(feature = "std")]
mod string;
#[cfg(feature = "std")]
pub mod traits;
mod windy_str;
pub use ntstring::*;
use raw::*;
#[cfg(feature = "std")]
pub use string::*;
pub use windy_str::*;
#[cfg(not(feature = "std"))]
#[allow(unused_imports)]
pub(crate) mod __lib {
pub(crate) use core::{cmp, convert, fmt, ops, ptr, slice};
}
#[cfg(feature = "std")]
#[allow(unused_imports)]
pub(crate) mod __lib {
pub(crate) use std::{cmp, convert, fmt, ops, ptr, slice};
}
use __lib::fmt;
#[derive(Copy, Clone, Ord, PartialOrd, Eq, PartialEq)]
pub enum ConvertError {
ConvertToUtf8Error(u32),
ConvertToAnsiError(u32),
ConvertToUnicodeError(u32),
}
impl ConvertError {
#[inline]
pub fn as_error_code(&self) -> u32 {
match self {
Self::ConvertToUtf8Error(x) => *x,
Self::ConvertToAnsiError(x) => *x,
Self::ConvertToUnicodeError(x) => *x,
}
}
}
impl fmt::Debug for ConvertError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
let st = match self {
Self::ConvertToUtf8Error(_) => "ConvertToUtf8Error",
Self::ConvertToAnsiError(_) => "ConvertToAnsiError",
Self::ConvertToUnicodeError(_) => "ConvertToUnicodeError",
};
#[cfg(feature = "std")]
{
let e =
std::io::Error::from_raw_os_error(self.as_error_code() as i32);
f.debug_struct(st).field("", &e).finish()
}
#[cfg(not(feature = "std"))]
{
f.debug_struct(st).field("", &self.as_error_code()).finish()
}
}
}
#[cfg(feature = "std")]
impl std::error::Error for ConvertError {}
impl fmt::Display for ConvertError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
__lib::fmt::Debug::fmt(self, f)
}
}
impl From<ConvertError> for u32 {
fn from(x: ConvertError) -> Self { x.as_error_code() }
}
impl From<ConvertError> for i32 {
fn from(x: ConvertError) -> Self { x.as_error_code() as i32 }
}
#[macro_export]
macro_rules! conv_err {
(@utf8 $e:expr) => {
$crate::ConvertError::ConvertToUtf8Error($e)
};
(@ansi $e:expr) => {
$crate::ConvertError::ConvertToAnsiError($e)
};
(@unicode $e:expr) => {
$crate::ConvertError::ConvertToUnicodeError($e)
};
(@utf8) => {
$crate::ConvertError::ConvertToUtf8Error
};
(@ansi) => {
$crate::ConvertError::ConvertToAnsiError
};
(@unicode) => {
$crate::ConvertError::ConvertToUnicodeError
};
}
pub type ConvertResult<T> = Result<T, ConvertError>;