Rust is an interesting language, however it gives too many possibilities doing the same stuff, for example:
1.
"write" => {
let fname = self.parameter(&log, 0, fun_block, res_prev);
let file = File::create(&*fname);
if file.is_ok() {
let mut file = file.unwrap();
let len = fun_block.params.len();
for i in 1..len {
if write!(file, "{}", self.parameter(&log, i, fun_block, res_prev)).is_err() {
log.error(&format!{"Writing in {} failed at {}", fname, &fun_block.script_line});
break
}
}
} else {
log.error(&format!{"File {} can't be opened for writing at {}", fname, &fun_block.script_line});
}
}
"writea" => {
let fname = self.parameter(&log, 0, fun_block, res_prev);
if let Ok(mut file) = OpenOptions::new()
.read(true)
.append(true)
.create(true)
.open(&*fname) {
let len = fun_block.params.len();
for i in 1.. len {
if write!(file, "{}", self.parameter(&log, i, fun_block, res_prev)).is_err() {
log.error(&format!{"Writing in {} failed at {}", fname, &fun_block.script_line});
break
}
}
} else {
log.error(&format!{"File {} can't be opened for writing at {}", fname, &fun_block.script_line});
}
}
"writex" if cfg!(unix) => {
let fname = self.parameter(&log, 0, fun_block, res_prev);
match OpenOptions::new()
.create(true)
.write(true)
.truncate(true)
.mode(0o700)
.open(&*fname) {
Ok(mut file) => {
let len = fun_block.params.len();
for i in 1..len {
if write!(file, "{}", self.parameter(&log, i, fun_block, res_prev)).is_err() {
log.error(&format!{"Writing in {} failed at {}", fname, &fun_block.script_line});
break
}
}
}
Err(_) => log.error(&format!{"File {} can't be opened for writing at {}", fname, &fun_block.script_line}),
}
}
You can propose more variants, but question is - which one do you prefer and why? I just try to create a particular style of coding to get it more consistent and easy to read.