Crate codeforces_api[][src]

codeforces-api crate - interact with the Codeforces API.

This crate uses the official API of the Codeforces platform.

As of this version, an API key and secret is required with every request made. Instructions to generate these can be found here (in the Authorization section).

This crate solely uses reqwest’s blocking network client meaning that all requests made through this crate are also blocking. No client object is provided with this crate and thus no rate-limiting provided. This could also impact performance since a new reqwest client is created and destroyed with every network interaction.


use codeforces_api::requests::{CFBlogEntryCommand, CFAPIRequestable};
use codeforces_api::responses::CFResult;

fn main() {
    // This is equivalent to the Codeforces `blogEntry.view` API method.
    let x = CFBlogEntryCommand::View {
        blog_entry_id: 82347,

    // The `.get(..)` method on API commands returns a result with either
    // an error or an `Ok(CFResult)`.
    match x.get("<api_key>", "<api_secret>") {
        Ok(CFResult::CFBlogEntry(blog_entry)) => {
            assert_eq!(, 82347);
            println!("Your blog entry: {:?}", blog_entry);
        Ok(_) => {
            // In very rare cases, an unexpected type may be returned by
            // `.get()`. If this happens, then you may wish to throw a
            // custom error.
            panic!("`.get()` returned an unexpected type.");
        Err(e) => {
            // Errors returned are of a custom Error type. This could be
            // returned if, for example, an invalid API key/secret was used
            // or if there was no internet connection.
            panic!("something failed {:?}", e);



Contains the structs etc. required to interface with the Codeforces API and the testcases scraper.


Contains the structs etc. which are returned by the Codeforces API following a request.



Error type for requests sent through this crate.