Go to file
D. Scott Boggs 610d51c593 use SSE for streaming events
The Mastodon API doesn't use WebSockets for sending events, it uses SSE.
That is to say, it sends events as lines in a continually-streamed
response.
2022-12-18 17:25:53 -05:00
.vscode initial state; elefren 0.22.0 2022-11-27 09:44:43 -05:00
docs initial state; elefren 0.22.0 2022-11-27 09:44:43 -05:00
examples Update client to work asynchronously 2022-12-05 10:35:29 -05:00
src use SSE for streaming events 2022-12-18 17:25:53 -05:00
tests initial state; elefren 0.22.0 2022-11-27 09:44:43 -05:00
.cargo-ok initial state; elefren 0.22.0 2022-11-27 09:44:43 -05:00
.cargo_vcs_info.json initial state; elefren 0.22.0 2022-11-27 09:44:43 -05:00
.clog.toml 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 initial state; elefren 0.22.0 2022-11-27 09:44:43 -05:00
.travis.yml initial state; elefren 0.22.0 2022-11-27 09:44:43 -05:00
CHANGELOG.md Update Rust Edition; Update dependencies 2022-11-29 18:50:29 -05:00
Cargo.toml use SSE for streaming events 2022-12-18 17:25:53 -05:00
LICENCE-APACHE initial state; elefren 0.22.0 2022-11-27 09:44:43 -05:00
LICENCE-MIT initial state; elefren 0.22.0 2022-11-27 09:44:43 -05:00
Makefile initial state; elefren 0.22.0 2022-11-27 09:44:43 -05:00
README.md update readme 2022-12-05 10:35:45 -05:00
appveyor.yml initial state; elefren 0.22.0 2022-11-27 09:44:43 -05: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

Elefren

A Wrapper for the Mastodon API.

Build Status Build Status Coverage Status crates.io Docs MIT/APACHE-2.0

Documentation

A wrapper around the API for Mastodon

Installation

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

elefren = "0.23"

Alternatively, run the following command:

$ cargo add elefren

Example

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

[dependencies]
elefren = { version = "0.22", features = ["toml"] }
// src/main.rs

use std::error::Error;

use elefren::prelude::*;
use elefren::helpers::toml; // requires `features = ["toml"]`
use elefren::helpers::cli;

fn main() -> Result<(), Box<dyn Error>> {
    let mastodon = if let Ok(data) = toml::from_file("mastodon-data.toml") {
        Mastodon::from(data)
    } else {
        register()?
    };

    let you = mastodon.verify_credentials()?;

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

    Ok(())
}

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

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

    Ok(mastodon)
}

It also supports the Streaming API:

use elefren::prelude::*;
use elefren::entities::event::Event;

use std::error::Error;

fn main() -> Result<(), Box<Error>> {
    let data = Data {
      base: "".into(),
      client_id: "".into(),
      client_secret: "".into(),
      redirect: "".into(),
      token: "".into(),
    };

    let client = Mastodon::from(data);

    for event in client.streaming_user()? {
        match event {
            Event::Update(ref status) => { /* .. */ },
            Event::Notification(ref notification) => { /* .. */ },
            Event::Delete(ref id) => { /* .. */ },
            Event::FiltersChanged => { /* .. */ },
        }
    }
    Ok(())
}