Nested struct with reference
<p>I have some nested structs and cannot create a back reference to the parent struct. An <a href="https://play.rust-lang.org/?code=%23!%5Ballow(dead_code)%5D%0A%0Astruct%20Foo%3C%27a%3E%0A%7B%0A%20%20%20%20parent%3A%20%26%27a%20Bar%3C%27a%3E%2C%0A%7D%0A%0Aimpl%3C%27a%3E%20Foo%3C%27a%3E%0A%7B%0A%20%20%20%20fn%20new(parent%3A%20%26%27a%20Bar)%20-%3E%20Self%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20Foo%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20parent%3A%20parent%2C%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20%0A%20%20%20%20fn%20hello_world(%26self)%20-%3E%20String%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20self.parent.hello().to_owned()%20%2B%20%22%20world%22%0A%20%20%20%20%7D%0A%7D%0A%0Astruct%20Bar%3C%27b%3E%0A%7B%0A%20%20%20%20child%3A%20Option%3CFoo%3C%27b%3E%3E%2C%0A%20%20%20%20data%3A%20%26%27static%20str%2C%0A%7D%0A%0Aimpl%3C%27b%3E%20Bar%3C%27b%3E%0A%7B%0A%20%20%20%20fn%20new()%20-%3E%20Self%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20Bar%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20child%3A%20None%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20data%3A%20%22hello%22%2C%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20%0A%20%20%20%20fn%20hello(%26self)%20-%3E%20%26str%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20self.data%0A%20%20%20%20%7D%0A%20%20%20%20%0A%20%20%20%20fn%20get_foo(%26self)%20-%3E%20Option%3C%26Foo%3E%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20self.child.as_ref()%0A%20%20%20%20%7D%0A%7D%0A%0Afn%20main()%20%7B%0A%20%20%20%20let%20bar%20%3D%20Bar%3A%3Anew()%3B%0A%20%20%20%20assert_eq!(%22hello%22%2C%20bar.hello())%3B%0A%20%20%20%20match%20bar.get_foo()%20%7B%0A%20%20%20%20%20%20%20%20Some(foo)%20%3D%3E%20assert_eq!(%22hello%20world%22%2C%20foo.hello_world())%2C%0A%20%20%20%20%20%20%20%20None%20%3D%3E%20()%2C%0A%20%20%20%20%7D%0A%7D&amp;version=stable&amp;backtrace=0" rel="nofollow">example</a>:</p>

<pre><code>struct Foo&lt;'a&gt; {
    parent: &amp;'a Bar&lt;'a&gt;,
}

impl&lt;'a&gt; Foo&lt;'a&gt; {
    fn new(parent: &amp;'a Bar) -&gt; Self {
        Foo { parent: parent }
    }

    fn hello_world(&amp;self) -&gt; String {
        self.parent.hello().to_owned() + " world"
    }
}

struct Bar&lt;'b&gt; {
    child: Option&lt;Foo&lt;'b&gt;&gt;,
    data: &amp;'static str,
}

impl&lt;'b&gt; Bar&lt;'b&gt; {
    fn new() -&gt; Self {
        Bar {
            child: None,
            data: "hello",
        }
    }

    fn hello(&amp;self) -&gt; &amp;str {
        self.data
    }

    fn get_foo(&amp;self) -&gt; Option&lt;&amp;Foo&gt; {
        self.child.as_ref()
    }
}

fn main() {
    let bar = Bar::new();
    assert_eq!("hello", bar.hello());
    match bar.get_foo() {
        Some(foo) =&gt; assert_eq!("hello world", foo.hello_world()),
        None =&gt; (),
    }
}
</code></pre>

<p>How can I replace <code>None</code> with <code>Some&lt;Foo&gt;</code> with a reference to <code>Bar</code>? So far I'm not sure that it is possible.</p>