use super::NSString;
use crate::core::Arc;
use crate::objc::NSUInteger;
use std::fmt;
#[repr(transparent)]
#[derive(Copy, Clone, Ord, PartialOrd, Eq, PartialEq, Hash)]
pub struct NSStringEncoding(pub NSUInteger);
impl fmt::Debug for NSStringEncoding {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
if let Some(name) = unsafe { self.name_unretained() } {
name.fmt(f)
} else {
f.debug_tuple("Unknown").field(&self.0).finish()
}
}
}
impl NSStringEncoding {
#[inline]
#[doc(alias = "CFStringGetNameOfEncoding")]
pub fn name(&self) -> Option<Arc<NSString>> {
Some(Arc::retain(unsafe { self.name_unretained()? }))
}
#[inline]
pub(crate) unsafe fn name_unretained<'a>(&self) -> Option<&'a NSString> {
type CFStringEncoding = u32;
extern "C" {
fn CFStringConvertNSStringEncodingToEncoding(enc: NSStringEncoding)
-> CFStringEncoding;
fn CFStringGetNameOfEncoding<'a>(enc: CFStringEncoding) -> Option<&'a NSString<'a>>;
}
CFStringGetNameOfEncoding(CFStringConvertNSStringEncodingToEncoding(*self))
}
}
impl NSStringEncoding {
pub const ASCII: Self = Self(1);
pub const ASCII_NON_LOSSY: Self = Self(7);
pub const UNICODE: Self = Self::UTF16;
pub const UTF8: Self = Self(4);
pub const UTF16: Self = Self(10);
pub const UTF16_BE: Self = Self(0x90000100);
pub const UTF16_LE: Self = Self(0x94000100);
pub const UTF32: Self = Self(0x8c000100);
pub const UTF32_BE: Self = Self(0x98000100);
pub const UTF32_LE: Self = Self(0x9c000100);
pub const NEXT_STEP: Self = Self(2);
pub const ISO_LATIN1: Self = Self(5);
pub const ISO_LATIN2: Self = Self(9);
pub const SYMBOL: Self = Self(6);
pub const SHIFT_JIS: Self = Self(8);
pub const JP_EUC: Self = Self(3);
pub const JP_ISO2022: Self = Self(21);
pub const MAC_ROMAN: Self = Self(30);
pub const WINDOWS_CP1251: Self = Self(11);
pub const WINDOWS_CP1252: Self = Self(12);
pub const WINDOWS_CP1253: Self = Self(13);
pub const WINDOWS_CP1254: Self = Self(14);
pub const WINDOWS_CP1250: Self = Self(15);
}