use crate::*;
pub trait ToWString {
fn to_wstring(&self) -> WString {
self.try_to_wstring().expect("Failed to convert to WString")
}
fn try_to_wstring(&self) -> ConvertResult<WString>;
}
pub trait ToAString<const CP: u32> {
fn to_astring(&self) -> AString<CP> {
self.try_to_astring().expect("Failed to convert to AString")
}
fn try_to_astring(&self) -> ConvertResult<AString<CP>>;
fn to_astring_lossy(&self) -> AString<CP> {
self.try_to_astring_lossy()
.expect("Failed to convert to AString")
}
fn try_to_astring_lossy(&self) -> ConvertResult<AString<CP>>;
}
pub trait ToDAString {
fn to_dastring(&self, code_page: u32) -> DAString {
self.try_to_dastring(code_page)
.expect("Failed to convert to DAString")
}
fn try_to_dastring(&self, code_page: u32) -> ConvertResult<DAString>;
fn to_dastring_lossy(&self, code_page: u32) -> DAString {
self.try_to_dastring_lossy(code_page)
.expect("Failed to convert to DAString")
}
fn try_to_dastring_lossy(&self, code_page: u32) -> ConvertResult<DAString>;
}
macro_rules! impl_to_wstring {
($x:ident) => {
impl $crate::traits::ToWString for $x {
fn to_wstring(&self) -> WString {
self.try_to_wstring().expect("Failed to convert to WString")
}
fn try_to_wstring(&self) -> ConvertResult<WString> {
$crate::WString::from_utf8(self)
}
}
};
}
macro_rules! impl_to_astring {
($x:ident) => {
impl<const CP: u32> ToAString<CP> for $x {
fn try_to_astring(&self) -> ConvertResult<AString<CP>> {
AString::from_utf8(self)
}
fn try_to_astring_lossy(&self) -> ConvertResult<AString<CP>> {
AString::try_from_utf8_lossy(self)
}
}
};
}
macro_rules! impl_to_dastring {
($x:ident) => {
impl ToDAString for $x {
fn try_to_dastring(
&self,
code_page: u32,
) -> ConvertResult<DAString> {
DAString::from_utf8(code_page, self)
}
fn try_to_dastring_lossy(
&self,
code_page: u32,
) -> ConvertResult<DAString> {
DAString::try_from_utf8_lossy(code_page, self)
}
}
};
}
impl_to_wstring!(String);
impl_to_astring!(String);
impl_to_dastring!(String);
impl_to_wstring!(str);
impl_to_astring!(str);
impl_to_dastring!(str);