我正在编写一个文件解析器,它将“.toml”文件(使用toml-rs板条箱)解析为 Rust 数据类型。现在我的函数接受PathBuf文件路径。我想让它变得通用,以便它可以接受包含 TOML 的任何类型的源:
PathBuf或Path.有可能实现这一目标吗?
String 和 PathBuf 不会实现良好的通用特征,它们太不同了。一是内容,一是通向内容的路径。
您可以有两个入口点函数,一个接受路径/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!();
}
Run Code Online (Sandbox Code Playgroud)
或者你可以使用这样的枚举:
enum ParseContent {
PathBuf(PathBuf),
Path(Path),
Content(String)
}
pub fn parse(source: ParseContent) -> Toml { todo!() }
Run Code Online (Sandbox Code Playgroud)
我更喜欢第一个。