| Crates.io | modio |
| lib.rs | modio |
| version | 0.14.2 |
| created_at | 2018-08-04 16:20:29.514792+00 |
| updated_at | 2025-12-21 10:36:53.600969+00 |
| description | Rust interface for integrating https://mod.io - a modding API for game developers |
| homepage | |
| repository | https://github.com/nickelc/modio-rs |
| max_upload_size | |
| id | 77496 |
| size | 522,938 |
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.
mod.io is a drop-in modding solution from the founders of ModDB.com, that facilitates the upload, search, browsing, downloading and trading of mods in-game.
To use modio, execute cargo add modio.
use std::env;
use modio::Client;
#[tokio::main]
async fn main() -> Result<(), Box<std::error::Error>> {
let client = Client::builder(env::var("MODIO_API_KEY")?)
.token(env::var("MODIO_TOKEN")?)
.build()?;
// create some tasks and execute them
// let result = task.await?;
Ok(())
}
// Request a security code be sent to the email address.
client.request_code("john@example.com").await?;
// Wait for the 5-digit security code
let response = client.request_token("QWERT").await?;
let token = response.data().await?;
// Create an endpoint with the new token
let client = client.with_token(token.value);
See full example.
use modio::request::filter::prelude::*;
// List games with filter `name_id = "0ad"`
let response = client.get_games().filter(NameId::eq("0ad")).await?;
let list = response.data().await?;
use modio::request::filter::prelude::*;
// List all mods for 0 A.D.
let response = client.get_mods(Id::new(5)).await?;
let mods = response.data().await?;
// Get the details of the `balancing-mod` mod
let response = client.get_mod(Id::new(5), Id::new(110)).await?;
let balancing_mod = response.data().await?;
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::util::download::ErrorKind::MultipleFilesFound`
// as error kind.
let action = DownloadAction::Version {
game_id: Id::new(5),
mod_id: Id::new(19),
version: "0.1".to_string(),
policy: ResolvePolicy::Latest,
};
let mut chunked = client.download(action).chunked().await?;
while let Some(chunk) = chunked.data().await {
let chunk = chunk?;
println!("bytes: {:?}", chunk);
}
See examples directory for some getting started examples.
Licensed under either of
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.