pub trait AddressLookUpForSendCallback<IpAddress: Sized> : Sized
{
#[inline(always)]
fn call(&mut self, destinationAddress: *const IpAddress, outParameterForResult: *mut tle_dest) -> i32;
#[doc(hidden)]
#[inline(always)]
unsafe extern "C" fn callFromC(opaque: *mut c_void, addr: *const IpAddress, res: *mut tle_dest) -> c_int
{
let us: &mut Self = &mut *(opaque as *mut Self);
let result = catch_unwind(AssertUnwindSafe(||
{
debug_assert!(!opaque.is_null(), "opaque was null");
debug_assert!(!addr.is_null(), "addr was null");
debug_assert!(!res.is_null(), "tle_dest was null");
let resultCode = us.call(addr, res);
debug_assert!(resultCode <= 0, "Result was a positive value, '{}'", resultCode);
resultCode
}));
let resultCode = match result
{
Ok(resultCode) => resultCode,
Err(error) =>
{
stderrln!("Panic in AddressLookUpForSendCallback, returning ENOSYS instead of '{:?}'", error);
NegativeE::ENOSYS
},
};
forget(us);
resultCode
}
#[doc(hidden)]
#[inline(always)]
fn asFunctionPointer() -> Option<unsafe extern "C" fn(opaque: *mut c_void, addr: *const IpAddress, res: *mut tle_dest) -> c_int>
{
Some(Self::callFromC)
}
#[allow(trivial_casts)]
#[inline(always)]
fn asFunctionArgument(&mut self) -> *mut c_void
{
self as *mut _ as *mut c_void
}
}