Trait objc2::encode::OptionEncode

source ·
pub unsafe trait OptionEncode { }
Expand description

A helper trait for types that follow the “null pointer optimization”, and are encodable inside an Option.

See the Option documentation for details on which types this holds for, and the nomicon for more details on the null pointer optimization.

This trait used to work around the orphan rule, which would normally prevent you from implementing Encode/RefEncode for Option<CustomType>.

§Safety

You must ensure that the implemented type T has the same layout and function call ABI as Option<T>.

§Examples

use objc2::encode::{Encode, Encoding, OptionEncode};
use core::ptr::NonNull;
use core::ffi::c_void;

#[repr(transparent)]
struct MyBlockType(NonNull<c_void>);

// SAFETY: `MyBlockType` is meant to represent a pointer to a block
unsafe impl Encode for MyBlockType {
    const ENCODING: Encoding = Encoding::Block;
}

// SAFETY: `MyBlockType` is `repr(transparent)` over `NonNull`, which
// means that `Option<MyBlockType>` has the same layout.
unsafe impl OptionEncode for MyBlockType {}

assert_eq!(<Option<MyBlockType>>::ENCODING, MyBlockType::ENCODING);

Implementations on Foreign Types§

source§

impl OptionEncode for NonZeroI8

source§

impl OptionEncode for NonZeroI16

source§

impl OptionEncode for NonZeroI32

source§

impl OptionEncode for NonZeroI64

source§

impl OptionEncode for NonZeroIsize

source§

impl OptionEncode for NonZeroU8

source§

impl OptionEncode for NonZeroU16

source§

impl OptionEncode for NonZeroU32

source§

impl OptionEncode for NonZeroU64

source§

impl OptionEncode for NonZeroUsize

source§

impl<'a, T: RefEncode + ?Sized> OptionEncode for &'a T

source§

impl<'a, T: RefEncode + ?Sized> OptionEncode for &'a mut T

source§

impl<Ret: EncodeReturn> OptionEncode for extern "C" fn() -> Ret

source§

impl<Ret: EncodeReturn> OptionEncode for unsafe extern "C" fn() -> Ret

source§

impl<Ret: EncodeReturn, A: EncodeArgument> OptionEncode for extern "C" fn(_: A) -> Ret

source§

impl<Ret: EncodeReturn, A: EncodeArgument> OptionEncode for extern "C" fn(_: A, ...) -> Ret

source§

impl<Ret: EncodeReturn, A: EncodeArgument> OptionEncode for unsafe extern "C" fn(_: A) -> Ret

source§

impl<Ret: EncodeReturn, A: EncodeArgument> OptionEncode for unsafe extern "C" fn(_: A, ...) -> Ret

source§

impl<Ret: EncodeReturn, A: EncodeArgument, B: EncodeArgument> OptionEncode for extern "C" fn(_: A, _: B) -> Ret

source§

impl<Ret: EncodeReturn, A: EncodeArgument, B: EncodeArgument> OptionEncode for extern "C" fn(_: A, _: B, ...) -> Ret

source§

impl<Ret: EncodeReturn, A: EncodeArgument, B: EncodeArgument> OptionEncode for unsafe extern "C" fn(_: A, _: B) -> Ret

source§

impl<Ret: EncodeReturn, A: EncodeArgument, B: EncodeArgument> OptionEncode for unsafe extern "C" fn(_: A, _: B, ...) -> Ret

source§

impl<Ret: EncodeReturn, A: EncodeArgument, B: EncodeArgument, C: EncodeArgument> OptionEncode for extern "C" fn(_: A, _: B, _: C) -> Ret

source§

impl<Ret: EncodeReturn, A: EncodeArgument, B: EncodeArgument, C: EncodeArgument> OptionEncode for extern "C" fn(_: A, _: B, _: C, ...) -> Ret

source§

impl<Ret: EncodeReturn, A: EncodeArgument, B: EncodeArgument, C: EncodeArgument> OptionEncode for unsafe extern "C" fn(_: A, _: B, _: C) -> Ret

