1234567891011121314151617181920212223242526272829303132 |
- use std::marker::PhantomData;
- fn main() {}
- trait Props<'parent> {}
- struct SomeProps<'p> {
- text: &'p str,
- }
- impl<'p> Props<'p> for SomeProps<'p> {}
- struct OutputNode<'a> {
- _p: PhantomData<&'a ()>,
- }
- // combine reference to self (borrowed from self) and referenfce to parent (borrowed from parent)
- // borrow chain looks like 'p + 's -> 'p + 's -> 'p + 's
- // always adding new lifetimes from self into the mix
- // what does a "self" lifetime mean?
- // a "god" gives us our data
- // the god's lifetime is tied to Context, and the borrowed props object
- // for the sake of simplicity, we just clobber lifetimes.
- // user functions are just lies and we abuse lifetimes.
- // everything is managed at runtime because that's how we make something ergonomc
- // lifetime management in dioxus is just cheating around the rules
- // our kind god manages lifetimes for us so we don't have to, thanks god
- fn something<'s>(_props: &'s SomeProps<'s>) -> OutputNode<'s> {
- todo!()
- }
- // type BC<'p, P: Props<'p>> = for<'a, 'b, 'c> fn(&'a P<'b>) -> OutputNode<'c>;
|