in uniffi_bindgen/src/bindings/kotlin/gen_kotlin/primitives.rs [13:56]
fn render_literal(literal: &Literal, _ci: &ComponentInterface) -> 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 {
// Bytes, Shorts and Ints can all be inferred from the type.
Type::Int8 | Type::Int16 | Type::Int32 => num_str,
Type::Int64 => format!("{num_str}L"),
Type::UInt8 | Type::UInt16 | Type::UInt32 => format!("{num_str}u"),
Type::UInt64 => format!("{num_str}uL"),
Type::Float32 => format!("{num_str}f"),
Type::Float64 => num_str,
_ => bail!("Unexpected literal: {num_str} for type: {type_:?}"),
})
}
match literal {
Literal::Boolean(v) => Ok(format!("{v}")),
Literal::String(s) => Ok(format!("\"{s}\"")),
Literal::Int(i, radix, type_) => typed_number(
type_,
match radix {
Radix::Octal => format!("{i:#x}"),
Radix::Decimal => format!("{i}"),
Radix::Hexadecimal => format!("{i:#x}"),
},
),
Literal::UInt(i, radix, type_) => typed_number(
type_,
match radix {
Radix::Octal => format!("{i:#x}"),
Radix::Decimal => format!("{i}"),
Radix::Hexadecimal => format!("{i:#x}"),
},
),
Literal::Float(string, type_) => typed_number(type_, string.clone()),
_ => bail!("Invalid literal {literal:?}"),
}
}