Trait objc2_encode::Encode
source · pub unsafe trait Encode {
const ENCODING: Encoding;
}
Expand description
Types that have an Objective-C type-encoding.
Usually you will want to implement RefEncode
as well.
If your type is an opaque type you should not need to implement this;
there you will only need RefEncode
.
Safety
The type must be FFI-safe, meaning a C-compatible repr
(repr(C)
,
repr(u8)
, repr(transparent)
where the inner types are C-compatible,
and so on). See the nomicon on other repr
s.
Objective-C will make assumptions about the type (like its size, alignment and ABI) from its encoding, so the implementer must verify that the encoding is accurate.
Concretely, Self::ENCODING
must match the result of running @encode
in Objective-C with the type in question.
You should also beware of having Drop
types implement this, since when
passed to Objective-C via. objc2::msg_send!
their destructor will not be
called!
Examples
Implementing for a struct:
#[repr(C)]
struct MyType {
a: i32,
b: f64,
c: *const c_void,
}
unsafe impl Encode for MyType {
const ENCODING: Encoding = Encoding::Struct(
// The name of the type that Objective-C sees.
"MyType",
&[
// Delegate to field's implementations.
// The order is the same as in the definition.
i32::ENCODING,
f64::ENCODING,
<*const c_void>::ENCODING,
],
);
}
// Note: You would also implement `RefEncode` for this type.
Required Associated Constants§
Implementations on Foreign Types§
source§impl<Ret: Encode, A: Encode, B: Encode, C: Encode, D: Encode, E: Encode, F: Encode, G: Encode, H: Encode, I: Encode, J: Encode, K: Encode> Encode for extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, _: I, _: J, _: K) -> Ret
impl<Ret: Encode, A: Encode, B: Encode, C: Encode, D: Encode, E: Encode, F: Encode, G: Encode, H: Encode, I: Encode, J: Encode, K: Encode> Encode for extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, _: I, _: J, _: K) -> Ret
source§impl<Ret: Encode, A: Encode, B: Encode, C: Encode, D: Encode, E: Encode> Encode for unsafe extern "C" fn(_: A, _: B, _: C, _: D, _: E) -> Ret
impl<Ret: Encode, A: Encode, B: Encode, C: Encode, D: Encode, E: Encode> Encode for unsafe extern "C" fn(_: A, _: B, _: C, _: D, _: E) -> Ret
source§impl<Ret: Encode, A: Encode, B: Encode, C: Encode, D: Encode, E: Encode, F: Encode, G: Encode, H: Encode, I: Encode> Encode for Option<unsafe extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, _: I) -> Ret>
impl<Ret: Encode, A: Encode, B: Encode, C: Encode, D: Encode, E: Encode, F: Encode, G: Encode, H: Encode, I: Encode> Encode for Option<unsafe extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, _: I) -> Ret>
source§impl<Ret: Encode, A: Encode, B: Encode, C: Encode, D: Encode> Encode for unsafe extern "C" fn(_: A, _: B, _: C, _: D, ...) -> Ret
impl<Ret: Encode, A: Encode, B: Encode, C: Encode, D: Encode> Encode for unsafe extern "C" fn(_: A, _: B, _: C, _: D, ...) -> Ret
source§impl<Ret: Encode, A: Encode, B: Encode, C: Encode, D: Encode, E: Encode, F: Encode> Encode for unsafe extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, ...) -> Ret
impl<Ret: Encode, A: Encode, B: Encode, C: Encode, D: Encode, E: Encode, F: Encode> Encode for unsafe extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, ...) -> Ret
source§impl<Ret: Encode, A: Encode, B: Encode, C: Encode, D: Encode, E: Encode, F: Encode, G: Encode, H: Encode, I: Encode, J: Encode, K: Encode> Encode for unsafe extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, _: I, _: J, _: K) -> Ret
impl<Ret: Encode, A: Encode, B: Encode, C: Encode, D: Encode, E: Encode, F: Encode, G: Encode, H: Encode, I: Encode, J: Encode, K: Encode> Encode for unsafe extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, _: I, _: J, _: K) -> Ret
source§impl<Ret: Encode, A: Encode, B: Encode, C: Encode, D: Encode, E: Encode, F: Encode> Encode for Option<unsafe extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, ...) -> Ret>
impl<Ret: Encode, A: Encode, B: Encode, C: Encode, D: Encode, E: Encode, F: Encode> Encode for Option<unsafe extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, ...) -> Ret>
source§impl<Ret: Encode, A: Encode, B: Encode, C: Encode, D: Encode, E: Encode, F: Encode, G: Encode, H: Encode, I: Encode, J: Encode, K: Encode> Encode for Option<unsafe extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, _: I, _: J, _: K) -> Ret>
impl<Ret: Encode, A: Encode, B: Encode, C: Encode, D: Encode, E: Encode, F: Encode, G: Encode, H: Encode, I: Encode, J: Encode, K: Encode> Encode for Option<unsafe extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, _: I, _: J, _: K) -> Ret>
source§impl Encode for *mut c_void
impl Encode for *mut c_void
source§impl<Ret: Encode, A: Encode, B: Encode, C: Encode, D: Encode, E: Encode> Encode for unsafe extern "C" fn(_: A, _: B, _: C, _: D, _: E, ...) -> Ret
impl<Ret: Encode, A: Encode, B: Encode, C: Encode, D: Encode, E: Encode> Encode for unsafe extern "C" fn(_: A, _: B, _: C, _: D, _: E, ...) -> Ret
source§impl<Ret: Encode, A: Encode, B: Encode, C: Encode, D: Encode, E: Encode, F: Encode, G: Encode, H: Encode, I: Encode, J: Encode, K: Encode> Encode for Option<extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, _: I, _: J, _: K) -> Ret>
impl<Ret: Encode, A: Encode, B: Encode, C: Encode, D: Encode, E: Encode, F: Encode, G: Encode, H: Encode, I: Encode, J: Encode, K: Encode> Encode for Option<extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, _: I, _: J, _: K) -> Ret>
source§impl<Ret: Encode, A: Encode, B: Encode, C: Encode, D: Encode, E: Encode, F: Encode, G: Encode, H: Encode, I: Encode> Encode for Option<extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, _: I) -> Ret>
impl<Ret: Encode, A: Encode, B: Encode, C: Encode, D: Encode, E: Encode, F: Encode, G: Encode, H: Encode, I: Encode> Encode for Option<extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, _: I) -> Ret>
source§impl<Ret: Encode, A: Encode, B: Encode> Encode for unsafe extern "C" fn(_: A, _: B, ...) -> Ret
impl<Ret: Encode, A: Encode, B: Encode> Encode for unsafe extern "C" fn(_: A, _: B, ...) -> Ret
source§impl<Ret: Encode, A: Encode, B: Encode, C: Encode, D: Encode, E: Encode, F: Encode> Encode for extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F) -> Ret
impl<Ret: Encode, A: Encode, B: Encode, C: Encode, D: Encode, E: Encode, F: Encode> Encode for extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F) -> Ret
source§impl<Ret: Encode, A: Encode, B: Encode, C: Encode, D: Encode, E: Encode, F: Encode, G: Encode> Encode for Option<unsafe extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, ...) -> Ret>
impl<Ret: Encode, A: Encode, B: Encode, C: Encode, D: Encode, E: Encode, F: Encode, G: Encode> Encode for Option<unsafe extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, ...) -> Ret>
source§impl<Ret: Encode, A: Encode, B: Encode, C: Encode, D: Encode, E: Encode, F: Encode, G: Encode, H: Encode, I: Encode, J: Encode, K: Encode, L: Encode> Encode for extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, _: I, _: J, _: K, _: L, ...) -> Ret
impl<Ret: Encode, A: Encode, B: Encode, C: Encode, D: Encode, E: Encode, F: Encode, G: Encode, H: Encode, I: Encode, J: Encode, K: Encode, L: Encode> Encode for extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, _: I, _: J, _: K, _: L, ...) -> Ret
source§impl<Ret: Encode, A: Encode, B: Encode, C: Encode, D: Encode, E: Encode, F: Encode, G: Encode> Encode for unsafe extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, ...) -> Ret
impl<Ret: Encode, A: Encode, B: Encode, C: Encode, D: Encode, E: Encode, F: Encode, G: Encode> Encode for unsafe extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, ...) -> Ret
source§impl<Ret: Encode, A: Encode, B: Encode, C: Encode, D: Encode> Encode for Option<extern "C" fn(_: A, _: B, _: C, _: D, ...) -> Ret>
impl<Ret: Encode, A: Encode, B: Encode, C: Encode, D: Encode> Encode for Option<extern "C" fn(_: A, _: B, _: C, _: D, ...) -> Ret>
source§impl<Ret: Encode, A: Encode, B: Encode, C: Encode, D: Encode, E: Encode, F: Encode, G: Encode, H: Encode, I: Encode> Encode for extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, _: I, ...) -> Ret
impl<Ret: Encode, A: Encode, B: Encode, C: Encode, D: Encode, E: Encode, F: Encode, G: Encode, H: Encode, I: Encode> Encode for extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, _: I, ...) -> Ret
source§impl<Ret: Encode, A: Encode, B: Encode, C: Encode> Encode for unsafe extern "C" fn(_: A, _: B, _: C, ...) -> Ret
impl<Ret: Encode, A: Encode, B: Encode, C: Encode> Encode for unsafe extern "C" fn(_: A, _: B, _: C, ...) -> Ret
source§impl<Ret: Encode, A: Encode, B: Encode, C: Encode, D: Encode, E: Encode, F: Encode, G: Encode, H: Encode, I: Encode, J: Encode> Encode for unsafe extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, _: I, _: J, ...) -> Ret
impl<Ret: Encode, A: Encode, B: Encode, C: Encode, D: Encode, E: Encode, F: Encode, G: Encode, H: Encode, I: Encode, J: Encode> Encode for unsafe extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, _: I, _: J, ...) -> Ret
source§impl<Ret: Encode, A: Encode, B: Encode, C: Encode, D: Encode, E: Encode, F: Encode> Encode for Option<extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, ...) -> Ret>
impl<Ret: Encode, A: Encode, B: Encode, C: Encode, D: Encode, E: Encode, F: Encode> Encode for Option<extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, ...) -> Ret>
source§impl<Ret: Encode, A: Encode, B: Encode, C: Encode, D: Encode, E: Encode> Encode for Option<extern "C" fn(_: A, _: B, _: C, _: D, _: E, ...) -> Ret>
impl<Ret: Encode, A: Encode, B: Encode, C: Encode, D: Encode, E: Encode> Encode for Option<extern "C" fn(_: A, _: B, _: C, _: D, _: E, ...) -> Ret>
source§impl<Ret: Encode, A: Encode, B: Encode, C: Encode, D: Encode, E: Encode, F: Encode, G: Encode, H: Encode> Encode for extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, ...) -> Ret
impl<Ret: Encode, A: Encode, B: Encode, C: Encode, D: Encode, E: Encode, F: Encode, G: Encode, H: Encode> Encode for extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, ...) -> Ret
source§impl<Ret: Encode, A: Encode, B: Encode, C: Encode> Encode for Option<extern "C" fn(_: A, _: B, _: C, ...) -> Ret>
impl<Ret: Encode, A: Encode, B: Encode, C: Encode> Encode for Option<extern "C" fn(_: A, _: B, _: C, ...) -> Ret>
source§impl<Ret: Encode, A: Encode, B: Encode, C: Encode, D: Encode, E: Encode, F: Encode, G: Encode, H: Encode, I: Encode, J: Encode> Encode for Option<extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, _: I, _: J, ...) -> Ret>
impl<Ret: Encode, A: Encode, B: Encode, C: Encode, D: Encode, E: Encode, F: Encode, G: Encode, H: Encode, I: Encode, J: Encode> Encode for Option<extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, _: I, _: J, ...) -> Ret>
source§impl<Ret: Encode, A: Encode, B: Encode, C: Encode, D: Encode, E: Encode, F: Encode, G: Encode, H: Encode, I: Encode, J: Encode, K: Encode, L: Encode> Encode for Option<unsafe extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, _: I, _: J, _: K, _: L) -> Ret>
impl<Ret: Encode, A: Encode, B: Encode, C: Encode, D: Encode, E: Encode, F: Encode, G: Encode, H: Encode, I: Encode, J: Encode, K: Encode, L: Encode> Encode for Option<unsafe extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, _: I, _: J, _: K, _: L) -> Ret>
source§impl<Ret: Encode, A: Encode, B: Encode, C: Encode> Encode for extern "C" fn(_: A, _: B, _: C, ...) -> Ret
impl<Ret: Encode, A: Encode, B: Encode, C: Encode> Encode for extern "C" fn(_: A, _: B, _: C, ...) -> Ret
source§impl<Ret: Encode, A: Encode, B: Encode, C: Encode> Encode for unsafe extern "C" fn(_: A, _: B, _: C) -> Ret
impl<Ret: Encode, A: Encode, B: Encode, C: Encode> Encode for unsafe extern "C" fn(_: A, _: B, _: C) -> Ret
source§impl<Ret: Encode, A: Encode, B: Encode, C: Encode, D: Encode, E: Encode, F: Encode> Encode for Option<extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F) -> Ret>
impl<Ret: Encode, A: Encode, B: Encode, C: Encode, D: Encode, E: Encode, F: Encode> Encode for Option<extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F) -> Ret>
source§impl<Ret: Encode, A: Encode, B: Encode, C: Encode, D: Encode> Encode for extern "C" fn(_: A, _: B, _: C, _: D, ...) -> Ret
impl<Ret: Encode, A: Encode, B: Encode, C: Encode, D: Encode> Encode for extern "C" fn(_: A, _: B, _: C, _: D, ...) -> Ret
source§impl<Ret: Encode, A: Encode, B: Encode, C: Encode, D: Encode, E: Encode, F: Encode> Encode for unsafe extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F) -> Ret
impl<Ret: Encode, A: Encode, B: Encode, C: Encode, D: Encode, E: Encode, F: Encode> Encode for unsafe extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F) -> Ret
source§impl<Ret: Encode, A: Encode, B: Encode, C: Encode, D: Encode, E: Encode, F: Encode, G: Encode> Encode for Option<extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G) -> Ret>
impl<Ret: Encode, A: Encode, B: Encode, C: Encode, D: Encode, E: Encode, F: Encode, G: Encode> Encode for Option<extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G) -> Ret>
source§impl<Ret: Encode, A: Encode, B: Encode, C: Encode, D: Encode, E: Encode, F: Encode, G: Encode, H: Encode, I: Encode, J: Encode, K: Encode> Encode for extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, _: I, _: J, _: K, ...) -> Ret
impl<Ret: Encode, A: Encode, B: Encode, C: Encode, D: Encode, E: Encode, F: Encode, G: Encode, H: Encode, I: Encode, J: Encode, K: Encode> Encode for extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, _: I, _: J, _: K, ...) -> Ret
source§impl<Ret: Encode, A: Encode, B: Encode, C: Encode, D: Encode, E: Encode, F: Encode, G: Encode, H: Encode, I: Encode, J: Encode, K: Encode, L: Encode> Encode for Option<extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, _: I, _: J, _: K, _: L) -> Ret>
impl<Ret: Encode, A: Encode, B: Encode, C: Encode, D: Encode, E: Encode, F: Encode, G: Encode, H: Encode, I: Encode, J: Encode, K: Encode, L: Encode> Encode for Option<extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, _: I, _: J, _: K, _: L) -> Ret>
source§impl<Ret: Encode, A: Encode, B: Encode, C: Encode, D: Encode, E: Encode, F: Encode, G: Encode> Encode for Option<unsafe extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G) -> Ret>
impl<Ret: Encode, A: Encode, B: Encode, C: Encode, D: Encode, E: Encode, F: Encode, G: Encode> Encode for Option<unsafe extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G) -> Ret>
source§impl<Ret: Encode, A: Encode, B: Encode> Encode for Option<unsafe extern "C" fn(_: A, _: B, ...) -> Ret>
impl<Ret: Encode, A: Encode, B: Encode> Encode for Option<unsafe extern "C" fn(_: A, _: B, ...) -> Ret>
source§impl<Ret: Encode, A: Encode, B: Encode, C: Encode, D: Encode, E: Encode, F: Encode, G: Encode, H: Encode> Encode for extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H) -> Ret
impl<Ret: Encode, A: Encode, B: Encode, C: Encode, D: Encode, E: Encode, F: Encode, G: Encode, H: Encode> Encode for extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H) -> Ret
source§impl<Ret: Encode, A: Encode, B: Encode, C: Encode, D: Encode, E: Encode, F: Encode, G: Encode, H: Encode, I: Encode> Encode for extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, _: I) -> Ret
impl<Ret: Encode, A: Encode, B: Encode, C: Encode, D: Encode, E: Encode, F: Encode, G: Encode, H: Encode, I: Encode> Encode for extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, _: I) -> Ret
source§impl<Ret: Encode, A: Encode, B: Encode, C: Encode> Encode for Option<unsafe extern "C" fn(_: A, _: B, _: C, ...) -> Ret>
impl<Ret: Encode, A: Encode, B: Encode, C: Encode> Encode for Option<unsafe extern "C" fn(_: A, _: B, _: C, ...) -> Ret>
source§impl<Ret: Encode, A: Encode, B: Encode, C: Encode, D: Encode> Encode for Option<unsafe extern "C" fn(_: A, _: B, _: C, _: D) -> Ret>
impl<Ret: Encode, A: Encode, B: Encode, C: Encode, D: Encode> Encode for Option<unsafe extern "C" fn(_: A, _: B, _: C, _: D) -> Ret>
source§impl<Ret: Encode, A: Encode, B: Encode> Encode for Option<extern "C" fn(_: A, _: B, ...) -> Ret>
impl<Ret: Encode, A: Encode, B: Encode> Encode for Option<extern "C" fn(_: A, _: B, ...) -> Ret>
source§impl<Ret: Encode, A: Encode, B: Encode, C: Encode, D: Encode, E: Encode, F: Encode, G: Encode> Encode for Option<extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, ...) -> Ret>
impl<Ret: Encode, A: Encode, B: Encode, C: Encode, D: Encode, E: Encode, F: Encode, G: Encode> Encode for Option<extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, ...) -> Ret>
source§impl<Ret: Encode, A: Encode, B: Encode, C: Encode, D: Encode, E: Encode, F: Encode, G: Encode, H: Encode, I: Encode, J: Encode, K: Encode> Encode for unsafe extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, _: I, _: J, _: K, ...) -> Ret
impl<Ret: Encode, A: Encode, B: Encode, C: Encode, D: Encode, E: Encode, F: Encode, G: Encode, H: Encode, I: Encode, J: Encode, K: Encode> Encode for unsafe extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, _: I, _: J, _: K, ...) -> Ret
source§impl Encode for ()
impl Encode for ()
To allow usage as the return type of generic functions.
You should not rely on this encoding to exist for any other purpose (since
()
is not FFI-safe)!