npm_name/
lib.rs

1#[macro_use]
2extern crate failure;
3extern crate reqwest;
4
5use failure::Error;
6use reqwest::{StatusCode, Url};
7
8/// A description of availability on npmjs.com
9pub enum Availability {
10  /// Package is available
11  Available,
12  /// Package is unavailable
13  Unavailable,
14  /// Availability is unknown because an unknown status code was returned.
15  Unknown,
16}
17
18/// Get the availability for a package on npmjs.com.
19pub 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}