in uniffi_bindgen/src/bindings/swift/gen_swift/primitives.rs [13:65]
fn render_literal(literal: &Literal) -> Result<String> {
fn typed_number(type_: &Type, num_str: String) -> Result<String> {
let unwrapped_type = match type_ {
Type::Optional { inner_type } => inner_type,
t => t,
};
Ok(match unwrapped_type {
// special case Int32.
Type::Int32 => num_str,
// otherwise use constructor e.g. UInt8(x)
Type::Int8
| Type::UInt8
| Type::Int16
| Type::UInt16
| Type::UInt32
| Type::Int64
| Type::UInt64
| Type::Float32
| Type::Float64 =>
// XXX we should pass in the codetype itself.
{
format!(
"{}({num_str})",
super::SwiftCodeOracle.find(type_).type_label()
)
}
_ => bail!("Unexpected literal: {num_str} for type: {type_:?}"),
})
}
Ok(match literal {
Literal::Boolean(v) => format!("{v}"),
Literal::String(s) => format!("\"{s}\""),
Literal::Int(i, radix, type_) => typed_number(
type_,
match radix {
Radix::Octal => format!("0o{i:o}"),
Radix::Decimal => format!("{i}"),
Radix::Hexadecimal => format!("{i:#x}"),
},
)?,
Literal::UInt(i, radix, type_) => typed_number(
type_,
match radix {
Radix::Octal => format!("0o{i:o}"),
Radix::Decimal => format!("{i}"),
Radix::Hexadecimal => format!("{i:#x}"),
},
)?,
Literal::Float(string, type_) => typed_number(type_, string.clone())?,
_ => bail!("Invalid literal: {literal:?}"),
})
}