1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
extern crate dotenv; extern crate reqwest; mod error; use std::env; use std::io::Read; use dotenv::dotenv; pub use error::Error; pub fn fetch_version(pkg_name: String, version: String) -> Result<String, Error> { let url = build_url(&pkg_name, &version); let mut response = reqwest::get(&url)?; if !response.status().is_success() { println!( "there was an error fetching {}@{}: {}", &pkg_name, &version, response.status() ); return Err(Error::Response(response)); } let mut readme = String::new(); response.read_to_string(&mut readme)?; Ok(readme) } pub fn fetch_latest(pkg_name: String) -> Result<String, Error> { fetch_version(pkg_name, String::from("latest")) } fn build_url(pkg_name: &str, version: &str) -> String { dotenv().ok(); let host = env::var("READ_FILE_HOST").expect("you must provide a READ_FILE_HOST url"); format!( "{}/v1/files/file/packages/{}/{}/versions/version/{}/readme.html", host, first_char(pkg_name), pkg_name, version, ).to_string() } fn first_char(pkg_name: &str) -> char { return pkg_name.bytes().next().unwrap() as char; }