pub unsafe trait Outlive<'js> {
    type Target<'to>;
}
Expand description

The trait to help break lifetime rules when JS objects leaves current context via Persistent wrapper.

Safety

Outlive<'js> must be implemented for types the same, specific, lifetime ’js. For example the following is unsound:

struct Container<'js>(rquickjs::Object<'js>);

unsafe impl<'a,'js> Outlive<'js> for Container<'a>{
    type Target<'to> = Container<'to>;
}

Instead it must be implemented as following

struct Container<'js>(rquickjs::Object<'js>);

unsafe impl<'js> Outlive<'js> for Container<'js>{
    type Target<'to> = Container<'to>;
}

Outlive::Target must be the same type with all ’js lifetimes changed from ’js to ’to, no other lifetimes may be changed and the type must be otherwise the exact same type.

Required Associated Types§

source

type Target<'to>

The target which has the same type as a Self but with another lifetime 't

Implementations on Foreign Types§

source§

impl<'js, T> Outlive<'js> for Box<T>where T: Outlive<'js>,

§

type Target<'to> = Box<<T as Outlive<'js>>::Target<'to>, Global>

source§

impl<'js> Outlive<'js> for char

§

type Target<'to> = char

source§

impl<'js> Outlive<'js> for Output

§

type Target<'to> = Output

source§

impl<'js, K> Outlive<'js> for HashSet<K>where K: Outlive<'js>,

§

type Target<'to> = HashSet<<K as Outlive<'js>>::Target<'to>, RandomState>

source§

impl<'js> Outlive<'js> for i8

§

type Target<'to> = i8

source§

impl<'js, B, C> Outlive<'js> for ControlFlow<B, C>where B: Outlive<'js>, C: Outlive<'js>,

§

type Target<'to> = ControlFlow<<B as Outlive<'js>>::Target<'to>, <C as Outlive<'js>>::Target<'to>>

source§

impl<'js> Outlive<'js> for RangeFull

§

type Target<'to> = RangeFull

source§

impl<'js> Outlive<'js> for u128

§

type Target<'to> = u128

source§

impl<'js> Outlive<'js> for ExitStatus

§

type Target<'to> = ExitStatus

source§

impl<'js> Outlive<'js> for String

§

type Target<'to> = String

source§

impl<'js, T> Outlive<'js> for LinkedList<T>where T: Outlive<'js>,

§

type Target<'to> = LinkedList<<T as Outlive<'js>>::Target<'to>, Global>

source§

impl<'js, T> Outlive<'js> for Mutex<T>where T: Outlive<'js>,

§

type Target<'to> = Mutex<<T as Outlive<'js>>::Target<'to>>

source§

impl<'js, T, E> Outlive<'js> for Result<T, E>where T: Outlive<'js>, E: Outlive<'js>,

§

type Target<'to> = Result<<T as Outlive<'js>>::Target<'to>, <E as Outlive<'js>>::Target<'to>>

source§

impl<'js, T> Outlive<'js> for RangeTo<T>where T: Outlive<'js>,

§

type Target<'to> = RangeTo<<T as Outlive<'js>>::Target<'to>>

source§

impl<'js> Outlive<'js> for usize

§

type Target<'to> = usize

source§

impl<'js> Outlive<'js> for u64

§

type Target<'to> = u64

source§

impl<'js, K> Outlive<'js> for BinaryHeap<K>where K: Outlive<'js>,

§

type Target<'to> = BinaryHeap<<K as Outlive<'js>>::Target<'to>, Global>

source§

impl<'js> Outlive<'js> for Child

§

type Target<'to> = Child

source§

impl<'js, T> Outlive<'js> for Vec<T>where T: Outlive<'js>,

§

type Target<'to> = Vec<<T as Outlive<'js>>::Target<'to>, Global>

source§

impl<'js> Outlive<'js> for i64

§

type Target<'to> = i64

source§

impl<'js, T> Outlive<'js> for Range<T>where T: Outlive<'js>,

§

type Target<'to> = Range<<T as Outlive<'js>>::Target<'to>>

source§

impl<'js> Outlive<'js> for i16

§

type Target<'to> = i16

source§

impl<'js, T> Outlive<'js> for RangeFrom<T>where T: Outlive<'js>,

§

type Target<'to> = RangeFrom<<T as Outlive<'js>>::Target<'to>>

source§

impl<'js> Outlive<'js> for u16

§

type Target<'to> = u16

source§

impl<'js, T> Outlive<'js> for Option<T>where T: Outlive<'js>,

§

type Target<'to> = Option<<T as Outlive<'js>>::Target<'to>>

source§

impl<'js> Outlive<'js> for CString

§

type Target<'to> = CString

source§

impl<'js> Outlive<'js> for Stdio

§

type Target<'to> = Stdio

source§

impl<'js, T> Outlive<'js> for RwLock<T>where T: Outlive<'js>,

§

type Target<'to> = RwLock<<T as Outlive<'js>>::Target<'to>>

source§

impl<'js, K, V> Outlive<'js> for BTreeMap<K, V>where K: Outlive<'js>, V: Outlive<'js>,

