nib/
lib.rs

1extern crate serde_derive;
2
3#[macro_use]
4extern crate serde_json;
5
6#[macro_use]
7extern crate lazy_static;
8
9mod metadata;
10mod renderer;
11
12mod document;
13
14pub mod config;
15pub mod fs;
16pub mod highlighter;
17pub mod loader;
18pub mod registry;
19pub mod writer;
20
21/// A macro loads handlebar files in default template with include_str! macro.
22///
23/// # Examples
24///
25/// ```rust
26/// # use std::any::type_name;
27/// #
28/// # #[macro_use]
29/// # use nib;
30/// #
31/// # fn get_type<T>(_: &T) -> &str {
32/// #     type_name::<T>()
33/// # }
34/// // read file(s) from src/theme/blog/ dir
35/// let v = nib::include_template_file!("blog", "layout");
36///
37/// assert_eq!(v.len(), 1);
38/// assert_eq!(get_type(&v), "alloc::vec::Vec<(&str, &str)>");
39///
40/// let key = v[0].0;
41/// let dat = v[0].1;
42///
43/// assert_eq!(key, "layout");
44/// assert!(dat.starts_with("<!DOCTYPE html>\n"));
45/// ```
46#[macro_export]
47macro_rules! include_template_file {
48    ( $n:expr, $( $x:expr ),* ) => {
49        {
50            let mut t = Vec::new();
51            $(
52                // TODO: is it any way can omit this slash?
53                t.push((
54                    $x,
55                    include_str!(concat!("theme/", $n, "/", $x, ".hbs"))
56                ));
57            )*
58            t
59        }
60    };
61}
62
63/// A macro loads static files in default template with include_str! macro.
64///
65/// # Examples
66///
67/// ```rust
68/// # use std::any::type_name;
69/// #
70/// # #[macro_use]
71/// # use nib;
72/// #
73/// # fn get_type<T>(_: &T) -> &str {
74/// #     type_name::<T>()
75/// # }
76/// // read file(s) from src/theme/blog/ dir
77/// let v = nib::include_static_file!("blog", "css/index.css");
78///
79/// assert_eq!(v.len(), 1);
80/// assert_eq!(get_type(&v), "alloc::vec::Vec<(&str, &str)>");
81///
82/// let key = v[0].0;
83/// let dat = v[0].1;
84///
85/// dbg!(&dat);
86/// assert_eq!(key, "css/index.css");
87/// assert!(dat.starts_with("* {\n"));
88/// ```
89#[macro_export]
90macro_rules! include_static_file {
91    ( $n:expr, $( $x:expr ),* ) => {
92        {
93            let mut s = Vec::new();
94            $(
95                // TODO: is it any way can omit these slashes?
96                s.push((
97                    $x,
98                    include_str!(concat!("theme/", $n, "/static/", $x)),
99                ));
100            )*
101            s
102        }
103    };
104}