s3-wire 0.3.1

An async, streaming S3-compatible client for Rust
Documentation
use crate::error::S3Error;
use crate::operation::{ListMultipartUploadsRequest, ListPartsRequest, UploadId};

pub(super) fn create_query() -> Vec<(String, String)> {
    vec![("uploads".to_owned(), String::new())]
}

pub(super) fn upload_query(upload_id: &UploadId) -> Vec<(String, String)> {
    vec![("uploadId".to_owned(), upload_id.as_str().to_owned())]
}

pub(super) fn upload_part_query(part_number: u16, upload_id: &UploadId) -> Vec<(String, String)> {
    vec![
        ("partNumber".to_owned(), part_number.to_string()),
        ("uploadId".to_owned(), upload_id.as_str().to_owned()),
    ]
}

pub(super) fn list_parts_query(request: &ListPartsRequest) -> Vec<(String, String)> {
    let mut query = vec![
        ("max-parts".to_owned(), request.max_parts.get().to_string()),
        (
            "uploadId".to_owned(),
            request.upload_id().as_str().to_owned(),
        ),
    ];
    if let Some(marker) = request.part_number_marker {
        query.push(("part-number-marker".to_owned(), marker.get().to_string()));
    }
    query
}

pub(super) fn list_query(
    request: &ListMultipartUploadsRequest,
) -> Result<Vec<(String, String)>, S3Error> {
    if request.upload_id_marker.is_some() && request.key_marker.is_none() {
        return Err(S3Error::configuration(
            "an upload-ID marker requires a key marker",
        ));
    }
    let mut query = create_query();
    if let Some(delimiter) = &request.delimiter {
        query.push(("delimiter".to_owned(), delimiter.clone()));
    }
    if let Some(key_marker) = &request.key_marker {
        query.push(("key-marker".to_owned(), key_marker.clone()));
    }
    query.push((
        "max-uploads".to_owned(),
        request.max_uploads.get().to_string(),
    ));
    if let Some(prefix) = &request.prefix {
        query.push(("prefix".to_owned(), prefix.clone()));
    }
    if let Some(upload_id_marker) = &request.upload_id_marker {
        query.push((
            "upload-id-marker".to_owned(),
            upload_id_marker.as_str().to_owned(),
        ));
    }
    Ok(query)
}