diff options
Diffstat (limited to 'vendor/openssl/src/ex_data.rs')
-rw-r--r-- | vendor/openssl/src/ex_data.rs | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/vendor/openssl/src/ex_data.rs b/vendor/openssl/src/ex_data.rs new file mode 100644 index 0000000..d4f0021 --- /dev/null +++ b/vendor/openssl/src/ex_data.rs @@ -0,0 +1,32 @@ +use libc::c_int; +use std::marker::PhantomData; + +/// A slot in a type's "extra data" structure. +/// +/// It is parameterized over the type containing the extra data as well as the +/// type of the data in the slot. +pub struct Index<T, U>(c_int, PhantomData<(T, U)>); + +impl<T, U> Copy for Index<T, U> {} + +impl<T, U> Clone for Index<T, U> { + fn clone(&self) -> Index<T, U> { + *self + } +} + +impl<T, U> Index<T, U> { + /// Creates an `Index` from a raw integer index. + /// + /// # Safety + /// + /// The caller must ensure that the index correctly maps to a `U` value stored in a `T`. + pub unsafe fn from_raw(idx: c_int) -> Index<T, U> { + Index(idx, PhantomData) + } + + #[allow(clippy::trivially_copy_pass_by_ref)] + pub fn as_raw(&self) -> c_int { + self.0 + } +} |