Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

40 Commits

Repository files navigation

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.

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
}
]

Customize behavior

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

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.

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();}

About

Serving directory contents for Iron web-framework

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages