swc_css_codegen/
emit.rs

1use std::fmt::Result;
2
3use swc_common::Spanned;
4
5///
6/// # Type parameters
7///
8/// ## `T`
9///
10/// The type of the ast node.
11pub trait Emit<T>
12where
13    T: Spanned,
14{
15    fn emit(&mut self, node: &T) -> Result;
16}
17
18impl<T, E> Emit<&'_ T> for E
19where
20    E: Emit<T>,
21    T: Spanned,
22{
23    #[allow(clippy::only_used_in_recursion)]
24    #[inline]
25    fn emit(&mut self, node: &&'_ T) -> Result {
26        self.emit(&**node)
27    }
28}
29
30impl<T, E> Emit<Box<T>> for E
31where
32    E: Emit<T>,
33    T: Spanned,
34{
35    #[inline]
36    fn emit(&mut self, node: &Box<T>) -> Result {
37        self.emit(&**node)
38    }
39}
40
41impl<T, E> Emit<Option<T>> for E
42where
43    E: Emit<T>,
44    T: Spanned,
45{
46    #[inline]
47    fn emit(&mut self, node: &Option<T>) -> Result {
48        match node {
49            Some(node) => self.emit(node),
50            None => Ok(()),
51        }
52    }
53}