1use std::fmt::Result;
2
3use swc_common::Spanned;
4
5pub 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}