§

type Target<'to> = BTreeMap<<K as Outlive<'js>>::Target<'to>, <V as Outlive<'js>>::Target<'to>, Global>

source§

impl<'js> Outlive<'js> for PathBuf

§

type Target<'to> = PathBuf

source§

impl<'js, T> Outlive<'js> for VecDeque<T>where T: Outlive<'js>,

§

type Target<'to> = VecDeque<<T as Outlive<'js>>::Target<'to>, Global>

source§

impl<'js> Outlive<'js> for OsString

§

type Target<'to> = OsString

source§

impl<'js, T> Outlive<'js> for UnsafeCell<T>where T: Outlive<'js>,

§

type Target<'to> = UnsafeCell<<T as Outlive<'js>>::Target<'to>>

source§

impl<'js, T> Outlive<'js> for RangeInclusive<T>where T: Outlive<'js>,

§

type Target<'to> = RangeInclusive<<T as Outlive<'js>>::Target<'to>>

source§

impl<'js> Outlive<'js> for i128

§

type Target<'to> = i128

source§

impl<'js, K> Outlive<'js> for BTreeSet<K>where K: Outlive<'js>,

§

type Target<'to> = BTreeSet<<K as Outlive<'js>>::Target<'to>, Global>

source§

impl<'js> Outlive<'js> for Command

§

type Target<'to> = Command

source§

impl<'js, T> Outlive<'js> for RefCell<T>where T: Outlive<'js>,

§

type Target<'to> = RefCell<<T as Outlive<'js>>::Target<'to>>

source§

impl<'js, K, V> Outlive<'js> for HashMap<K, V>where K: Outlive<'js>, V: Outlive<'js>,

§

type Target<'to> = HashMap<<K as Outlive<'js>>::Target<'to>, <V as Outlive<'js>>::Target<'to>, RandomState>

source§

impl<'js> Outlive<'js> for Backtrace

§

type Target<'to> = Backtrace

source§

impl<'js, T> Outlive<'js> for Arc<T>where T: Outlive<'js>,

§

type Target<'to> = Arc<<T as Outlive<'js>>::Target<'to>, Global>

source§

impl<'js> Outlive<'js> for u32

§

type Target<'to> = u32

source§

impl<'js> Outlive<'js> for i32

§

type Target<'to> = i32

source§

impl<'js, T> Outlive<'js> for Rc<T>where T: Outlive<'js>,

§

type Target<'to> = Rc<<T as Outlive<'js>>::Target<'to>, Global>

source§

impl<'js> Outlive<'js> for isize

§

type Target<'to> = isize

source§

impl<'js> Outlive<'js> for ExitCode

§

type Target<'to> = ExitCode

source§

impl<'js, T> Outlive<'js> for Cell<T>where T: Outlive<'js>,

§

type Target<'to> = Cell<<T as Outlive<'js>>::Target<'to>>

source§

impl<'js, T> Outlive<'js> for RangeToInclusive<T>where T: Outlive<'js>,

§

type Target<'to> = RangeToInclusive<<T as Outlive<'js>>::Target<'to>>

source§

impl<'js> Outlive<'js> for u8

§

type Target<'to> = u8

source§

impl<'js, T> Outlive<'js> for Bound<T>where T: Outlive<'js>,

§

type Target<'to> = Bound<<T as Outlive<'js>>::Target<'to>>

Implementors§

source§

impl<'js> Outlive<'js> for PredefinedAtom

source§

impl<'js> Outlive<'js> for Array<'js>

§

type Target<'to> = Array<'to>

source§

impl<'js> Outlive<'js> for Atom<'js>

§

type Target<'to> = Atom<'to>

source§

impl<'js> Outlive<'js> for Constructor<'js>

§

type Target<'to> = Constructor<'to>

source§

impl<'js> Outlive<'js> for Function<'js>

§

type Target<'to> = Function<'to>

source§

impl<'js> Outlive<'js> for RustFunction<'js>

§

type Target<'to> = RustFunction<'to>

source§

impl<'js> Outlive<'js> for Object<'js>

§

type Target<'to> = Object<'to>

source§

impl<'js> Outlive<'js> for ArrayBuffer<'js>

§

type Target<'to> = ArrayBuffer<'to>

source§

impl<'js> Outlive<'js> for BigInt<'js>

§

type Target<'to> = BigInt<'to>

source§

impl<'js> Outlive<'js> for rquickjs_core::String<'js>

§

type Target<'to> = String<'to>

source§

impl<'js> Outlive<'js> for Symbol<'js>

§

type Target<'to> = Symbol<'to>

source§

impl<'js> Outlive<'js> for Value<'js>

§

type Target<'to> = Value<'to>

source§

impl<'js, C> Outlive<'js> for Class<'js, C>where C: JsClass<'js> + Outlive<'js>, for<'to> C::Target<'to>: JsClass<'to>,

§

type Target<'to> = Class<'to, <C as Outlive<'js>>::Target<'to>>

source§

impl<'js, T> Outlive<'js> for TypedArray<'js, T>

§

type Target<'to> = TypedArray<'to, T>