You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从共享可变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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 13:38:11