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 reprs.

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§

source

const ENCODING: Encoding

The Objective-C type-encoding for this type.

Object Safety§

This trait is not object safe.

Implementations on Foreign Types§

source§

impl Encode for f32

source§

const ENCODING: Encoding = Encoding::Float

source§

impl Encode for f64

source§

const ENCODING: Encoding = Encoding::Double

source§

impl Encode for i8

source§

const ENCODING: Encoding = Encoding::Char

source§

impl Encode for i16

source§

const ENCODING: Encoding = Encoding::Short

source§

impl Encode for i32

source§

const ENCODING: Encoding = Encoding::Int

source§

impl Encode for i64

source§

const ENCODING: Encoding = Encoding::LongLong

source§

impl Encode for isize

The encoding of isize varies based on the target pointer width.

source§

const ENCODING: Encoding = i64::ENCODING

source§

impl Encode for u8

source§

const ENCODING: Encoding = Encoding::UChar

source§

impl Encode for u16

source§

const ENCODING: Encoding = Encoding::UShort

source§

impl Encode for u32

source§

const ENCODING: Encoding = Encoding::UInt

source§

impl Encode for u64

source§

const ENCODING: Encoding = Encoding::ULongLong

source§

impl Encode for usize

The encoding of usize varies based on the target pointer width.

source§

const ENCODING: Encoding = u64::ENCODING

source§

impl Encode for AtomicI8

Available on target_has_atomic="8" only.
source§

impl Encode for AtomicI16

Available on target_has_atomic="16" only.
source§

impl Encode for AtomicI32

Available on target_has_atomic="32" only.
source§

impl Encode for AtomicI64

Available on target_has_atomic="64" only.
source§

impl Encode for AtomicIsize

Available on target_has_atomic="ptr" only.
source§

impl Encode for AtomicU8

Available on target_has_atomic="8" only.
source§

impl Encode for AtomicU16

Available on target_has_atomic="16" only.
source§

impl Encode for AtomicU32

Available on target_has_atomic="32" only.
source§

impl Encode for AtomicU64

Available on target_has_atomic="64" only.
source§

impl Encode for AtomicUsize

Available on target_has_atomic="ptr" only.
source§

impl Encode for NonZeroI8

source§

const ENCODING: Encoding = i8::ENCODING

source§

impl Encode for NonZeroI16

source§

const ENCODING: Encoding = i16::ENCODING

source§

impl Encode for NonZeroI32

source§

const ENCODING: Encoding = i32::ENCODING

source§

impl Encode for NonZeroI64

source§

const ENCODING: Encoding = i64::ENCODING

source§

impl Encode for NonZeroIsize

source§

const ENCODING: Encoding = isize::ENCODING

source§

impl Encode for NonZeroU8

source§

const ENCODING: Encoding = u8::ENCODING

source§

impl Encode for NonZeroU16

source§

const ENCODING: Encoding = u16::ENCODING

source§

impl Encode for NonZeroU32

source§

const ENCODING: Encoding = u32::ENCODING

source§

impl Encode for NonZeroU64

source§

const ENCODING: Encoding = u64::ENCODING

source§

impl Encode for NonZeroUsize

source§

const ENCODING: Encoding = usize::ENCODING

source§

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

source§

const ENCODING: Encoding = T::ENCODING_REF

source§

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

source§

const ENCODING: Encoding = T::ENCODING_REF

source§

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

source§

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

source§

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

source§

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

source§

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

source§

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

source§

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

source§

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

source§

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

source§

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

source§

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

source§

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

source§

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

source§

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

source§

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

source§

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

source§

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

source§

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

source§

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

source§

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

source§

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

source§

impl<T: Encode + OptionEncode> Encode for Option<T>

source§

impl<T: Encode + ?Sized> Encode for Cell<T>

source§

const ENCODING: Encoding = T::ENCODING

source§

impl<T: Encode + ?Sized> Encode for UnsafeCell<T>

source§

const ENCODING: Encoding = T::ENCODING

source§

impl<T: Encode + ?Sized> Encode for ManuallyDrop<T>

source§

const ENCODING: Encoding = T::ENCODING

source§

impl<T: Encode> Encode for Wrapping<T>

source§

const ENCODING: Encoding = T::ENCODING

source§

impl<T: Encode> Encode for MaybeUninit<T>

source§

const ENCODING: Encoding = T::ENCODING

source§

impl<T: Encode, const LENGTH: usize> Encode for [T; LENGTH]

source§

impl<T: RefEncode + ?Sized> Encode for *const T

source§

const ENCODING: Encoding = T::ENCODING_REF

source§

impl<T: RefEncode + ?Sized> Encode for *mut T

source§

const ENCODING: Encoding = T::ENCODING_REF

source§

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

source§

const ENCODING: Encoding = T::ENCODING_REF

source§

impl<T: RefEncode> Encode for AtomicPtr<T>

Available on target_has_atomic="ptr" only.

Implementors§

source§

impl Encode for Bool

source§

const ENCODING: Encoding = ffi::BOOL::__ENCODING

source§

impl Encode for Sel

source§

const ENCODING: Encoding = Encoding::Sel