diff options
author | Andreas Rottmann <a.rottmann@gmx.at> | 2019-01-09 00:44:18 +0100 |
---|---|---|
committer | Andreas Rottmann <a.rottmann@gmx.at> | 2019-01-09 00:44:18 +0100 |
commit | c826a94f698fcc8302e549e737d5cb01c766a5d9 (patch) | |
tree | 2cf44eec00f163cbb9226b904d71d942ec56484d /src | |
parent | fa70ca6fdb7d0d98a04961c1a74105e4f797661d (diff) |
Fix macros for selective import via `use`
Allow the import of any macro with `use` while not requiring the user
to import macros that are invoked by the imported macro.
This feature was add with Rust 1.30, so adjust the travis build and
README accordingly.
This fixes issue #99.
Diffstat (limited to 'src')
-rw-r--r-- | src/cell.rs | 2 | ||||
-rw-r--r-- | src/lib.rs | 4 | ||||
-rw-r--r-- | src/row.rs | 18 |
3 files changed, 12 insertions, 12 deletions
diff --git a/src/cell.rs b/src/cell.rs index f27b1bd..61e71ca 100644 --- a/src/cell.rs +++ b/src/cell.rs @@ -314,7 +314,7 @@ macro_rules! cell { $crate::Cell::new(&$value.to_string()) }; ($style:ident -> $value:expr) => { - cell!($value).style_spec(stringify!($style)) + $crate::cell!($value).style_spec(stringify!($style)) }; } @@ -567,7 +567,7 @@ impl<'a, T, E> Slice<'a, E> for T #[macro_export] macro_rules! table { ($([$($content:tt)*]), *) => ( - $crate::Table::init(vec![$(row![$($content)*]), *]) + $crate::Table::init(vec![$($crate::row![$($content)*]), *]) ); } @@ -578,7 +578,7 @@ macro_rules! table { macro_rules! ptable { ($($content:tt)*) => ( { - let tab = table!($($content)*); + let tab = $crate::table!($($content)*); tab.printstd(); tab } @@ -304,15 +304,15 @@ impl <S: ToString> Extend<S> for Row { #[macro_export] macro_rules! row { (($($out:tt)*);) => (vec![$($out)*]); - (($($out:tt)*); $value:expr) => (vec![$($out)* cell!($value)]); - (($($out:tt)*); $value:expr, $($n:tt)*) => (row!(($($out)* cell!($value),); $($n)*)); - (($($out:tt)*); $style:ident -> $value:expr) => (vec![$($out)* cell!($style -> $value)]); - (($($out:tt)*); $style:ident -> $value:expr, $($n: tt)*) => (row!(($($out)* cell!($style -> $value),); $($n)*)); - - ($($content:expr), *) => ($crate::Row::new(vec![$(cell!($content)), *])); // This line may not be needed starting from Rust 1.20 - ($style:ident => $($content:expr), *) => ($crate::Row::new(vec![$(cell!($style -> $content)), *])); - ($style:ident => $($content:expr,) *) => ($crate::Row::new(vec![$(cell!($style -> $content)), *])); - ($($content:tt)*) => ($crate::Row::new(row!((); $($content)*))); + (($($out:tt)*); $value:expr) => (vec![$($out)* $crate::cell!($value)]); + (($($out:tt)*); $value:expr, $($n:tt)*) => ($crate::row!(($($out)* $crate::cell!($value),); $($n)*)); + (($($out:tt)*); $style:ident -> $value:expr) => (vec![$($out)* $crate::cell!($style -> $value)]); + (($($out:tt)*); $style:ident -> $value:expr, $($n: tt)*) => ($crate::row!(($($out)* $crate::cell!($style -> $value),); $($n)*)); + + ($($content:expr), *) => ($crate::Row::new(vec![$($crate::cell!($content)), *])); // This line may not be needed starting from Rust 1.20 + ($style:ident => $($content:expr), *) => ($crate::Row::new(vec![$($crate::cell!($style -> $content)), *])); + ($style:ident => $($content:expr,) *) => ($crate::Row::new(vec![$($crate::cell!($style -> $content)), *])); + ($($content:tt)*) => ($crate::Row::new($crate::row!((); $($content)*))); } #[cfg(test)] |