use actix_web::{ client::ClientRequest, http::header::{InvalidHeaderValue, ToStrError}, }; use std::fmt::Display; use crate::{create::Signed, Config, Sign}; impl Sign for ClientRequest { fn authorization_signature( mut self, config: &Config, key_id: K, f: F, ) -> Result where F: FnOnce(&str) -> Result, E: From + From, K: Display, { let signed = prepare(&self, config, key_id, f)?; signed.authorization_header(self.headers_mut())?; Ok(self) } fn signature(mut self, config: &Config, key_id: K, f: F) -> Result where F: FnOnce(&str) -> Result, E: From + From, K: Display, { let signed = prepare(&self, config, key_id, f)?; signed.signature_header(self.headers_mut())?; Ok(self) } } fn prepare(request: &ClientRequest, config: &Config, key_id: K, f: F) -> Result where F: FnOnce(&str) -> Result, E: From, K: Display, { let unsigned = config.begin_sign( request.get_method(), request.get_uri().path_and_query(), request.headers().clone(), )?; let key_id = key_id.to_string(); let signed = unsigned.sign(key_id, f)?; Ok(signed) }