Here's my code:
struct Something<'a> {
    val: u32,
    another: &'a AnotherThing,
}
struct AnotherThing {
    val: u32,
}
impl Default for AnotherThing {
    fn default() -> Self {
        Self {
            val: 2,
        }
    }
}
trait Anything {
    fn new(val: u32) -> Self;
}
impl Anything for Something<'_> {
    fn new(val: u32) -> Self {
        Self {
            val,
            another: &AnotherThing::default(),
        }
    }
}
fn main() {
    let _ = Something::new(1);
}
It doesn't compile because:
   Compiling playground v0.0.1 (/playground)
error[E0515]: cannot return value referencing temporary value
  --> src/main.rs:24:9
   |
24 | /         Self {
25 | |             val,
26 | |             another: &AnotherThing::default(),
   | |                       ----------------------- temporary value created here
27 | |         }
   | |_________^ returns a value referencing data owned by the current function
I understand the problem but I don't know how to fix it. If it's not possible to use the Default trait for this case, how can I deal with the function ownership. Below a simpler example:
struct Something<'a> {
    val: u32,
    another: &'a AnotherThing,
}
struct AnotherThing {
    val: u32,
}
trait Anything {
    fn new(val: u32) -> Self;
}
impl Anything for Something<'_> {
    fn new(val: u32) -> Self {
        let at = AnotherThing { val : 2 };
        Self {
            val,
            another: &at,
        }
    }
}
fn main() {
    let _ = Something::new(1);
}
If I had another: &AnotherThing { val : 2 } instead of another: &at it would work. If I want the another attribute to be a reference and get the value from a function, how can I do it?
 
     
     
    