1#[macro_use]
2extern crate failure;
3extern crate reqwest;
4
5use failure::Error;
6use reqwest::{StatusCode, Url};
7
8pub enum Availability {
10 Available,
12 Unavailable,
14 Unknown,
16}
17
18pub fn get(name: &str) -> Result<Availability, Error> {
20 ensure!(!name.is_empty(), "name should be more than 0 characters");
21 let addr = format!("https://registry.npmjs.org/{}/", name);
22 let url = Url::parse(&addr)?;
23 let res = reqwest::get(url)?;
24 let status = match res.status() {
25 StatusCode::OK => Availability::Unavailable,
26 StatusCode::NOT_FOUND => Availability::Available,
27 _ => Availability::Unknown,
28 };
29 Ok(status)
30}