-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
试图更新依赖 #1
试图更新依赖 #1
Conversation
@wtklbm 大佬帮帮。 现在的问题有如下几个:
导致该现象的主要原因是当不存在时, 现在: pub fn current(&mut self) -> (String, Option<String>) {
let data = self.data.table_mut();
// 从配置文件中获取镜像名
let source = data[SOURCE][CRATES_IO].as_table().unwrap();
let name = if source.contains_key(REPLACE_WITH) {
match source[REPLACE_WITH].as_value().unwrap().as_str() {
Some(name) => name,
None => {
field_eprint(REPLACE_WITH, STRING);
process::exit(8);
}
}
} else {
RUST_LANG
};
// 从配置文件中根据镜像名获取镜像地址
let addr = data[SOURCE][name][REGISTRY].as_str().map(|v| v.to_string());
(name.to_string(), addr)
} 原来: pub fn current(&mut self) -> (String, Option<String>) {
let data = self.data.table_mut();
let replace_with = &data[SOURCE][CRATES_IO][REPLACE_WITH];
// 从配置文件中获取镜像名
let name = if !replace_with.is_none() {
match replace_with.as_str() {
Some(name) => name,
None => {
field_eprint(REPLACE_WITH, STRING);
process::exit(8);
}
}
} else {
RUST_LANG
};
// 从配置文件中根据镜像名获取镜像地址
let addr = data[SOURCE][name][REGISTRY].as_str().map(|v| v.to_string());
(name.to_string(), addr)
} |
注,这里利用的toml的特性偷懒了,理论上确实需要逐层判断是否存在…… |
现在太晚了,等有空了慢慢琢磨哈 |
非常感谢! |
抱歉哈,没时间顾得上写这个。我怕您等久了,写了个小函数,您看用的上吗: fn get_value_from_doc<'a>(entry: &'a DocumentMut, paths: &[&str]) -> Option<&'a Item> {
let mut current_item: &Item = entry.as_item();
for key in paths {
if let Item::Table(table) = current_item {
current_item = table.get(key)?;
} else {
return None;
}
}
Some(current_item)
} 然后在 let data = &self.data.doc;
let keys = [SOURCE, CRATES_IO, REPLACE_WITH];
let name = match get_value_from_doc(&data, &keys) {
Some(v) => v,
None => {
println!("值未找到");
process::exit(1)
}
};
println!("{}", v.to_string()); 这个还可以写的简单一点,有什么问题可以继续探讨哈。 |
非常感谢您提供的思路,抽空我会继续完善一下的,现在还稍微有点小问题没能解决 |
No description provided.