title: Nested struct with reference
body: <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>