source§

impl<Ret: EncodeReturn, A: EncodeArgument, B: EncodeArgument, C: EncodeArgument> OptionEncode for unsafe extern "C" fn(_: A, _: B, _: C, ...) -> Ret

source§

impl<Ret: EncodeReturn, A: EncodeArgument, B: EncodeArgument, C: EncodeArgument, D: EncodeArgument> OptionEncode for extern "C" fn(_: A, _: B, _: C, _: D) -> Ret

source§

impl<Ret: EncodeReturn, A: EncodeArgument, B: EncodeArgument, C: EncodeArgument, D: EncodeArgument> OptionEncode for extern "C" fn(_: A, _: B, _: C, _: D, ...) -> Ret

source§

impl<Ret: EncodeReturn, A: EncodeArgument, B: EncodeArgument, C: EncodeArgument, D: EncodeArgument> OptionEncode for unsafe extern "C" fn(_: A, _: B, _: C, _: D) -> Ret

source§

impl<Ret: EncodeReturn, A: EncodeArgument, B: EncodeArgument, C: EncodeArgument, D: EncodeArgument> OptionEncode for unsafe extern "C" fn(_: A, _: B, _: C, _: D, ...) -> Ret

source§

impl<Ret: EncodeReturn, A: EncodeArgument, B: EncodeArgument, C: EncodeArgument, D: EncodeArgument, E: EncodeArgument> OptionEncode for extern "C" fn(_: A, _: B, _: C, _: D, _: E) -> Ret

source§

impl<Ret: EncodeReturn, A: EncodeArgument, B: EncodeArgument, C: EncodeArgument, D: EncodeArgument, E: EncodeArgument> OptionEncode for extern "C" fn(_: A, _: B, _: C, _: D, _: E, ...) -> Ret

source§

impl<Ret: EncodeReturn, A: EncodeArgument, B: EncodeArgument, C: EncodeArgument, D: EncodeArgument, E: EncodeArgument> OptionEncode for unsafe extern "C" fn(_: A, _: B, _: C, _: D, _: E) -> Ret

source§

impl<Ret: EncodeReturn, A: EncodeArgument, B: EncodeArgument, C: EncodeArgument, D: EncodeArgument, E: EncodeArgument> OptionEncode for unsafe extern "C" fn(_: A, _: B, _: C, _: D, _: E, ...) -> Ret

source§

impl<Ret: EncodeReturn, A: EncodeArgument, B: EncodeArgument, C: EncodeArgument, D: EncodeArgument, E: EncodeArgument, F: EncodeArgument> OptionEncode for extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F) -> Ret

source§

impl<Ret: EncodeReturn, A: EncodeArgument, B: EncodeArgument, C: EncodeArgument, D: EncodeArgument, E: EncodeArgument, F: EncodeArgument> OptionEncode for extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, ...) -> Ret

source§

impl<Ret: EncodeReturn, A: EncodeArgument, B: EncodeArgument, C: EncodeArgument, D: EncodeArgument, E: EncodeArgument, F: EncodeArgument> OptionEncode for unsafe extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F) -> Ret

source§

impl<Ret: EncodeReturn, A: EncodeArgument, B: EncodeArgument, C: EncodeArgument, D: EncodeArgument, E: EncodeArgument, F: EncodeArgument> OptionEncode for unsafe extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, ...) -> Ret

source§

impl<Ret: EncodeReturn, A: EncodeArgument, B: EncodeArgument, C: EncodeArgument, D: EncodeArgument, E: EncodeArgument, F: EncodeArgument, G: EncodeArgument> OptionEncode for extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G) -> Ret

source§

impl<Ret: EncodeReturn, A: EncodeArgument, B: EncodeArgument, C: EncodeArgument, D: EncodeArgument, E: EncodeArgument, F: EncodeArgument, G: EncodeArgument> OptionEncode for extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, ...) -> Ret

source§

