I have the following struct:
#[derive(Default)]
pub struct AppState {
    actors: HashMap<String, ActorValue>,
    feature: HashMap<String, FeatureValue>,
}
Actors are registered when running the application upon receiving a network request (i.e., they are inserted into the HashMap). Furthermore, a user can create a new feature for which a certain actor may be required.
pub enum ActorValue {
    Automotive(AutomotiveActor),
    Power(PowerActor),
}
pub enum FeatureValue {
    Automotive(AutomotiveFeature),
    // ....
}
pub struct AutomotiveFeature {
    pub actor_name: String,
    // ... more Actor-related String fields
}
pub struct AutomotiveActor {
    name: String,
    // ... more String fields
}
So, when creating an instance of AutomotiveFeature I am currently cloning the name of the respective AutomotiveActor instance to populate the actor_name:
let automotive_actor = app_state.actors.iter()
        .find(|x| matches!(x.1, ActorValue::Automotive(_)))
        .map(|x| match x.1 {
            ActorValue::Automotive(p) => Some(p),
            _ => None,
        })
        .flatten();
match automotive_actor {
        Some(a) => {
          let feature = AutomotiveFeature { actor_name: a.name.clone() };
        }
        None => {}
}
However, I am essentially keeping redundant info. Ideally, I could just replace all the String fields relating to the actor in the feature with a reference:
pub struct AutomotiveFeature {
        pub actor: &AutomotiveActor
    }
But I am getting lifetime issues and I don't know how I can annotate them correctly, considering I have two HashMaps.
If I use:
pub struct AutomotiveFeature {
        pub actor: &'static AutomotiveActor
    }
I get the following errors:
error[E0502]: cannot borrow `*state` as mutable because it is also borrowed as immutable
   --> crates/code/src/my_code.rs:146:13
    |
38  |       let automotive_actor: Option<&AutomotiveActor> = app_state
    |  __________________________________________________-
39  | |         .actors()
    | |_____________________________- immutable borrow occurs here
...
43  |               ActorValue::Automotive(p) => Some(p),
    |                                          ------- returning this value requires that `*state` is borrowed for `'static`
...
146 | /             app_state
147 | |                 .features_mut()
    | |____________________________^ mutable borrow occurs here
error: lifetime may not live long enough
  --> crates/code/src/my_code.rs:43:40
   |
35 |     app_state: &mut AppState,
   |            - let's call the lifetime of this reference `'1`
...
43 |             ActorValue::Automotive(p) => Some(p),
   |                                        ^^^^^^^ returning this value requires that `'1` must outlive `'static`
I have already looked at similar post, such as "Store reference of struct in other struct". Unfortunately, I cannot use std::rc::Rc; because I get the error:
`Rc<AutomotiveActor>` cannot be sent between threads safely
 
     
    