2 releases
Uses old Rust 2015
0.3.1 | Jan 6, 2016 |
---|---|
0.3.0 | Jan 6, 2016 |
#13 in #iron-framework
Used in rstatic
17KB
192 lines
staticdir
Serving directory contents for Iron web-framework. Documentation can be found here.
Purpose
Provides the list of files and directories in a mounted folder. To respond with files use staticfile along with this one. See examples.
Example
Start web server at http://localhost:3000
and mount current directory. List of directory contents will be available as JSON.
extern crate staticdir;
extern crate iron;
use iron::prelude::*;
use staticdir::{ StaticDir, AsJson };
fn main() {
Iron::new(StaticDir::new(".", AsJson)).http("localhost:3000").unwrap();
}
This code will return you
[
{
"file_type": "File",
"file_name": ".gitignore",
"size": 7,
"creation_time": null,
"last_modification_time": 1451939290,
"last_access_time": 1451939309
},
{
"file_type": "File",
"file_name": "Cargo.toml",
"size": 196,
"creation_time": null,
"last_modification_time": 1451939547,
"last_access_time": 1451939547
},
{
"file_type": "Dir",
"file_name": "src",
"size": 4096,
"creation_time": null,
"last_modification_time": 1451939462,
"last_access_time": 1451939462
}
]
Customize behavior
You can customize the response using ResponseStrategy
trait. Suppose you need an HTML response instead of JSON:
extern crate staticdir;
extern crate iron;
use iron::prelude::*;
use iron::status::Status;
use staticdir::{ StaticDir, ResponseStrategy };
use std::fs::ReadDir;
use iron::mime::Mime;
struct AsHtml;
fn build_html(dir: ReadDir) -> String {
let mut html = String::new();
for entry in dir {
let entry = entry.unwrap();
html = format!("{}<li>{}</li>", html, entry.file_name().into_string().unwrap());
}
format!("<ul>{}</ul>", html)
}
impl ResponseStrategy for AsHtml {
fn make_response(&self, dir: ReadDir) -> IronResult<Response> {
let html = build_html(dir);
let content_type = "text/html; charset=utf-8".parse::<Mime>().unwrap();
Ok(Response::with((Status::Ok, html, content_type)))
}
}
fn main() {
Iron::new(StaticDir::new(".", AsHtml)).http("localhost:3000").unwrap();
}
This will return an HTML page with next contents
* Cargo.toml
* src
* .git
Working with iron components
You can use other modules of iron core bundle like staticfile and mount. In next example you will receive both directory listing and static files.
extern crate staticdir;
extern crate iron;
extern crate mount;
extern crate staticfile;
use iron::prelude::*;
use mount::Mount;
use staticdir::{ StaticDir, AsJson };
use staticfile::Static;
fn main() {
let root = "tests/mount";
let mut handle_statics = Chain::new(Static::new(root));
handle_statics.link_after(StaticDir::new(root, AsJson));
let mut mount = Mount::new();
mount.mount("/static/", handle_statics);
let mut server = Iron::new(mount).http("localhost:3000").unwrap();
}
Dependencies
~6.5MB
~143K SLoC