Trait Signer

Source
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§

Source

type Config<'a> where Self: 'a

Configuration required to sign the RestRequests for this API server.

Required Methods§

Source

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()
    }
}
Source

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());
}
Source

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.

Implementors§