gpt4 book ai didi

rust - 如何实现用于 Hyper 的自定义类型 header ?

转载 作者:行者123 更新时间:2023-11-29 08:06:08 24 4
gpt4 key购买 nike

我更愿意利用 Hyper 的类型安全 hyper::header::Headers#get方法而不是使用 get_raw使用 &str

实现此目标的最佳方法是什么?

最佳答案

深入研究 hyper::header::Headers 源代码,我发现有一个简洁的宏用于生成代码:header! .不过,您需要一些咒语才能使它有用:

#[macro_use]
extern crate hyper;

use hyper::{Body, Method, Request, Response};
use std::fmt::{self, Display};
use std::str::FromStr;
use std::num::ParseIntError;

// For a header that looks like this:
// x-arbitrary-header-with-an-integer: 8

#[derive(Clone, Debug, Eq, PartialEq)]
pub struct ArbitraryNumber(i8);

impl Display for ArbitraryNumber {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "Arbitrary Protocol v{}", self.0)
}
}

impl FromStr for ArbitraryNumber {
type Err = ParseIntError;

fn from_str(s: &str) -> Result<Self, Self::Err> {
s.parse::<i8>().map(|int| ArbitraryNumber(int))
}
}

//impl Header for ArbitraryNumberHeader
header! { (ArbitraryNumberHeader, "x-arbitrary-header-with-an-integer") => [ArbitraryNumber] }

一旦你在范围内获得了一个名为 resResponse,你就可以像这样访问这个 header :

let arbitrary_header: AribitraryNumber = res.headers().get::<ArbitraryNumberHeader>().unwrap();

关于rust - 如何实现用于 Hyper 的自定义类型 header ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48834122/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com