deta_rust 0.3.1

The unofficial Deta SDK for Rust lang
Documentation
use crate::error::Result;
use crate::utils::send_request;
use serde_json::json;

pub async fn put_file_request(
    base_url: &str,
    x_api_key: &str,
    file_name: &str,
    data: Vec<u8>,
    content_type: Option<&str>,
) -> Result<reqwest::Response> {
    let mut request = reqwest::Client::new()
        .post(format!("{}/files", base_url))
        .query(&[("name", file_name)])
        .body(data)
        .header("X-Api-Key", x_api_key);

    if let Some(content_type) = content_type {
        request = request.header("Content-Type", content_type);
    }

    send_request(request).await
}

pub async fn get_file_request(
    base_url: &str,
    x_api_key: &str,
    file_name: &str,
) -> Result<reqwest::Response> {
    let request = reqwest::Client::new()
        .get(format!("{}/files/download", base_url))
        .query(&[("name", file_name)])
        .header("X-Api-Key", x_api_key);

    send_request(request).await
}

pub async fn list_files_request(
    base_url: &str,
    x_api_key: &str,
    limit: Option<u32>,
    prefix: Option<&str>,
    last_name: Option<&str>,
) -> Result<reqwest::Response> {
    let mut request = reqwest::Client::new()
        .get(format!("{}/files", base_url))
        .header("X-Api-Key", x_api_key);

    let mut query_params: Vec<(&'static str, String)> = vec![];
    if let Some(limit) = limit {
        query_params.push(("limit", format!("{}", limit)));
    }
    if let Some(prefix) = prefix {
        query_params.push(("prefix", prefix.into()));
    }
    if let Some(last_name) = last_name {
        query_params.push(("last", last_name.into()));
    }

    request = request.query(&query_params);

    send_request(request).await
}

pub async fn delete_files_request(
    base_url: &str,
    x_api_key: &str,
    names: &[String],
) -> Result<reqwest::Response> {
    let request = reqwest::Client::new()
        .delete(format!("{}/files", base_url))
        .header("X-Api-Key", x_api_key)
        .json(&json!({ "names": names }));
    send_request(request).await
}

pub async fn initialize_chunked_upload_request(
    base_url: &str,
    x_api_key: &str,
    name: &str,
) -> Result<reqwest::Response> {
    let request = reqwest::Client::new()
        .post(format!("{}/uploads", base_url))
        .query(&[("name", name)])
        .header("X-Api-Key", x_api_key);

    send_request(request).await
}

pub async fn upload_chunk_request(
    base_url: &str,
    x_api_key: &str,
    name: &str,
    upload_id: &str,
    part: usize,
    data: bytes::Bytes,
) -> Result<reqwest::Response> {
    let request = reqwest::Client::new()
        .post(format!("{}/uploads/{}/parts", base_url, upload_id))
        .query(&[("name", name), ("part", &part.to_string())])
        .header("X-Api-Key", x_api_key)
        .body(data);
    send_request(request).await
}

pub async fn abort_chunked_upload_request(
    base_url: &str,
    x_api_key: &str,
    name: &str,
    upload_id: &str,
) -> Result<reqwest::Response> {
    let request = reqwest::Client::new()
        .delete(format!("{}/uploads/{}", base_url, upload_id))
        .query(&[("name", name)])
        .header("X-Api-Key", x_api_key);

    send_request(request).await
}

pub async fn end_chunked_upload_request(
    base_url: &str,
    x_api_key: &str,
    name: &str,
    upload_id: &str,
) -> Result<reqwest::Response> {
    let request = reqwest::Client::new()
        .patch(format!("{}/uploads/{}", base_url, upload_id))
        .query(&[("name", name)])
        .header("X-Api-Key", x_api_key);
    send_request(request).await
}