summaryrefslogtreecommitdiffstats
path: root/vendor/openssl/src/ex_data.rs
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/openssl/src/ex_data.rs')
-rw-r--r--vendor/openssl/src/ex_data.rs32
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
+ }
+}