Нет, нельзя. Модули в Rust оперируют функциями/типами/трейтами, но не отдельными кусками кода.
Ты можешь вынести функции f1 и f2 в отдельные файлы:
main.rs
mod m01;
mod m02;
mod m03;
fn main() {
m01::f1();
m02::f2();
let (i, p) = m03::f3();
println!("i = {:?}", i);
println!("p = {:?}", p);
}
m01.rs
pub fn f1() {
let num: u8 = 12;
println!("num = {:?}", num);
}
m03.rs
pub fn f2() {
let s: String = "abc".to_string();
println!("s = {:?}", s);
}
В случае m03 ты можешь попробовать сделать функцию, которая будет возвращать значения переменных i и p:
pub fn f3() -> (u8, String) {
let i: u8 = 88;
let p: String = "xyz".to_string();
(i, p)
}
PS: Я уже было хотел предложить макрос вида:
macro_rules! f4 {
() => {
let i: u8 = 88;
let p: String = "xyz".to_string();
}
}
Но он работать не будет, ибо
гигиена.
Но можно сделать так:
macro_rules! f4 {
($a: ident, $b: ident) => {
let $a: u8 = 88;
let $b: String = "xyz".to_string();
}
}
fn main() {
f4!(i, p);
println!("{} {}", i, p);
}
PPS: ну и ещё есть макрос
include!, который буквально решает твою задачу - вставить кусок кода из файла, но его я не советую использовать.