rocket/fs/
mod.rs

1//! File serving, file accepting, and file metadata types.
2
3mod server;
4mod named_file;
5mod temp_file;
6mod file_name;
7
8pub mod rewrite;
9
10pub use server::*;
11pub use named_file::*;
12pub use temp_file::*;
13pub use file_name::*;
14
15crate::export! {
16    /// Generates a crate-relative version of a path.
17    ///
18    /// This macro is primarily intended for use with [`FileServer`] to serve
19    /// files from a path relative to the crate root.
20    ///
21    /// The macro accepts one parameter, `$path`, an absolute or (preferably)
22    /// relative path. It returns a path as an `&'static str` prefixed with the
23    /// path to the crate root. Use `Path::new(relative!($path))` to retrieve an
24    /// `&'static Path`.
25    ///
26    /// # Example
27    ///
28    /// Serve files from the crate-relative `static/` directory:
29    ///
30    /// ```rust
31    /// # #[macro_use] extern crate rocket;
32    /// use rocket::fs::{FileServer, relative};
33    ///
34    /// #[launch]
35    /// fn rocket() -> _ {
36    ///     rocket::build().mount("/", FileServer::new(relative!("static")))
37    /// }
38    /// ```
39    ///
40    /// Path equivalences:
41    ///
42    /// ```rust
43    /// use std::path::Path;
44    ///
45    /// use rocket::fs::relative;
46    ///
47    /// let manual = Path::new(env!("CARGO_MANIFEST_DIR")).join("static");
48    /// let automatic_1 = Path::new(relative!("static"));
49    /// let automatic_2 = Path::new(relative!("/static"));
50    /// assert_eq!(manual, automatic_1);
51    /// assert_eq!(automatic_1, automatic_2);
52    /// ```
53    ///
54    macro_rules! relative {
55        ($path:expr) => {
56            if cfg!(windows) {
57                concat!(env!("CARGO_MANIFEST_DIR"), "\\", $path)
58            } else {
59                concat!(env!("CARGO_MANIFEST_DIR"), "/", $path)
60            }
61        };
62    }
63}