如何将函数泛化为将文件路径或文件内容接受为字符串



我正在编写一个解析"的文件解析器;。toml";文件(使用toml-rs机箱(转换为Rust数据类型。现在,我的函数接受PathBuf作为文件路径。我想让它通用,这样它就可以接受任何类型的包含TOML:的源

  1. 文件路径,PathBufPath
  2. 包含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!() }

我更喜欢第一个。

最新更新