我正在编写一个解析"的文件解析器;。toml";文件(使用toml-rs机箱(转换为Rust数据类型。现在,我的函数接受PathBuf
作为文件路径。我想让它通用,这样它就可以接受任何类型的包含TOML:的源
- 文件路径,
PathBuf
或Path
- 包含toml数据的字符串
有可能做到这一点吗?
如果String和PathBu太不同,就不会有一个好的通用特性由它们实现。一个是内容,一个是指向内容的路径。
您可以有两个入口点函数,一个接受路径/buf,另一个接受字符串(然后调用相同的助手(
pub fn parse_from_file<P: AsRef<Path>>(path: P) -> Toml {
let content = std::fs::read_to_string(path);
parse(content)
}
pub fn parse(content: String) -> Toml {
todo!();
}
或者你可以使用这样的枚举:
enum ParseContent {
PathBuf(PathBuf),
Path(Path),
Content(String)
}
pub fn parse(source: ParseContent) -> Toml { todo!() }
我更喜欢第一个。