Skip to content

Commit 607aad2

Browse files
committed
Rust: generate <integer>::from_str_radix for non-base-10 .to_i conversions
1 parent e4b79b3 commit 607aad2

File tree

1 file changed

+7
-3
lines changed

1 file changed

+7
-3
lines changed

shared/src/main/scala/io/kaitai/struct/translators/RustTranslator.scala

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,13 +54,17 @@ class RustTranslator(provider: TypeProvider, config: RuntimeConfig) extends Base
5454
override def strConcat(left: expr, right: expr, extPrec: Int) =
5555
"format!(\"{}{}\", " + translate(left) + ", " + translate(right) + ")"
5656

57-
override def strToInt(s: expr, base: expr): String =
58-
translate(base) match {
57+
// TODO: do not generate .unwrap(), generate ? instead
58+
override def strToInt(s: expr, base: expr): String = {
59+
val baseStr = translate(base)
60+
baseStr match {
5961
case "10" =>
6062
s"${translate(s)}.parse().unwrap()"
6163
case _ =>
62-
"panic!(\"Converting from string to int in base {} is unimplemented\", " + translate(base) + ")"
64+
// TODO: Would be better to add a method to runtime which would be able to deduce returning type
65+
s"i64::from_str_radix(${translate(s)}, $baseStr).unwrap()"
6366
}
67+
}
6468

6569
override def enumToInt(v: expr, et: EnumType): String =
6670
translate(v)

0 commit comments

Comments
 (0)