diff --git a/src/lib.rs b/src/lib.rs
index d95fee2..2f5dff6 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -1,6 +1,156 @@
+///////////////////////////////////////////////
+// //
+// ! //
+// This file is automatically generated! //
+// Do not directly edit! //
+// //
+///////////////////////////////////////////////
+
#![forbid(unsafe_code)]
-#![doc = include_str!("../README.md")]
+//!
+//! Riven
+//!
+//!
+//!
+//!
+//!
+//!
+//!
+//!
+//!
+//! Rust Library for the [Riot Games API](https://developer.riotgames.com/).
+//!
+//! Riven's goals are _speed_, _reliability_, and _maintainability_. Riven handles rate limits and large requests with ease.
+//! Data structs and endpoints are automatically generated from the
+//! [Riot API Reference](https://developer.riotgames.com/api-methods/) ([Swagger](http://www.mingweisamuel.com/riotapi-schema/tool/)).
+//!
+//! ## Design
+//!
+//! * Fast, asynchronous, thread-safe.
+//! * Automatically retries failed requests.
+//! * TFT API Support.
+//!
+//! ## Usage
+//!
+//! ```rust
+//! use riven::RiotApi;
+//! use riven::consts::Region;
+//!
+//! // Enter tokio async runtime.
+//! let mut rt = tokio::runtime::Runtime::new().unwrap();
+//! rt.block_on(async {
+//! // Create RiotApi instance from key string.
+//! let api_key = "RGAPI-01234567-89ab-cdef-0123-456789abcdef";
+//! # /* (doc testing) */ let api_key = std::env!("RGAPI_KEY");
+//! let riot_api = RiotApi::with_key(api_key);
+//!
+//! // Get summoner data.
+//! let summoner = riot_api.summoner_v4()
+//! .get_by_summoner_name(Region::NA, "잘 못").await
+//! .expect("Get summoner failed.")
+//! .expect("There is no summoner with that name.");
+//!
+//! // Print summoner name.
+//! println!("{} Champion Masteries:", summoner.name);
+//!
+//! // Get champion mastery data.
+//! let masteries = riot_api.champion_mastery_v4()
+//! .get_all_champion_masteries(Region::NA, &summoner.id).await
+//! .expect("Get champion masteries failed.");
+//!
+//! // Print champioon masteries.
+//! for (i, mastery) in masteries.iter().take(10).enumerate() {
+//! println!("{: >2}) {: <9} {: >7} ({})", i + 1,
+//! mastery.champion_id.to_string(),
+//! mastery.champion_points, mastery.champion_level);
+//! }
+//! });
+//! ```
+//! Output:
+//! ```text
+//! 잘 못 Champion Masteries:
+//! 1) Riven 1219895 (7)
+//! 2) Fiora 229714 (5)
+//! 3) Katarina 175985 (5)
+//! 4) Lee Sin 150546 (7)
+//! 5) Jax 100509 (5)
+//! 6) Gnar 76373 (6)
+//! 7) Kai'Sa 64271 (5)
+//! 8) Caitlyn 46479 (5)
+//! 9) Irelia 46465 (5)
+//! 10) Vladimir 37176 (5)
+//! ```
+//!
+//! ### Nightly vs Stable
+//!
+//! Enable the `nightly` feature to use nightly-only functionality. Mainly enables
+//! [nightly optimizations in the `parking_lot` crate](https://github.com/Amanieu/parking_lot#nightly-vs-stable).
+//! Also required for running async integration tests.
+//!
+//! ### Docs
+//!
+//! [On docs.rs](https://docs.rs/riven/).
+//!
+//! ### Error Handling
+//!
+//! Riven returns either `Result` or `Result