Trait rquickjs::Outlive

source ·
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

Object Safety§

This trait is not object safe.

Implementations on Foreign Types§

source§

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

§

type Target<'to> = char

source§

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

§

type Target<'to> = i8

source§

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

§

type Target<'to> = i16

source§

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

§

type Target<'to> = i32

source§

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

§

type Target<'to> = i64

source§

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

§

type Target<'to> = i128

source§

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

§

type Target<'to> = isize

source§

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

§

type Target<'to> = u8

source§

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

§

type Target<'to> = u16

source§

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

§

type Target<'to> = u32

source§

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

§

type Target<'to> = u64

source§

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

§

type Target<'to> = u128

source§

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

§

type Target<'to> = usize

source§

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

§

type Target<'to> = CString

source§

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

§

type Target<'to> = String

source§

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

§

type Target<'to> = RangeFull

source§

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

§

type Target<'to> = Backtrace

source§

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

§

type Target<'to> = OsString

source§

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

§

type Target<'to> = PathBuf

source§

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

§

type Target<'to> = Child

source§

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

§

type Target<'to> = Command

source§

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

§

type Target<'to> = ExitCode

source§

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

§

type Target<'to> = ExitStatus

source§

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

§

type Target<'to> = Output

source§

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

§

type Target<'to> = Stdio

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, K> Outlive<'js> for BinaryHeap<K>
where K: Outlive<'js>,

§

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

source§

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

§

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

source§

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

§

type Target<'to> = HashSet<<K 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>>

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>>

source§

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

§

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

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, T> Outlive<'js> for Box<T>
where T: Outlive<'js>,

§

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

source§

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

§

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

source§

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

§

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

source§

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

§

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

source§

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

§

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

source§

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

§

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

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 RefCell<T>
where T: Outlive<'js>,

§

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

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 Range<T>
where T: Outlive<'js>,

§

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

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, T> Outlive<'js> for RangeInclusive<T>
where T: Outlive<'js>,

§

type Target<'to> = RangeInclusive<<T 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, T> Outlive<'js> for RangeToInclusive<T>
where T: Outlive<'js>,

§

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

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> Outlive<'js> for RwLock<T>
where T: Outlive<'js>,

§

type Target<'to> = RwLock<<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>>

Implementors§

source§

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

source§

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

§

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

source§

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

§

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

source§

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

§

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

source§

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

§

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

source§

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

§

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

source§

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

§

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

source§

impl<'js> Outlive<'js> for Exception<'js>

§

type Target<'to> = Exception<'to>

source§

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

§

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

source§

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

§

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

source§

impl<'js> Outlive<'js> for Promise<'js>

§

type Target<'to> = Promise<'to>

source§

impl<'js> Outlive<'js> for rquickjs::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>, <C as Outlive<'js>>::Target<'to>: for<'to> JsClass<'to>,

§

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

source§

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

§

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

source§

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

§

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