Serving directory contents for Iron web-framework. Documentation can be found here.
Provides the list of files and directories in a mounted folder. To respond with files use staticfile along with this one. See examples.
Start web server at http://localhost:3000 and mount current directory. List of directory contents will be available as JSON.
externcrate staticdir;externcrate iron;use iron::prelude::*;use staticdir::{StaticDir,AsJson};fnmain(){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
}
]You can customize the response using ResponseStrategy trait. Suppose you need an HTML response instead of JSON:
externcrate staticdir;externcrate iron;use iron::prelude::*;use iron::status::Status;use staticdir::{StaticDir,ResponseStrategy};use std::fs::ReadDir;use iron::mime::Mime;structAsHtml;fnbuild_html(dir:ReadDir) -> String{letmut 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)}implResponseStrategyforAsHtml{fnmake_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)))}}fnmain(){Iron::new(StaticDir::new(".",AsHtml)).http("localhost:3000").unwrap();}This will return an HTML page with next contents
* Cargo.toml
* src
* .git
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.
externcrate staticdir;externcrate iron;externcrate mount;externcrate staticfile;use iron::prelude::*;use mount::Mount;use staticdir::{StaticDir,AsJson};use staticfile::Static;fnmain(){let root = "tests/mount";letmut handle_statics = Chain::new(Static::new(root));
handle_statics.link_after(StaticDir::new(root,AsJson));letmut mount = Mount::new();
mount.mount("/static/", handle_statics);letmut server = Iron::new(mount).http("localhost:3000").unwrap();}