impl<Ret: EncodeReturn, A: EncodeArgument, B: EncodeArgument, C: EncodeArgument, D: EncodeArgument, E: EncodeArgument, F: EncodeArgument, G: EncodeArgument> OptionEncode for unsafe extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G) -> Ret

source§

impl<Ret: EncodeReturn, A: EncodeArgument, B: EncodeArgument, C: EncodeArgument, D: EncodeArgument, E: EncodeArgument, F: EncodeArgument, G: EncodeArgument> OptionEncode for unsafe extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, ...) -> Ret

source§

impl<Ret: EncodeReturn, A: EncodeArgument, B: EncodeArgument, C: EncodeArgument, D: EncodeArgument, E: EncodeArgument, F: EncodeArgument, G: EncodeArgument, H: EncodeArgument> OptionEncode for extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H) -> Ret

source§

impl<Ret: EncodeReturn, A: EncodeArgument, B: EncodeArgument, C: EncodeArgument, D: EncodeArgument, E: EncodeArgument, F: EncodeArgument, G: EncodeArgument, H: EncodeArgument> OptionEncode for extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, ...) -> Ret

source§

impl<Ret: EncodeReturn, A: EncodeArgument, B: EncodeArgument, C: EncodeArgument, D: EncodeArgument, E: EncodeArgument, F: EncodeArgument, G: EncodeArgument, H: EncodeArgument> OptionEncode for unsafe extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H) -> Ret

source§

impl<Ret: EncodeReturn, A: EncodeArgument, B: EncodeArgument, C: EncodeArgument, D: EncodeArgument, E: EncodeArgument, F: EncodeArgument, G: EncodeArgument, H: EncodeArgument> OptionEncode for unsafe extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, ...) -> Ret

source§

impl<Ret: EncodeReturn, A: EncodeArgument, B: EncodeArgument, C: EncodeArgument, D: EncodeArgument, E: EncodeArgument, F: EncodeArgument, G: EncodeArgument, H: EncodeArgument, I: EncodeArgument> OptionEncode for extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, _: I) -> Ret

source§

impl<Ret: EncodeReturn, A: EncodeArgument, B: EncodeArgument, C: EncodeArgument, D: EncodeArgument, E: EncodeArgument, F: EncodeArgument, G: EncodeArgument, H: EncodeArgument, I: EncodeArgument> OptionEncode for extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, _: I, ...) -> Ret

source§

impl<Ret: EncodeReturn, A: EncodeArgument, B: EncodeArgument, C: EncodeArgument, D: EncodeArgument, E: EncodeArgument, F: EncodeArgument, G: EncodeArgument, H: EncodeArgument, I: EncodeArgument> OptionEncode for unsafe extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, _: I) -> Ret

source§

impl<Ret: EncodeReturn, A: EncodeArgument, B: EncodeArgument, C: EncodeArgument, D: EncodeArgument, E: EncodeArgument, F: EncodeArgument, G: EncodeArgument, H: EncodeArgument, I: EncodeArgument> OptionEncode for unsafe extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, _: I, ...) -> Ret

source§

impl<Ret: EncodeReturn, A: EncodeArgument, B: EncodeArgument, C: EncodeArgument, D: EncodeArgument, E: EncodeArgument, F: EncodeArgument, G: EncodeArgument, H: EncodeArgument, I: EncodeArgument, J: EncodeArgument> OptionEncode for extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, _: I, _: J) -> Ret

source§

impl<Ret: EncodeReturn, A: EncodeArgument, B: EncodeArgument, C: EncodeArgument, D: EncodeArgument, E: EncodeArgument, F: EncodeArgument, G: EncodeArgument, H: EncodeArgument, I: EncodeArgument, J: EncodeArgument> OptionEncode for extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, _: I, _: J, ...) -> Ret

source§

impl<Ret: EncodeReturn, A: EncodeArgument, B: EncodeArgument, C: EncodeArgument, D: EncodeArgument, E: EncodeArgument, F: EncodeArgument, G: EncodeArgument, H: EncodeArgument, I: EncodeArgument, J: EncodeArgument> OptionEncode for unsafe extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, _: I, _: J) -> Ret

