Crate modio

Crate modio 

Source
Expand description

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::Client;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let modio = Client::builder(std::env::var("MODIO_API_KEY")?).build()?;

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

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

§Example: Chaining api requests

use modio::types::id::Id;

// OpenXcom: The X-Com Files
let (game_id, mod_id) = (Id::new(51), Id::new(158));
let resp = modio.get_mod(game_id, mod_id).await?;
let mod_ = resp.data().await?;

// Get mod with its dependencies and all files
let resp = modio.get_mod_dependencies(game_id, mod_id).await?;
let deps = resp.data().await?;

let resp = modio.get_files(game_id, mod_id).await?;
let files = resp.data().await?;

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

§Example: Downloading mods

use modio::types::id::Id;
use modio::util::download::{Download, DownloadAction, ResolvePolicy};

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

// Download the specific file of a mod.
let action = DownloadAction::File {
    game_id: Id::new(5),
    mod_id: Id::new(19),
    file_id: Id::new(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: Id::new(5),
    mod_id: Id::new(19),
    version: "0.1".to_string(),
    policy: ResolvePolicy::Latest,
};
modio.download(action).save_to_file("mod.zip").await?;

Re-exports§

pub use crate::client::Client;

Modules§

client
HTTP client for the mod.io API.
request
Typed request builders for the different endpoints.
response
Response type and related utility types.
types
Model types defining the mod.io API.
util

Structs§

Error
The Errors that may occur when using Modio.

Type Aliases§

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