[][src]Crate modio

Modio provides a set of building blocks for interacting with the mod.io API.

The client uses asynchronous I/O, backed by the futures and tokio crates, and requires both to be used alongside.

Authentication

To access the API authentication is required and can be done via several ways:

Rate Limiting

  • API keys linked to a game have unlimited requests.
  • API keys linked to a user have 60 requests per minute.
  • OAuth2 user tokens are limited to 120 requests per minute.

Error::is_ratelimited will return true if the rate limit associated with credentials has been exhausted.

Example: Basic setup

use modio::{Credentials, Modio};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let modio = Modio::new(Credentials::new("user-or-game-api-key"))?;

    // create some tasks and execute them
    // let result = task.await?;
    Ok(())
}

For testing purposes use Modio::host to create a client for the mod.io test environment.

Example: Chaining api requests

use futures_util::future::try_join3;

// OpenXcom: The X-Com Files
let modref = modio.mod_(51, 158);

// Get mod with its dependencies and all files
let deps = modref.dependencies().list();
let files = modref.files().search(Default::default()).collect();
let mod_ = modref.get();

let (m, deps, files) = try_join3(mod_, deps, files).await?;

println!("{}", m.name);
println!(
    "deps: {:?}",
    deps.into_iter().map(|d| d.mod_id).collect::<Vec<_>>()
);
for file in files {
    println!("file id: {} version: {:?}", file.id, file.version);
}

Example: Downloading mods

use modio::download::{DownloadAction, ResolvePolicy};

// Download the primary file of a mod.
let action = DownloadAction::Primary {
    game_id: 5,
    mod_id: 19,
};
modio.download(action).save_to_file("mod.zip").await?;

// Download the specific file of a mod.
let action = DownloadAction::File {
    game_id: 5,
    mod_id: 19,
    file_id: 101,
};
modio.download(action).save_to_file("mod.zip").await?;

// Download the specific version of a mod.
// if multiple files are found then the latest file is downloaded.
// Set policy to `ResolvePolicy::Fail` to return with
// `modio::download::Error::MultipleFilesFound` as source error.
let action = DownloadAction::Version {
    game_id: 5,
    mod_id: 19,
    version: "0.1".to_string(),
    policy: ResolvePolicy::Latest,
};
modio.download(action).save_to_file("mod.zip").await?;

Re-exports

pub use crate::auth::Credentials;
pub use crate::download::DownloadAction;

Modules

auth

Authentication Flow interface

comments

Mod comments interface

download

Downloading mod files.

files

Modfile interface

filter

Filtering and sorting

games

Games interface

metadata

Mod metadata KVP interface

mods

Mods Interface

reports

Reports interface

teams

Team members interface

user

User interface

Structs

Builder

A Builder can be used to create a Modio client with custom configuration.

Error

The Errors that may occur when using Modio.

Modio

Endpoint interface to interacting with the mod.io API.

Page

A Page returned by the Query::paged stream for a search result.

Query

Interface for retrieving search results.

Enums

Deletion

Result type for deleting game tag options, mod media, mod tags and mod dependencies.

Editing

Result type for editing games, mods and files.

Type Definitions

Result

A Result alias where the Err case is modio::Error.