Creating a Phoronix CLI Front-End Library

homepage.rs

Now we can go a step further and separate the open_phoronix() and open_testing() functions from main.rs into it's own library, homepage.rs. The open_phoronix() function shall be renamed as online() while open_testing() will be named offline(). That way, the code may be called conveniently with homepage::online() or homepage::offline(). At the same time, to remove any compiler warnings about our online() or offline() functions being unused, tag the functions with #[allow(dead_code)].

use hyper::Client;
use hyper::header::Connection;
use std::io::Read;

#[allow(dead_code)]
pub fn online() -> String {
    let client = Client::new();
    let mut response = client.get("https://www.phoronix.com/").
        header(Connection::close()).send().unwrap();
    let mut body = String::new();
    response.read_to_string(&mut body).unwrap();
    return body;
}

#[allow(dead_code)]
pub fn offline() -> &'static str { include_str!("phoronix.html") }

phoronix_cli.rs

Now it might be a good idea to separate the printing code from main.rs into our new phoronix_cli.rs front-end. Let's call this new function print() so that we can later call this in main() with phoronix_cli::print(). Because we now need to get our homepage string from the homepage.rs file, we need to make that change too.

use article::Article;
use homepage;

pub fn print() {
    let phoronix_articles = Article::get_articles(homepage::offline());
    for article in phoronix_articles.iter().rev() {
        println!("Title:   {}", article.title);
        println!("Link:    https://www.phoronix.com/{}", article.link);
        println!("Details: {}", article.details);
        println!("Summary: {}\n", article.summary);
    }
}

When you are finished with the program, make sure to make the correct changes in main.rs to reflect the newly-created libs. We will simply add mod homepage and mod phoronix_cli to the mod list and call our print() function in phoronix_cli with phoronix_cli::print().

main.rs

Now our main.rs file should look like such:

extern crate hyper;
extern crate select;
mod article;
mod homepage;
mod phoronix_cli;

fn main() {
    phoronix_cli::print();
}

Run cargo run again to make sure it still builds and runs.