minior 0.1.2

Ergonomic Minio Client
Documentation
# minior

Ergonomic client for Minio, built on top of the `aws_sdk_s3` crate.

Table of Contents
-----------------
- [Requirements]#requirements
- [Installation]#installation
- [Documentation]#documentation
- [Usage]#usage
    - [Overview]#overview
    - [Basic example]#basic-example
- [Bug Reports]#bug-reports
- [Feature Requests]#feature-requests
- [Contributing]#contributing
- [Project Status]#project-status
- [License]#license

## Requirements
- Minio deployment:
    - [Official installation guide]https://min.io/download?utm_term=&utm_campaign=Leads-Performance+Max-1-042023&utm_source=adwords&utm_medium=ppc&hsa_acc=8976569894&hsa_cam=20015732098&hsa_grp=&hsa_ad=&hsa_src=x&hsa_tgt=&hsa_kw=&hsa_mt=&hsa_net=adwords&hsa_ver=3&gad_source=1&gclid=Cj0KCQiAkeSsBhDUARIsAK3tiecF1RUejrAWP89hF1q-FM8_LYfmgKqKImAknRLFuXZqQ9OuD8KGv_YaAr5ZEALw_wcB#/kubernetes
- Rust (version 1.6+):
    - [Official installation guide]https://www.rust-lang.org/tools/install

## Installation
`cargo add minior`

## Documentation

This README provides a general overview, but does not go over all methods available. [Full crate documentation can be found here at docs.rs](https://docs.rs/minior/latest/minior/)

## Usage

### Overview

The crate exposes a struct `Minio` that can be used to interface with all `core` modules, however `core` is public so feel free to interact with those methods directly.

### Basic Example

```
use minior::Minio;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    // Construct a client
    let minio = Minio::new("http://127.0.0.1:9000").await;

    // Create a bucket
    minio.create_bucket("sharks").await?;

    // Upload a object
    let file = tokio::fs::File::open("some file path").await?;

    minio.upload_object(
        "sharks",
        "shark",
        file,
        None,
        None,
    ).await?;

    // Get a Presigned URL for a get that expires in 1_337 seconds
    let presigned_request = minio.get_object_presigned(
        "sharks",
        "shark",
        1_337,
    ).await?;

    // Delete a object
    minio.delete_object(
        "sharks",
        "shark",
    ).await?;

    // Delete a bucket
    minio.delete_bucket(
        "sharks",
        true,
    ).await?;

    Ok(())
}
```

## Bug Reports

Please report bugs by creating an `issue`, or if there is a sufficient fix you are aware of, feel free to open a PR, but please follow the `Contributing` guidelines below.

To report a bug, it must be directly related to this crate, and you must provide as much information as possible, such as:

- Code examples

- Error messages

- Steps to reproduce 

- System information (If applicable)

## Feature requests

If you feel there is something missing, or some variation of the current crate that would require additional dependencies other than `aws-sdk-s3`, `aws-config` or `tokio`; please create an `issue` with the request and discuss why you feel it should be part of this crate and not a third party crate.

## Contributing

I welcome anyone to contribute to the crate. But I do have some general requirements:

- Any additional or modified methods require unit testing with 100% test coverage, that should be placed in the `tests` module.

- Any change that adds in additional dependencies should be created as a separate feature.

- All current unit tests must pass, I.E. run `cargo test` and all should pass.

- Add your name and or handle to `CONTRIBUTORS.md` if not already present, as well as to the `Authors` section on the header comment for the file.

- If adding in a new dependency, please update `License::Third Party` in this README to correspond with their licensing.

If your change meets these guidelines, feel free to open a PR.

## Project Status

I plan to maintain this crate for the forseeable future.

## License

MIT

See `LICENSE.md` for more information

### Third Party

This crate is built on-top of:

- The [`aws-config` and `aws-sdk-s3`]https://github.com/mongodb/mongo-rust-driver/tree/main crates, which is licensed under Apache License 2.0, [view it here]https://github.com/smithy-lang/smithy-rs/blob/main/LICENSE.

- The [`tokio`]https://github.com/tokio-rs/tokio crate, which is licensed under MIT, [view it here]https://github.com/tokio-rs/tokio/blob/master/LICENSE.

- The [`uuid`]https://github.com/uuid-rs/uuid crate (Used in internal testing), which is licensed under MIT, [view it here]https://github.com/uuid-rs/uuid/blob/main/LICENSE-MIT or Apache 2.0, [view it here]https://github.com/uuid-rs/uuid/blob/main/LICENSE-APACHE.

- The [`reqwest`]https://github.com/seanmonstar/reqwest crate (Used in internal testing), which is licensed under MIT, [view it here]https://github.com/seanmonstar/reqwest/blob/master/LICENSE-MIT or Apache 2.0, [view it here]https://github.com/seanmonstar/reqwest/blob/master/LICENSE-APACHE.