openssl/
ex_data.rs

1use libc::c_int;
2use std::marker::PhantomData;
3
4/// A slot in a type's "extra data" structure.
5///
6/// It is parameterized over the type containing the extra data as well as the
7/// type of the data in the slot.
8pub struct Index<T, U>(c_int, PhantomData<(T, U)>);
9
10impl<T, U> Copy for Index<T, U> {}
11
12impl<T, U> Clone for Index<T, U> {
13    fn clone(&self) -> Index<T, U> {
14        *self
15    }
16}
17
18impl<T, U> Index<T, U> {
19    /// Creates an `Index` from a raw integer index.
20    ///
21    /// # Safety
22    ///
23    /// The caller must ensure that the index correctly maps to a `U` value stored in a `T`.
24    pub unsafe fn from_raw(idx: c_int) -> Index<T, U> {
25        Index(idx, PhantomData)
26    }
27
28    #[allow(clippy::trivially_copy_pass_by_ref)]
29    pub fn as_raw(&self) -> c_int {
30        self.0
31    }
32}