私はcookie::Cookie
で遊んでいます。自分の目的のために、より単純なクッキージャーを実装したいと思います。一般的な構造を特定の生涯にクローンしますか?
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(); // not working
self.data
.insert((String::from(domain), String::from(name)), *cookie)
.is_some()
}
}
これは私がしたいことは、彼らが唯一の方法そのものと同じくらい長く生きるために必要な、引数のそれぞれのためである、と私はハッシュに挿入する'a
寿命でコピーを作ることができerror: E0495: cannot infer an appropriate lifetime for lifetime parameter 'c due to conflicting requirements
の結果地図。私はクッキージャーが長い引数よりも住んでいることを
fn global_jar() -> &'static Mutex<NaiveCookieJar<'static>> {
lazy_static! {
static ref JAR: Mutex<NaiveCookieJar<'static>> = Mutex::new(NaiveCookieJar::new());
}
&JAR
}
...または任意の例のようなものを持っているそうだとすれば、それは罠ではないだろう、私は、対応する寿命と構造体をインスタンス化します。
この特定のケースに適合するCookie::into_owned() -> Cookie<'static>
がありますが、明らかに、jarが静的なものではない場合、クッキーがjarより長く存続することは望ましくありません。
FYI Cookie
はここに根本的な誤解がありClone
なくToOwned
あなたは正しいです。 'Cookie'は' cookie_string:Option> 'を保持します。しかし、私はそのようなスマートなポインタは、インテリジェントな方法で参照されたデータをコピーする能力があるはずだと思う? Cookieのすべてのメンバーはプライベートですが、set_xxx(get_xxx())の束ではなく)そのようなコピーを行う正しい方法は何ですか? –
@FrederickZhang:あなたはそのタイプのパブリックAPIに悩まされています(これはAPIなのです)。私はそれがあなたがデフォルトを作成する必要がない場合は、 'Cookie :: new(prev.get_xxx()、prev.get_yyy()、new_cookie_string、...)'のようなコンストラクタを持っていると思いますクッキーとセッターを使用してください。 –
悲しいことに、そのようなAPIはありません。実際には 'cookie_string'に直接アクセスすることはできませんが、提供されたAPIを介して' domain'、 'name'などにしかアクセスできません。しかしこれは 'let cookie = Cookie :: parse(cookie.to_string())。unwrap();'と事実上同じですが、これは醜く非効率的です。 –