tinyurl-rs 0.2.0

Crate to simplify using tinyurl.com to shorten long urls in async rust.
Documentation
use crate::{
    error::Result,
    types::{CreateRequest, CreateResponse},
};
use async_trait::async_trait;
use reqwest::Url;

#[async_trait]
pub trait TinyUrlOpenAPI {
    async fn create(&self, request: CreateRequest) -> Result<CreateResponse>;
}

#[derive(Default, Debug)]
pub struct TinyUrlAPI {
    pub token: String,
}

const BASE_URL: &str = "https://api.tinyurl.com";

#[async_trait]
impl TinyUrlOpenAPI for TinyUrlAPI {
    async fn create(&self, request: CreateRequest) -> Result<CreateResponse> {
        let url = format!("{}/create?api_token={}", BASE_URL, self.token);

        let url: Url = url.parse()?;
        let client = reqwest::Client::new();

        let resp = client
            .post(url)
            .json(&request)
            .send()
            .await?
            .json::<CreateResponse>()
            .await?;

        Ok(resp)
    }
}