aboutsummaryrefslogtreecommitdiff
path: root/openssl/src/types.rs
diff options
context:
space:
mode:
authorSteven Fackler <[email protected]>2016-11-05 20:06:50 -0700
committerSteven Fackler <[email protected]>2016-11-05 20:06:50 -0700
commita0b56c437803a08413755928040a0970a93a7b83 (patch)
tree0f21848301b62d6078eafaee10e513df4163087b /openssl/src/types.rs
parentMerge branch 'release-v0.8.3' into release (diff)
parentRelease v0.9.0 (diff)
downloadrust-openssl-0.9.0.tar.xz
rust-openssl-0.9.0.zip
Merge branch 'release-v0.9.0' into releasev0.9.0
Diffstat (limited to 'openssl/src/types.rs')
-rw-r--r--openssl/src/types.rs40
1 files changed, 40 insertions, 0 deletions
diff --git a/openssl/src/types.rs b/openssl/src/types.rs
new file mode 100644
index 00000000..2fadfd42
--- /dev/null
+++ b/openssl/src/types.rs
@@ -0,0 +1,40 @@
+//! Items used by other types.
+
+/// A type implemented by wrappers over OpenSSL types.
+///
+/// This should not be implemented by anything outside of this crate; new methods may be added at
+/// any time.
+pub trait OpenSslType: Sized {
+ /// The raw C type.
+ type CType;
+
+ /// The type representing a reference to this type.
+ type Ref: OpenSslTypeRef<CType = Self::CType>;
+
+ /// Constructs an instance of this type from its raw type.
+ unsafe fn from_ptr(ptr: *mut Self::CType) -> Self;
+}
+
+/// A trait implemented by types which reference borrowed OpenSSL types.
+///
+/// This should not be implemented by anything outside of this crate; new methods may be added at
+/// any time.
+pub trait OpenSslTypeRef: Sized {
+ /// The raw C type.
+ type CType;
+
+ /// Constructs a shared instance of this type from its raw type.
+ unsafe fn from_ptr<'a>(ptr: *mut Self::CType) -> &'a Self {
+ &*(ptr as *mut _)
+ }
+
+ /// Constructs a mutable reference of this type from its raw type.
+ unsafe fn from_ptr_mut<'a>(ptr: *mut Self::CType) -> &'a mut Self {
+ &mut *(ptr as *mut _)
+ }
+
+ /// Returns a raw pointer to the wrapped value.
+ fn as_ptr(&self) -> *mut Self::CType {
+ self as *const _ as *mut _
+ }
+}