Пытаясь понять, почему merchant.add_cart()
жалуется, а merchant.add_product()
в порядке.И Cart
, и Product
содержат более или менее одинаковую структуру
use std::collections::HashMap;
#[derive(Debug, Clone)]
struct Merchant<'a> {
id: u64,
name: String,
products: HashMap<u64, &'a Product>,
carts: HashMap<u64, &'a Cart>,
}
impl<'a> Merchant<'a> {
pub fn new(id: u64, name: String) -> Merchant<'a> {
Merchant {
id,
name,
products: HashMap::new(),
carts: HashMap::new(),
}
}
pub fn add_product(&mut self, product: &'a Product) {
self.products.insert(product.id, product);
}
pub fn add_cart(&mut self, cart: &'a Cart) {
self.carts.insert(cart.id, cart);
}
}
#[derive(Debug, Clone)]
struct Product {
id: u64,
name: String,
amount_in_cents: u64,
}
impl Product {
pub fn new(id: u64, name: String, amount_in_cents: u64) -> Product {
Product {
id,
name,
amount_in_cents,
}
}
}
#[derive(Debug, Clone)]
struct Cart {
id: u64,
}
impl Cart {
pub fn new(id: u64) -> Cart {
Cart { id }
}
}
fn main() {
let apple = Product::new(1, String::from("Apple"), 10000);
let orange = Product::new(2, String::from("Orange"), 20000);
let guava = Product::new(3, String::from("Guava"), 30000);
let mut merchant = Merchant::new(1, String::from("Oak Market"));
merchant.add_product(&apple);
merchant.add_product(&orange);
merchant.add_product(&guava);
let cart = Cart::new(1);
merchant.add_cart(&cart);
}
merchant.add_cart(&cart);
жалуется на
cart does not live long enough: borrowed value does not live long enough
Использование rustc 1.31.0