Rust 使用Warp’;那么s和U呢
我正在尝试将HTTPS强制添加到GKE上基于Warp的web应用程序中 GKE平台基本上是不相关的;cromulent的细节是负载平衡器终止SSL/TLS连接,因此在Rust 使用Warp’;那么s和U呢,rust,rust-warp,Rust,Rust Warp,我正在尝试将HTTPS强制添加到GKE上基于Warp的web应用程序中 GKE平台基本上是不相关的;cromulent的细节是负载平衡器终止SSL/TLS连接,因此在X-Forwarded-Proto头中提供了“真实”方案。Warp解析的文本方案将始终是HTTP 逻辑如下: 如果方案为HTTPSHTTPS,则正常处理请求 如果方案是HTTP,则发送301重定向到等效的HTTPSURL 如果该方案是其他方案,则发送421(错误定向请求)错误 如果X-Forwarded-Proto报头丢失(或出现任
X-Forwarded-Proto
头中提供了“真实”方案。Warp解析的文本方案将始终是HTTP
逻辑如下:
HTTPS
,则正常处理请求HTTP
,则发送301重定向到等效的HTTPS
URLX-Forwarded-Proto
报头丢失(或出现任何其他实际不可能的情况),则发送400(错误请求)错误Hello,world代码>
问题是:
error[E0277]:未满足特性绑定'std::result::result:core::future::future::future::future'
-->src/main.rs:23:10
|
23 |和|然后(|方案|头:选项,主机:字符串,路径:完整路径|{
|^^^^^^^^未为'std::result::result'实现特性'core::future::future::future'`
|
=注:由于'std::result::result'的'futures\u core::future::TryFuture'impl上的要求,因此需要`
错误[E0599]:在当前作用域中找不到类型“warp::filter::and_then::AndThen”的名为“and”的方法
-->src/main.rs:44:10
|
44 |和(过滤器)
|^^^^在'warp::filter::and_then::and then'中找不到方法`
|
=注意:方法`和`存在,但不满足以下特征界限:
`&mut warp::filter::and_then::and then:warp::filter::filter`
`&warp::filter::and_then::and then:warp::filter::filter`
`warp::filter::and_then::and then:warp::filter::filter`
很明显,我错过了一些明显的东西,所以我希望有人能把我推向正确的方向
使用期货:{futurext,StreamExt};
使用warp::{Filter,Rejection};
使用warp::filters::path::{FullPath};
使用warp::http::{StatusCode,Uri};
使用warp::http::uri::{Parts,Scheme};
使用warp::reply::reply;
枚举模式错误{
不安全方案(Uri),
未知数,
失踪计划,
}
impl warp::reject::拒绝SchemeError{}
异步fn需要\u https(筛选器:impl-filter+Copy)->impl-filter+Copy{
warp::header::可选(“X-Forwarded-Proto”)
和(warp::header(“主机”))
.和(warp::path::full())
.and|u then(| scheme|u header:Option,host:String,path:FullPath|{
如果let Some(scheme)=scheme_头{
将scheme.to_ascii_lowercase()匹配为_str(){
“https”=>正常(()),
“http”=>{
让mut uri_parts=parts::default();
uri_parts.scheme=Some(scheme::HTTPS);
uri_parts.authority=Some(host.parse().unwrap());
uri_parts.path_和_query=Some(path.as_str().parse().unwrap());
设uri_parts=uri_parts;
让new_uri=uri::from_parts(uri_parts).unwrap();
println!(“重定向到安全URL:{}”,新的uri);
错误(warp::reject::custom(SchemeError::unsecureScheme(new_uri)))
},
_=>Err(warp::reject::custom(SchemeError::UnknownScheme)),
}
}否则{
错误(warp::reject::custom(SchemeError::MissingScheme))
}
})
.及(过滤器)
.恢复(错误:拒绝){
如果let Some(scheme_error)=err.find::(){
匹配方案错误{
SchemeError::UnsecureScheme(新uri)=>Ok(warp::redirect(新uri)),
SchemeError::UnknownScheme=>Ok(状态码::定向错误的请求),
SchemeError::MissingScheme=>Ok(状态码::错误的请求),
}
}否则{
厄尔(厄尔)
}
})
}
#[tokio::main]
异步fn main(){
let routes=requires_https(warp::any().map(| |“你好,世界!”);
翘曲:发球(路线)
.run(([0,0,0,0],8080))
.等待;
}
我是个新手,但遇到了类似的编译器错误
我的问题是查看warp 0.1文档,同时使用warp 0.2
我需要将async move
放在中的闭合管道之后,然后
如果不是那样,可能类似于
其中std::result::result
表示您正在返回一个单元类型作为left result,这可能不会为它实现