mastodon API rust lib elefren, fixed and updated. and also all ASYNC! NB. most examples are now wrong.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Paul Woolcock 9e3b7af44a replace travis build badge with circle ci badge 6 years ago
.circleci Try separating out the doc & lib tests 6 years ago
docs rename book -> guide 6 years ago
examples change up examples slightly 6 years ago
src Add `card` to `Status` entity 6 years ago
tests Make sure our README example(s) always compile 6 years ago
.clog.toml Update to v0.14 6 years ago
.env.sample updated reqwest and fixed media route 7 years ago
.gitignore don't commit spare mastodon.toml* files 6 years ago
.travis.yml fix typo 6 years ago
CHANGELOG.md Add CHANGELOG entry for v0.18 6 years ago
Cargo.toml Add `min_id` to pagination params 6 years ago
LICENCE-APACHE Initial commit 8 years ago
LICENCE-MIT Initial commit 8 years ago
Makefile add a Makefile to collect commands in 6 years ago
README.md replace travis build badge with circle ci badge 6 years ago
appveyor.yml expand the test matrix 6 years ago
build.rs This isn't necessary 6 years ago
rustfmt.toml rustfmt pass 6 years ago

README.md

Elefren

A Wrapper for the Mastodon API.

CircleCI 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.18"

Usage

To use this crate in your project, add this to your crate root (lib.rs, main.rs, etc):

extern crate elefren;

Example

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

[dependencies]
elefren = { version = "0.18", features = ["toml"] }
// src/main.rs
extern crate elefren;

use std::error::Error;

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

fn main() -> Result<(), Box<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<Error>> {
    let registration = Registration::new("https://mastodon.social")
                                    .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(())
}

Relationship to Mammut

This library was forked from Mammut around elefren commit 6c37ecb1e1. I started this fork as a place to experiment with some of the changes I wanted to make to Mammut, and ended up diverging enough that I didn't really want to spend the time trying to get everything merged back.

Some of the major differences between this and mammut are:

  • Compatibility with newer mastodon versions. Elefren supports new API calls introduced in Mastodon 2.4 and 2.5, and 2.6 support is being worked on.
  • Compatibility with other implementations of the Mastodon API. One design goal of elefren is to be compatible with as many implementations of the Mastodon API as possible. Currently, this means the GlitchSoc fork of Mastodon, and Pleroma. I do not guarantee that support is 100% there, but if you find any inconsistencies, it is a bug and I hope you can take the time to open an issue here
  • Multiple bug fixes

I have a couple big features on the horizon, the first being a comprehensive test suite that I'm currently working on, which should help us test for inconsistencies and issues between the different versions of the Mastodon API that elefren aims to support. After that, I will be trying to get support for the Mastodon Streaming API merged in, though that might need to wait until rust's async story is a little more stable.

For a complete list of changes, see the Changelog.