Go to file
D. Scott Boggs 4fb24a5a21 Drop the magic bullshit
There were too many false positive responses from libmagic to have this
just happen in the background. In a future release I may add a specific
error which is returned when the given file has no extension, and
downstream application developers can use that as an indicator that they
should ask the user if they want to detect the filetype, making use of
libmagic directly in the downstream application as appropriate.
2022-12-28 08:49:43 -05:00
.github Add workflow job for running clippy on codebase 2022-12-27 16:32:04 +01:00
.vscode Drop the magic bullshit 2022-12-28 08:49:43 -05:00
examples Fix discrepancy in server response formats 2022-12-26 12:19:51 -05:00
src Drop the magic bullshit 2022-12-28 08:49:43 -05:00
tests initial state; elefren 0.22.0 2022-11-27 09:44:43 -05:00
.env.sample Update Rust Edition; Update dependencies 2022-11-29 18:50:29 -05:00
.gitignore Wrap magic cookie in a mutex 2022-12-28 08:49:43 -05:00
CHANGELOG.md Rename elefren to mastodon-async 2022-12-23 12:18:03 -05:00
Cargo.toml Drop the magic bullshit 2022-12-28 08:49:43 -05:00
LICENCE-APACHE Rename elefren to mastodon-async 2022-12-23 12:18:03 -05:00
LICENCE-MIT Rename elefren to mastodon-async 2022-12-23 12:18:03 -05:00
Makefile initial state; elefren 0.22.0 2022-11-27 09:44:43 -05:00
README.md corrected api-info url 2022-12-24 09:01:37 +01:00
build.rs initial state; elefren 0.22.0 2022-11-27 09:44:43 -05:00
rustfmt.toml initial state; elefren 0.22.0 2022-11-27 09:44:43 -05:00

README.md

Async Mastodon client library

[Build Status] crates.io Docs MIT/APACHE-2.0

Documentation

A type-safe, async wrapper around the client API for Mastodon

Installation

To add mastodon-async to your project, add the following to the [dependencies] section of your Cargo.toml

mastodon-async = "1.0"

Alternatively, run the following command:

$ cargo add mastodon-async

Example

In your Cargo.toml, make sure you enable the toml feature:

[dependencies.mastodon-async]
version = "1.0"
features = ["toml"]
// src/main.rs

use mastodon_async::prelude::*;
use mastodon_async::helpers::toml; // requires `features = ["toml"]`
use mastodon_async::{helpers::cli, Result};

#[tokio::main]
async fn main() -> Result<()> {
    let mastodon = if let Ok(data) = toml::from_file("mastodon-data.toml") {
        Mastodon::from(data)
    } else {
        register().await?
    };

    let you = mastodon.verify_credentials().await?;

    println!("{:#?}", you);

    Ok(())
}

async fn register() -> Result<Mastodon> {
    let registration = Registration::new("https://botsin.space")
                                    .client_name("mastodon-async-examples")
                                    .build()
                                    .await?;
    let mastodon = cli::authenticate(registration).await?;

    // Save app data for using on the next run.
    toml::to_file(&mastodon.data, "mastodon-data.toml")?;

    Ok(mastodon)
}

It also supports the Streaming API:

use mastodon_async::{prelude::*, Result, entities::event::Event};
use futures_util::TryStreamExt;

#[tokio::main]
async fn main() -> Result<()> {
    let client = Mastodon::from(Data::default());

    client.stream_user()
        .await?
        .try_for_each(|event| async move {
            match event {
                Event::Update(ref status) => { /* .. */ },
                Event::Notification(ref notification) => { /* .. */ },
                Event::Delete(ref id) => { /* .. */ },
                Event::FiltersChanged => { /* .. */ },
            }
            Ok(())
        })
        .await?;
    Ok(())
}