【发布时间】:2020-06-16 05:06:52
【问题描述】:
我的第一个 Rust 程序编译并运行:
use structopt::StructOpt;
use pcap::{Device,Capture};
use std::process::exit;
#[derive(StructOpt)]
struct Cli {
/// the capture device
device: String,
}
fn main() {
let devices = Device::list();
let args = Cli::from_args();
let mut optdev :Option<Device> = None;
for d in devices.unwrap() {
//println!("device: {:?}", d);
if d.name == args.device {
optdev = Some(d);
}
}
let dev = match optdev {
None => {
println!("Device {} not found.", args.device);
exit(1);
},
Some(dev) => dev,
};
let mut cap = Capture::from_device(dev).unwrap()
.promisc(true)
.snaplen(100)
.open().unwrap();
while let Ok(packet) = cap.next() {
println!("received packet! {:?}", packet);
}
}
我有一些复杂的代码遍历设备的 Vec,针对 args.device 测试每个人的 .name 属性。
我猜测有一种方法可以“查找” Vec 中的条目,这样我就可以将所有 optdev 行替换为以下内容:
let dev = match devices.unwrap().look_up(.name == args.device) {
None => {
println!("Device {} not found.", args.device);
exit(1);
},
Some(dev) => dev,
};
这样的look_up() 的语法是什么?
或者有更惯用的方法吗?
【问题讨论】: