in src/bindgen/language_backend/cython.rs [336:408]
fn write_literal<W: Write>(&mut self, out: &mut SourceWriter<W>, l: &Literal) {
match l {
Literal::Expr(v) => match &**v {
"true" => write!(out, "True"),
"false" => write!(out, "False"),
v => write!(out, "{}", v),
},
Literal::Path {
ref associated_to,
ref name,
} => {
if let Some((ref path, ref export_name)) = associated_to {
if let Some(known) = to_known_assoc_constant(path, name) {
return write!(out, "{}", known);
}
write!(out, "{}_", export_name)
}
write!(out, "{}", name)
}
Literal::FieldAccess {
ref base,
ref field,
} => {
write!(out, "(");
self.write_literal(out, base);
write!(out, ").{}", field);
}
Literal::PostfixUnaryOp { op, ref value } => {
write!(out, "{}", op);
self.write_literal(out, value);
}
Literal::BinOp {
ref left,
op,
ref right,
} => {
write!(out, "(");
self.write_literal(out, left);
write!(out, " {} ", op);
self.write_literal(out, right);
write!(out, ")");
}
Literal::Cast { ref ty, ref value } => {
out.write("<");
self.write_type(out, ty);
out.write(">");
self.write_literal(out, value);
}
Literal::Struct {
export_name,
fields,
path,
} => {
write!(out, "<{}>", export_name);
write!(out, "{{ ");
let mut is_first_field = true;
// In C++, same order as defined is required.
let ordered_fields = out.bindings().struct_field_names(path);
for ordered_key in ordered_fields.iter() {
if let Some(lit) = fields.get(ordered_key) {
if !is_first_field {
write!(out, ", ");
} else {
is_first_field = false;
}
self.write_literal(out, lit);
}
}
write!(out, " }}");
}
}
}