Crate nickel_sqlite [] [src]

nickel-sqlite is a SQLite middleware for nickel.rs.

Example

extern crate r2d2;
#[macro_use] extern crate nickel;
extern crate nickel_sqlite;
extern crate r2d2_sqlite;

use r2d2::Pool;
use r2d2_sqlite::SqliteConnectionManager;
use nickel::{Nickel, HttpRouter};
use nickel_sqlite::{SqliteMiddleware, SqliteRequestExtensions};

#[derive(Debug)]
struct Person {
  id   : i32,
  name : String
}

const CREATE_TABLE : &'static str = "
  CREATE TABLE person (
    id   INTEGER PRIMARY KEY,
    name TEXT NOT NULL
  )";

fn main() {

  let mut app = Nickel::new();
  let db_url  = "file.db";
  let mw      = SqliteMiddleware::new(&db_url).expect("Unable to connect to database");
  let db      = mw.pool.clone().get().unwrap();

  match db.execute(CREATE_TABLE, &[]) {
    Ok(_)  => println!("created table 'person'"),
    Err(_) => {} // handle error
  };

  app.utilize(mw);

  app.get("/persons/new/:name", middleware! { |req|
    let name = req.param("name").unwrap();
    let db = req.db_conn().unwrap();
    match db.execute("INSERT INTO person (name) VALUES ($1)", &[&name]) {
      Ok(_)    => format!("Sucessfully created an entry"),
      Err(err) => format!("Could not create a new entry: {}", err)
    }
  });

  app.get("/persons", middleware! { |request|
    let db = request.db_conn().unwrap();
    let mut stmt = db.prepare("SELECT id, name FROM person").unwrap();
    let person_iter = stmt.query_map(&[], |row| {
      Person{
        id   : row.get(0),
        name : row.get(1)
      }
    }).unwrap();
    let list = person_iter
        .map(|x| format!("<li>{}</li>", x.unwrap().name))
        .collect::<Vec<String>>()
        .concat();
    format!("<html><ul>{}</ul></html>", list)
  });

  app.listen("127.0.0.1:6767");
}

Structs

SqliteMiddleware

Traits

SqliteRequestExtensions

Add db_conn() helper method to nickel::Request