I'm trying to build a object with several items on a shared bus, but am having problems getting the ownership right. I've tried several variations, but I always end up with some combination of "error[E0515]: cannot return value referencing local variable" or "error[E0505]: cannot move out of `i2c_ref_cell` because it is borrowed". It all works inline in main(), but not when I try to own the content using an enclosing object. Here is my current best guess at the code: ```rust use core::cell::RefCell; use embassy_stm32::{ bind_interrupts, dma::NoDma, i2c::{Config, I2c, InterruptHandler}, peripherals::{I2C1, PB7, PB8}, time::khz, }; use embassy_time::Duration; use embedded_hal_bus::i2c::{self, RefCellDevice}; use mcp9808::MCP9808; use tla2528::Tla2528; bind_interrupts!(struct Irqs{ I2C1_EV => InterruptHandler; }); pub(crate) struct I2cBus2<'a> { adc: Tla2528>>, board_temp: MCP9808>>, i2c_ref_cell: RefCell>, } impl<'a> I2cBus2<'a> { pub fn new(peri: I2C1, scl: PB8, sda: PB7) -> Self { let mut i2c_config = Config::default(); i2c_config.transaction_timeout = Duration::from_millis(100); let i2c = I2c::new(peri, scl, sda, Irqs, NoDma, NoDma, khz(400), i2c_config); let i2c_ref_cell = RefCell::new(i2c); Self { adc: Tla2528::new(i2c::RefCellDevice::new(&i2c_ref_cell), 0b_0001_0011), board_temp: MCP9808::new(i2c::RefCellDevice::new(&i2c_ref_cell)), i2c_ref_cell, } } } ``` Any thoughts on how to have a struct own a thing and several things that hold references to that thing? Lifetimes should all be right, since they are all owned by the same object. (Do I need to explicitly let the objects know they share the outer thing's lifetime? And, if so, how?)