Wedson Almeida Filhorust: types: add `Opaque` typeb9ecf9b4 years agoHistory
37 lines · 988 B · Rust
RawDownload
// SPDX-License-Identifier: GPL-2.0 //! Kernel types. use core::{cell::UnsafeCell, mem::MaybeUninit}; /// Stores an opaque value.////// This is meant to be used with FFI objects that are never interpreted by Rust code.#[repr(transparent)]pub struct Opaque<T>(MaybeUninit<UnsafeCell<T>>); impl<T> Opaque<T> {    /// Creates a new opaque value.    pub const fn new(value: T) -> Self {        Self(MaybeUninit::new(UnsafeCell::new(value)))    }     /// Creates an uninitialised value.    pub const fn uninit() -> Self {        Self(MaybeUninit::uninit())    }     /// Returns a raw pointer to the opaque data.    pub fn get(&self) -> *mut T {        UnsafeCell::raw_get(self.0.as_ptr())    }} /// A sum type that always holds either a value of type `L` or `R`.pub enum Either<L, R> {    /// Constructs an instance of [`Either`] containing a value of type `L`.    Left(L),     /// Constructs an instance of [`Either`] containing a value of type `R`.    Right(R),}