use actix_web::dev::Payload;
use actix_web::{error::ErrorBadRequest, Error, FromRequest, HttpRequest};
use std::future::{self, Ready};
#[derive(Debug)]
pub struct Signature {
pub key: String,
}
impl FromRequest for Signature {
type Error = Error;
type Future = Ready<Result<Self, Self::Error>>;
fn from_request(req: &HttpRequest, _payload: &mut Payload) -> Self::Future {
let res = match req.headers().get("x-line-signature") {
Some(value) => match value.to_str() {
Ok(key) => Ok(Signature {
key: key.to_string(),
}),
Err(_) => Err(ErrorBadRequest(
"x-line-signature contains invalid characters",
)),
},
None => Err(ErrorBadRequest("x-line-signature is missing")),
};
future::ready(res)
}
}