xmpp-rs/icu/src/bindings.rs
Emmanuel Gil Peyrot 8d4ed296d0 icu: Make links in docstrings actual links
Thanks `cargo doc` for the helpful warnings!
2022-09-20 19:14:57 +02:00

149 lines
3.9 KiB
Rust
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//! Crate wrapping what we need from ICUs C API for JIDs.
//!
//! See <http://site.icu-project.org/>
use std::os::raw::c_char;
// From unicode/umachine.h
pub(crate) type UChar = u16;
// From unicode/utypes.h
pub(crate) type UErrorCode = u32;
pub(crate) const U_ZERO_ERROR: UErrorCode = 0;
pub(crate) type UStringPrepProfile = u32;
type UParseError = u32;
// From unicode/usprep.h
pub(crate) const USPREP_DEFAULT: i32 = 0;
pub(crate) const USPREP_ALLOW_UNASSIGNED: i32 = 1;
pub(crate) type UStringPrepProfileType = u32;
pub(crate) const USPREP_RFC3491_NAMEPREP: UStringPrepProfileType = 0;
pub(crate) const USPREP_RFC3920_NODEPREP: UStringPrepProfileType = 7;
pub(crate) const USPREP_RFC3920_RESOURCEPREP: UStringPrepProfileType = 8;
pub(crate) const USPREP_RFC4013_SASLPREP: UStringPrepProfileType = 10;
// From unicode/utrace.h
type UTraceLevel = i32;
pub(crate) const UTRACE_VERBOSE: UTraceLevel = 9;
// From unicode/uidna.h
#[repr(C)]
pub(crate) struct UIDNA {
_unused: [u8; 0],
}
type UBool = i8;
#[repr(C)]
pub(crate) struct UIDNAInfo {
size: i16,
is_transitional_different: UBool,
reserved_b3: UBool,
errors: u32,
reserved_i2: i32,
reserved_i3: i32,
}
impl UIDNAInfo {
pub(crate) fn new() -> UIDNAInfo {
assert_eq!(std::mem::size_of::<UIDNAInfo>(), 16);
UIDNAInfo {
size: std::mem::size_of::<UIDNAInfo>() as i16,
is_transitional_different: false as UBool,
reserved_b3: false as UBool,
errors: 0,
reserved_i2: 0,
reserved_i3: 0,
}
}
// TODO: Return a String instead, or a custom error type, this is a bitflag (defined in
// uidna.h) where multiple errors can be accumulated.
pub(crate) fn get_errors(&self) -> u32 {
self.errors
}
}
pub(crate) const UIDNA_DEFAULT: u32 = 0;
pub(crate) const UIDNA_USE_STD3_RULES: u32 = 2;
pub(crate) type UIdnaFunction = unsafe extern "C" fn(
*const UIDNA,
*const u8,
i32,
*mut u8,
i32,
*mut UIDNAInfo,
*mut u32,
) -> i32;
// From unicode/uspoof.h
#[repr(C)]
pub(crate) struct USpoofChecker {
_unused: [u8; 0],
}
pub(crate) const USPOOF_CONFUSABLE: i32 = 7;
#[link(name = "bindings")]
extern "C" {
// From unicode/ustring.h
pub(crate) fn icu_error_code_to_name(code: UErrorCode) -> *const c_char;
// From unicode/usprep.h
pub(crate) fn icu_stringprep_open(
type_: UStringPrepProfileType,
status: *mut UErrorCode,
) -> *mut UStringPrepProfile;
pub(crate) fn icu_stringprep_prepare(
prep: *const UStringPrepProfile,
src: *const UChar,
srcLength: i32,
dest: *mut UChar,
destCapacity: i32,
options: i32,
parseError: *mut UParseError,
status: *mut UErrorCode,
) -> i32;
// From unicode/utrace.h
pub(crate) fn icu_trace_set_level(traceLevel: UTraceLevel);
// From unicode/uidna.h
pub(crate) fn icu_idna_open(options: u32, pErrorCode: *mut UErrorCode) -> *mut UIDNA;
pub(crate) fn icu_idna_name_to_ascii(
idna: *const UIDNA,
name: *const u8,
length: i32,
dest: *mut u8,
capacity: i32,
pInfo: *mut UIDNAInfo,
pErrorCode: *mut UErrorCode,
) -> i32;
pub(crate) fn icu_idna_name_to_unicode(
idna: *const UIDNA,
name: *const u8,
length: i32,
dest: *mut u8,
capacity: i32,
pInfo: *mut UIDNAInfo,
pErrorCode: *mut UErrorCode,
) -> i32;
// From unicode/uspoof.h
pub(crate) fn icu_spoof_open(status: *mut UErrorCode) -> *mut USpoofChecker;
pub(crate) fn icu_spoof_set_checks(
sc: *mut USpoofChecker,
checks: i32,
status: *mut UErrorCode,
);
pub(crate) fn icu_spoof_get_skeleton(
sc: *const USpoofChecker,
type_: u32,
id: *const u8,
length: i32,
dest: *mut u8,
destCapacity: i32,
status: *mut UErrorCode,
) -> i32;
}