protobuf_parse/pure/
parse_dependencies.rs
1use protobuf::descriptor::FileDescriptorProto;
2
3use crate::pure::convert::populate_dependencies;
4use crate::pure::model;
5use crate::pure::parser::ParserErrorWithLocation;
6
7pub fn parse_dependencies(content: &str) -> Result<FileDescriptorProto, ParserErrorWithLocation> {
11 let input = model::FileDescriptor::parse(content)?;
12 let mut output = FileDescriptorProto::new();
13 populate_dependencies(&input, &mut output);
14 Ok(output)
15}
16
17#[cfg(test)]
18mod test {
19 #[test]
20 fn parse_dependencies() {
21 let deps = crate::pure::parse_dependencies::parse_dependencies(
22 r"
23syntax = 'proto3';
24
25import 'google/protobuf/field_mask.proto';
26import public 'google/protobuf/struct.proto';
27
28message IgnoreMe {}
29",
30 )
31 .unwrap();
32 assert_eq!(
33 &[
34 "google/protobuf/field_mask.proto",
35 "google/protobuf/struct.proto",
36 ],
37 &deps.dependency[..]
38 );
39 assert_eq!(&[1], &deps.public_dependency[..]);
40 }
41}