pub unsafe trait OptionEncode { }
Expand description

A helper trait for types that are encodable inside an Option.

See the nomicon for details on which types uphold this promise.

This is 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 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 NonZeroU64

source§

impl OptionEncode for NonZeroI8

source§

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

source§

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

source§

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

source§

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

source§

impl OptionEncode for NonZeroU16

source§

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

source§

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

source§

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

source§

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

source§

impl OptionEncode for NonZeroIsize

source§

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

source§

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

source§

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

source§

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

source§

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

source§

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

source§

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

source§

impl OptionEncode for NonNull<c_void>

source§

impl OptionEncode for NonZeroI64

source§

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

source§

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

source§

impl OptionEncode for NonZeroI32

source§

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

source§

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

source§

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

source§

impl OptionEncode for NonZeroI16

source§

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

source§

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

source§

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

source§

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

source§

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

source§

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

source§

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

source§

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

source§

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

source§

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

source§

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

source§

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

source§

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

source§

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

source§

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

source§

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

source§

impl OptionEncode for NonZeroU32

source§

impl OptionEncode for NonZeroUsize

source§

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

source§

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

source§

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

source§

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

source§

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

source§

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

source§

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

source§

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

source§

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

source§

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

source§

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

source§

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

source§

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

source§

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

source§

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

source§

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

source§

impl OptionEncode for NonZeroU8

source§

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

Implementors§