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}