source§

impl<Ret: EncodeReturn, A: EncodeArgument, B: EncodeArgument, C: EncodeArgument, D: EncodeArgument, E: EncodeArgument, F: EncodeArgument, G: EncodeArgument, H: EncodeArgument, I: EncodeArgument, J: EncodeArgument> OptionEncode for unsafe extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, _: I, _: J, ...) -> Ret

source§

impl<Ret: EncodeReturn, A: EncodeArgument, B: EncodeArgument, C: EncodeArgument, D: EncodeArgument, E: EncodeArgument, F: EncodeArgument, G: EncodeArgument, H: EncodeArgument, I: EncodeArgument, J: EncodeArgument, K: EncodeArgument> OptionEncode for extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, _: I, _: J, _: K) -> Ret

source§

impl<Ret: EncodeReturn, A: EncodeArgument, B: EncodeArgument, C: EncodeArgument, D: EncodeArgument, E: EncodeArgument, F: EncodeArgument, G: EncodeArgument, H: EncodeArgument, I: EncodeArgument, J: EncodeArgument, K: EncodeArgument> OptionEncode for extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, _: I, _: J, _: K, ...) -> Ret

source§

impl<Ret: EncodeReturn, A: EncodeArgument, B: EncodeArgument, C: EncodeArgument, D: EncodeArgument, E: EncodeArgument, F: EncodeArgument, G: EncodeArgument, H: EncodeArgument, I: EncodeArgument, J: EncodeArgument, K: EncodeArgument> OptionEncode for unsafe extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, _: I, _: J, _: K) -> Ret

source§

impl<Ret: EncodeReturn, A: EncodeArgument, B: EncodeArgument, C: EncodeArgument, D: EncodeArgument, E: EncodeArgument, F: EncodeArgument, G: EncodeArgument, H: EncodeArgument, I: EncodeArgument, J: EncodeArgument, K: EncodeArgument> OptionEncode for unsafe extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, _: I, _: J, _: K, ...) -> Ret

source§

impl<Ret: EncodeReturn, A: EncodeArgument, B: EncodeArgument, C: EncodeArgument, D: EncodeArgument, E: EncodeArgument, F: EncodeArgument, G: EncodeArgument, H: EncodeArgument, I: EncodeArgument, J: EncodeArgument, K: EncodeArgument, L: EncodeArgument> OptionEncode for extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, _: I, _: J, _: K, _: L) -> Ret

source§

impl<Ret: EncodeReturn, A: EncodeArgument, B: EncodeArgument, C: EncodeArgument, D: EncodeArgument, E: EncodeArgument, F: EncodeArgument, G: EncodeArgument, H: EncodeArgument, I: EncodeArgument, J: EncodeArgument, K: EncodeArgument, L: EncodeArgument> OptionEncode for extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, _: I, _: J, _: K, _: L, ...) -> Ret

source§

impl<Ret: EncodeReturn, A: EncodeArgument, B: EncodeArgument, C: EncodeArgument, D: EncodeArgument, E: EncodeArgument, F: EncodeArgument, G: EncodeArgument, H: EncodeArgument, I: EncodeArgument, J: EncodeArgument, K: EncodeArgument, L: EncodeArgument> OptionEncode for unsafe extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, _: I, _: J, _: K, _: L) -> Ret

source§

impl<Ret: EncodeReturn, A: EncodeArgument, B: EncodeArgument, C: EncodeArgument, D: EncodeArgument, E: EncodeArgument, F: EncodeArgument, G: EncodeArgument, H: EncodeArgument, I: EncodeArgument, J: EncodeArgument, K: EncodeArgument, L: EncodeArgument> OptionEncode for unsafe extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, _: I, _: J, _: K, _: L, ...) -> Ret

source§

impl<T: RefEncode + ?Sized> OptionEncode for NonNull<T>

Implementors§