Constant STD_STRING_MODULE_SOURCE

Source
const STD_STRING_MODULE_SOURCE: &str = "meta fn render_value(arg: Expr[any], arg_type: type) -> Expr[String] {\n  match arg_type {\n    String => arg,\n    i64 => expr { std::io::int_to_string(arg) },\n    Bool => expr { std::io::bool_to_string(arg) },\n  };\n}\n\nmeta fn finish_fmt(arg_types: type) -> Expr[String] {\n  match arg_types {\n    Tuple[] => expr { \"\" },\n  };\n}\n\nmeta fn fmt_literal(head: String, rest: String, args: Expr[any], arg_types: type) -> Expr[String] {\n  let rest_rendered = fmt_build(rest, args, arg_types);\n  expr { std::string::concat(head, rest_rendered) };\n}\n\nmeta fn fmt_placeholder(rest: String, args: Expr[any], arg_types: type) -> Expr[String] {\n  let head_arg = std::tuple::head(args);\n  let tail_args = std::tuple::tail(args);\n  let head_type = std::tuple::type_head(arg_types);\n  let tail_types = std::tuple::type_tail(arg_types);\n  let rendered = render_value(head_arg, head_type);\n  let rest_rendered = fmt_build(rest, tail_args, tail_types);\n  expr { std::string::concat(rendered, rest_rendered) };\n}\n\nmeta fn fmt_nonempty(f: String, args: Expr[any], arg_types: type) -> Expr[String] {\n  match std::string::starts_with(f, \"{}\") {\n    true => fmt_placeholder(std::string::drop(f, 2), args, arg_types),\n    false => fmt_literal(std::string::take(f, 1), std::string::drop(f, 1), args, arg_types),\n  };\n}\n\nmeta fn fmt_build(f: String, args: Expr[any], arg_types: type) -> Expr[String] {\n  match f {\n    \"\" => finish_fmt(arg_types),\n    _ => fmt_nonempty(f, args, arg_types),\n  };\n}\n\nfn fmt(meta f: String, args: any...) -> String {\n  $(fmt_build(f, expr { args }, args__types))\n}\n";