myust 1.0.5

A rich and hybrid mystb.in API wrapper for Rust 🦀
Documentation
 # **myust**: 📋=>🌐=>🦀
 
[![crates.io][crates-io-badge]][crates-io]
[![Documentation][docs-badge]][docs]
[![MIT][license-badge]](./LICENSE)

 ## Introduction

 myust is a rich and hybrid Rust wrapper for the mystb.in API that aims for user-flexibility.
 
 myust supports hybrid clients:

- [Client] for asynchronous, and [SyncClient] for synchronous.

**⚠️ Synchronous clients are only available on the [sync] feature.**

## Authentication


You can authenticate with the API using the `auth` method with your
[mystb.in], example:

```rust
use myust::{Client, SyncClient};

let client = Client::new().auth("YOUR_MYSTBIN_TOKEN").await;
// or using synchronous client,
let client = SyncClient::new().auth("YOUR_MYSTBIN_TOKEN");
```

It will panic if the provided token is invalid.

 ## Installation

 Add `myust = "1.0"` to your `Cargo.toml` file.

 ```toml
 [dependencies]
 myust = "1.0"
 tokio = "1.0"
 ```

 If you want to use synchronous clients, add the [`sync`][sync] feature.

 ```toml
 [dependencies]
 myust = { version = "1.0", features = ["sync"] }
 ```

 ## Usage Examples

 Asynchronously creating a paste with tomorrow expiration date, with error handling:
 ```rust
 use myust::{Client, Expiry};

#[tokio::main]

async fn main() {
    let client = Client::new();
    let tomorrow = Expiry {
        days: 1,
        ..Default::default()
    }; // other fields default to 0
    let result = client
        .create_paste(|p| {
            p.filename("myust.txt")
                .content("Hello from myust!")
                .expires(tomorrow)
        })
        .await;
    match result {
        Ok(_) => {
            let paste = result.unwrap();
            println!("{paste:#?}");
            let url = format!("https://mystb.in/{}", paste.id);
            println!("Result: {}", url)
        }
        Err(_) => {
            println!("Error code: {}", result.unwrap_err().code)
        }
    }
}
```

Asynchronously deleting a paste (you must own the paste):
```rust
use myust::AuthClient;

#[tokio::main]

async fn main() {
    let client = AuthClient::new()
        .auth(std::env::var("MYSTBIN_TOKEN").unwrap())
        .await;
    let result = client.delete_paste("EquipmentMovingExpensive").await; // The paste ID to delete
    match result {
        Ok(_) => println!("Successfully deleted the paste."),
        Err(_) => {
            println!("Error code: {}", result.unwrap_err().code)
        }
    }
}
```

Synchronously creating a multifile paste with a password (you must have the [`sync`][sync] feature enabled):
```rust
use myust::SyncClient;

fn main() {
    let client = SyncClient::new();
    let paste = client
        .create_multifile_paste(|p| {
            p.file(|f| {
                f.filename("myust1.txt")
                    .content("first file")
                    .password("myust")
            }); // set the password on the first file only, same for expiration date
            p.file(|f| f.filename("myust2.txt").content("second file"))
        })
        .unwrap();
    let url = format!("https://mystb.in/{}", paste.id);
    println!("Result: {}", url)
}
```

You can check for another example snippets in [the test folder](tests/).

## Help & Contributing


If you need any help regarding myust, feel free to open an issue about your problem, and feel free to make a pull request for code improvements, bugfixing, etc.

[Client]: https://docs.rs/myust/latest/myust/struct.Client.html
[SyncClient]: https://docs.rs/myust/latest/myust/sync/struct.SyncClient.html
[sync]: https://docs.rs/myust/latest/myust/sync/index.html
[crates-io-badge]: https://img.shields.io/crates/v/myust.svg
[crates-io]: https://crates.io/crates/myust
[docs-badge]: https://docs.rs/myust/badge.svg
[docs]: https://docs.rs/myust
[license-badge]: https://img.shields.io/crates/l/myust.svg
[mystb.in]: https://mystb.in