use super::{TlsIndex, TlsInfo, TlsModuleId, TlsTpOffset};
use crate::{Result, TlsError};
const TLS_GET_ADDR_DISABLED_MESSAGE: &str = if cfg!(feature = "tls") {
"tls_get_addr called on unit TlsResolver which does not support TLS. Use `with_default_tls_resolver()` to enable TLS support."
} else {
"tls_get_addr called without compiled-in TLS support. Enable the `tls` cargo feature."
};
pub trait TlsResolver {
fn register(tls_info: &TlsInfo) -> Result<TlsModuleId>;
fn register_static(tls_info: &TlsInfo) -> Result<(TlsModuleId, TlsTpOffset)>;
fn add_static_tls(tls_info: &TlsInfo, offset: TlsTpOffset) -> Result<TlsModuleId>;
fn unregister(mod_id: TlsModuleId);
extern "C" fn tls_get_addr(ti: *const TlsIndex) -> *mut u8;
}
impl TlsResolver for () {
fn register(_tls_info: &TlsInfo) -> Result<TlsModuleId> {
Err(TlsError::ResolverUnsupported.into())
}
fn register_static(_tls_info: &TlsInfo) -> Result<(TlsModuleId, TlsTpOffset)> {
Err(TlsError::StaticResolverUnsupported.into())
}
fn add_static_tls(_tls_info: &TlsInfo, _offset: TlsTpOffset) -> Result<TlsModuleId> {
Err(TlsError::StaticResolverUnsupported.into())
}
fn unregister(_mod_id: TlsModuleId) {
}
extern "C" fn tls_get_addr(_ti: *const TlsIndex) -> *mut u8 {
panic!("{TLS_GET_ADDR_DISABLED_MESSAGE}");
}
}