@@ -5,9 +5,9 @@ import io.kaitai.struct.exprlang.Ast
55import io .kaitai .struct .exprlang .Ast .expr
66import io .kaitai .struct .format .{EnumSpec , Identifier }
77import io .kaitai .struct .languages .RustCompiler
8- import io .kaitai .struct .{RuntimeConfig , Utils }
8+ import io .kaitai .struct .{ImportList , Utils }
99
10- class RustTranslator (provider : TypeProvider , config : RuntimeConfig ) extends BaseTranslator (provider) {
10+ class RustTranslator (provider : TypeProvider , importList : ImportList ) extends BaseTranslator (provider) {
1111 override def doByteArrayLiteral (arr : Seq [Byte ]): String =
1212 " vec!([" + arr.map((x) =>
1313 " %0#2x" .format(x & 0xff )
@@ -61,13 +61,17 @@ class RustTranslator(provider: TypeProvider, config: RuntimeConfig) extends Base
6161 override def strConcat (left : expr, right : expr, extPrec : Int ) =
6262 " format!(\" {}{}\" , " + translate(left) + " , " + translate(right) + " )"
6363
64- override def strToInt (s : expr, base : expr): String =
65- translate(base) match {
64+ // TODO: do not generate .unwrap(), generate ? instead
65+ override def strToInt (s : expr, base : expr): String = {
66+ val baseStr = translate(base)
67+ baseStr match {
6668 case " 10" =>
6769 s " ${translate(s)}.parse().unwrap() "
6870 case _ =>
69- " panic!(\" Converting from string to int in base {} is unimplemented\" , " + translate(base) + " )"
71+ importList.add(" kaitai_struct::FromStrRadix" )
72+ s " FromStrRadix::from_str_radix( ${translate(s)}, $baseStr).unwrap() "
7073 }
74+ }
7175
7276 override def enumToInt (v : expr, et : EnumType ): String =
7377 translate(v)
0 commit comments