Je joue avec le cookie::Cookie
et j'aimerais mettre en place un bocal à cookies plus simple pour mon propre usage.
pub struct NaiveCookieJar<'a> {
data: HashMap<(String, String), Cookie<'a>,
}
impl<'a> NaiveCookieJar<'a> {
pub fn add<'b>(&mut self, domain: &str, name: &str, cookie: &'b Cookie<'b>) -> bool {
let cookie: &'a Cookie = &cookie.clone(); // pas de fonctionnement
self.data
.insert((String::from(domain), String::from(name)), *cookie)
.is_some()
}
}
Cela a entraîné une erreur: E0495: ne peut pas inférer une durée appropriée pour le paramètre de durée 'c en raison d'exigences conflictuelles
Ce que je veux, c'est que chacun des arguments ne doit vivre que pendant la durée de la méthode elle-même, et je peux faire des copies avec une durée 'a
pour les insérer dans la map hash. Donc si j'ai quelque chose comme
fn global_jar() -> &'static Mutex> {
lazy_static! {
static ref JAR: Mutex> = Mutex::new(NaiveCookieJar::new());
}
&JAR
}
...ou dans tous les cas où le bocal à cookies vit plus longtemps que les arguments, cela ne me piègera pas pour instancier des structs avec la durée correspondante.
Il existe un Cookie::into_owned() -> Cookie<'static>
qui correspond à ce cas particulier mais apparemment je ne veux pas que les cookies vivent plus longtemps que le bocal si le bocal n'est pas statique lui-même.
FYI Cookie
dérive de Clone
mais pas de ToOwned