从共享可变HashMap提取minijinja模板时遭遇所有权错误的技术求助
从共享可变HashMap提取minijinja模板时遭遇所有权错误的技术求助
我现在有一个基于actix-web的服务器,里面用一个名为WebAssets的结构体来缓存文件,这部分运行得特别顺利!不过我想扩展这个结构体,让它同时能容纳minijinja模板,结果遇到了一个所有权相关的错误,我不太清楚该怎么解决。
相关的结构体代码如下:
use std::{collections::HashMap, path::{Path, PathBuf}, sync::{Arc, RwLock}}; use minijinja::Environment; // Key是文件路径,value是文件内容的Vec<u8>形式 type FileMap = HashMap<PathBuf, Vec<u8>>; #[derive(Clone)] pub struct WebAssets { assets: Arc<RwLock<FileMap>>, templates: Arc<RwLock<Environment<'static>>> } impl WebAssets { pub fn build(assets: FileMap) -> Self { Self { assets: Arc::new(RwLock::new(assets)), templates: // 这里我尝试从assets中提取模板文件并构建Environment,但遭遇了所有权错误 } } }
我的思路是在build方法里,从传入的assets HashMap中筛选出模板文件(比如后缀为.jinja的文件),然后把这些文件的内容加载到minijinja::Environment中。但现在卡在了所有权处理上:要么没法从RwLock里安全取出内容给Environment,要么Environment的生命周期和WebAssets的结构冲突,实在不知道该怎么调整。
备注:内容来源于stack exchange,提问作者rustuser713877
相关产品推荐
相关产品推荐

