use genco::{Cons, Element, IntoTokens, Python, Quoted, Tokens};
pub struct BlockComment<'el>(pub &'el [String]);
impl<'el> IntoTokens<'el, Python<'el>> for BlockComment<'el> {
fn into_tokens(self) -> Tokens<'el, Python<'el>> {
let c: Tokens<'el, Python<'el>> = self.0
.iter()
.map(|c| Element::Literal(c.as_str().into()))
.collect();
let mut toks = Tokens::new();
toks.push("\"\"\"");
toks.push(c.join(Element::Line));
toks.push("\"\"\"");
toks
}
}
pub struct IfNoneThen<C, D>(pub C, pub D);
impl<'el, C, D> IntoTokens<'el, Python<'el>> for IfNoneThen<C, D>
where
C: Into<Tokens<'el, Python<'el>>>,
D: Into<Tokens<'el, Python<'el>>>,
{
fn into_tokens(self) -> Tokens<'el, Python<'el>> {
let mut toks = Tokens::new();
let cond = self.0.into();
let def = self.1.into();
toks.push(toks!["if ", cond.clone(), " is None:"]);
toks.nested(toks![cond, " = ", def]);
toks
}
}
pub struct IfNoneRaise<C, M>(pub C, pub M);
impl<'el, C, M> IntoTokens<'el, Python<'el>> for IfNoneRaise<C, M>
where
C: Into<Tokens<'el, Python<'el>>>,
M: Into<Cons<'el>>,
{
fn into_tokens(self) -> Tokens<'el, Python<'el>> {
let mut toks = Tokens::new();
toks.push(toks!["if ", self.0.into(), " is None:"]);
toks.nested(toks!["raise Exception(", self.1.into().quoted(), ")"]);
toks
}
}