perspective_viewer/utils/weak_scope.rs
1// ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
2// ┃ ██████ ██████ ██████ █ █ █ █ █ █▄ ▀███ █ ┃
3// ┃ ▄▄▄▄▄█ █▄▄▄▄▄ ▄▄▄▄▄█ ▀▀▀▀▀█▀▀▀▀▀ █ ▀▀▀▀▀█ ████████▌▐███ ███▄ ▀█ █ ▀▀▀▀▀ ┃
4// ┃ █▀▀▀▀▀ █▀▀▀▀▀ █▀██▀▀ ▄▄▄▄▄ █ ▄▄▄▄▄█ ▄▄▄▄▄█ ████████▌▐███ █████▄ █ ▄▄▄▄▄ ┃
5// ┃ █ ██████ █ ▀█▄ █ ██████ █ ███▌▐███ ███████▄ █ ┃
6// ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
7// ┃ Copyright (c) 2017, the Perspective Authors. ┃
8// ┃ ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ ┃
9// ┃ This file is part of the Perspective library, distributed under the terms ┃
10// ┃ of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). ┃
11// ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
12
13use std::cell::RefCell;
14use std::ops::Deref;
15use std::rc::Rc;
16
17use derivative::Derivative;
18use yew::html::Scope;
19use yew::prelude::*;
20
21/// A mutable reference for capturing the `Scope<_>` props arguments, a useful
22/// function for tests.
23#[derive(Derivative)]
24#[derivative(Clone(bound = ""), Default(bound = ""))]
25pub struct WeakScope<C: Component>(Rc<RefCell<Option<Scope<C>>>>);
26
27impl<C: Component> Deref for WeakScope<C> {
28 type Target = Rc<RefCell<Option<Scope<C>>>>;
29
30 fn deref(&self) -> &Self::Target {
31 &self.0
32 }
33}
34
35impl<C: Component> PartialEq for WeakScope<C> {
36 fn eq(&self, other: &Self) -> bool {
37 Rc::ptr_eq(&self.0, &other.0)
38 }
39}