pub trait Signer {
type Config<'a>
where Self: 'a;
// Required methods
fn config<'a, Request>(
&'a self,
request: Request,
builder: &RequestBuilder,
) -> Result<Self::Config<'a>, SocketError>
where Request: RestRequest;
fn add_bytes_to_sign<M>(mac: &mut M, config: &Self::Config<'_>)
where M: Mac;
fn build_signed_request<'a>(
config: Self::Config<'a>,
builder: RequestBuilder,
signature: String,
) -> Result<Request, SocketError>;
}Expand description
API specific signing logic used by a RequestSigner.
Required Associated Types§
Sourcetype Config<'a>
where
Self: 'a
type Config<'a> where Self: 'a
Configuration required to sign the RestRequests for this API server.
Required Methods§
Sourcefn config<'a, Request>(
&'a self,
request: Request,
builder: &RequestBuilder,
) -> Result<Self::Config<'a>, SocketError>where
Request: RestRequest,
fn config<'a, Request>(
&'a self,
request: Request,
builder: &RequestBuilder,
) -> Result<Self::Config<'a>, SocketError>where
Request: RestRequest,
Generates a Self::Config for this RestRequest and
RequestBuilder.
§Examples
§Private REST Request: FTX
ⓘ
fn config<Request>(&self, _: Request, _: &RequestBuilder) -> Self::Config
where
Request: RestRequest
{
FtxSignConfig {
api_key: self.api_key.as_str(),
time: Utc::now(),
method: Request::method(),
path: Request::path()
}
}Sourcefn add_bytes_to_sign<M>(mac: &mut M, config: &Self::Config<'_>)where
M: Mac,
fn add_bytes_to_sign<M>(mac: &mut M, config: &Self::Config<'_>)where
M: Mac,
Generate the bytes to sign from the provided Self::Config.
§Examples
§Private REST Request: FTX
ⓘ
fn add_bytes_to_sign<M>(mac: &mut M, config: &Self::Config) {
mac.update(config.time.to_string().as_bytes());
mac.update(config.method.as_str().as_bytes());
mac.update(config.path.as_bytes());
}Sourcefn build_signed_request<'a>(
config: Self::Config<'a>,
builder: RequestBuilder,
signature: String,
) -> Result<Request, SocketError>
fn build_signed_request<'a>( config: Self::Config<'a>, builder: RequestBuilder, signature: String, ) -> Result<Request, SocketError>
Build a signed reqwest::Request from the provided Self::Config,
RequestBuilder, and generated cryptographic signature String.
§Examples
§Private REST Request: FTX
ⓘ
fn build_signed_request(config: Self::Config, builder: RequestBuilder, signature: String) -> Result<reqwest::Request, SocketError> {
// Add Ftx required Headers & build reqwest::Request
builder
.header(HEADER_FTX_KEY, &self.api_key)
.header(HEADER_FTX_SIGN, &signature)
.header(HEADER_FTX_TS, &time)
.build()
.map_err(SocketError::from)
}Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.