Configuration

module config.rs

use std::env;

#[derive(Debug)]
pub struct Config {
    pub host: String,
    pub port: String,
    pub database_url: String,
    pub ratings_url: String,
}

impl Config {
    pub fn new() -> Self {
        Self {
            host: env::var("HOST").unwrap_or_else(|_| "0.0.0.0".to_string()),
            port: env::var("PORT").unwrap_or_else(|_| "9081".to_string()),
            database_url: env::var("DATABASE_URL").unwrap_or_else(|_| "db.sqlite".to_string()),
            ratings_url: env::var("RATINGS_URL")
                .unwrap_or_else(|_| "http://ratings:9080".to_string()),
        }
    }
}

Ecouter sur l'adresse de la configuration

Dans bin.rs

mod config;

Remplacer l'assignation existante d'addr par:

let config = config::Config::new();
let addr = format!("{}:{}", config.host, config.port);

Rendre la configuration accessible

Dans lib.rs

#[macro_use]
extern crate lazy_static;

mod config;

lazy_static! {
    static ref CONFIG: config::Config = config::Config::new();
}

Résultat

Notre service écoute maintenant sur le port 9081

curl localhost:9081/reviews/0 -i
HTTP/1.1 200 OK
content-length: 57
content-type: application/json
date: Thu, 19 Apr 2018 22:27:26 GMT

{"id":0,"reviews":[{"reviewer":"user1","text":"great!"}]}