首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rust Warp中的依赖注入

Rust Warp中的依赖注入
EN

Stack Overflow用户
提问于 2020-03-06 06:27:03
回答 1查看 1K关注 0票数 2

如何在Warp中将依赖项注入我的路由处理程序?下面是一个简单的例子。我有一个路由,我想提供一个在启动时确定的静态值,但过滤器将值传递给最终的处理程序。如何在不创建全局变量的情况下传递额外的数据?这对于依赖注入很有用。

代码语言:javascript
复制
pub fn root_route() -> BoxedFilter<()> {
    warp::get().and(warp::path::end()).boxed()
}

pub async fn root_handler(git_sha: String) -> Result<impl warp::Reply, warp::Rejection> {
    Ok(warp::reply::json(
        json!({
             "sha": git_sha
        })
            .as_object()
            .unwrap(),
    ))
}


#[tokio::main]
async fn main() {
    let git_sha = "1234567890".to_string();
    let api = root_route().and_then(root_handler);
    warp::serve(api).run(([0,0,0,0], 8080)).await;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-06 06:27:03

这里有一个简单的例子。通过结合使用.and().map(move ||),您可以将参数添加到将传递到最终处理函数的元组中。

代码语言:javascript
复制
use warp::filters::BoxedFilter;
use warp::Filter;
#[macro_use]
extern crate serde_json;

pub fn root_route() -> BoxedFilter<()> {
    warp::get().and(warp::path::end()).boxed()
}

pub async fn root_handler(git_sha: String) -> Result<impl warp::Reply, warp::Rejection> {
    Ok(warp::reply::json(
        json!({
             "sha": git_sha
        })
            .as_object()
            .unwrap(),
    ))
}

pub fn with_sha(git_sha: String) -> impl Filter<Extract = (String,), Error = std::convert::Infallible> + Clone {
    warp::any().map(move || git_sha.clone())
}

#[tokio::main]
async fn main() {
    let git_sha = "1234567890".to_string();
    let api = root_route().and(with_sha(git_sha)).and_then(root_handler);
    warp::serve(api).run(([0,0,0,0], 8080)).await;
}
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60554872

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档