teo_parser/search/
search_identifier_path.rs

1use std::sync::Arc;
2use crate::ast::node::Node;
3use crate::availability::Availability;
4use crate::expr::ExprInfo;
5use crate::ast::schema::Schema;
6use crate::ast::source::Source;
7use crate::resolver::resolve_identifier::{resolve_identifier_path_names_with_filter_to_top, resolve_identifier_path_names_with_filter_to_top_multiple, top_to_expr_info};
8use crate::traits::identifiable::Identifiable;
9use crate::traits::resolved::Resolve;
10
11pub fn search_identifier_path_names_with_filter_to_expr_info(
12    identifier_path_names: &Vec<&str>,
13    schema: &Schema,
14    source: &Source,
15    namespace_str_path: &Vec<&str>,
16    filter: &Arc<dyn Fn(&Node) -> bool>,
17    availability: Availability,
18) -> Option<ExprInfo> {
19    search_identifier_path_names_with_filter_to_top(
20        identifier_path_names,
21        schema,
22        source,
23        namespace_str_path,
24        filter,
25        availability
26    ).map(|t| top_to_expr_info(t, None))
27}
28
29pub fn search_identifier_path_names_with_filter_to_path(
30    identifier_path_names: &Vec<&str>,
31    schema: &Schema,
32    source: &Source,
33    namespace_str_path: &Vec<&str>,
34    filter: &Arc<dyn Fn(&Node) -> bool>,
35    availability: Availability,
36) -> Option<Vec<usize>> {
37    search_identifier_path_names_with_filter_to_top(
38        identifier_path_names,
39        schema,
40        source,
41        namespace_str_path,
42        filter,
43        availability
44    ).map(|t| t.path().clone())
45}
46
47pub fn search_identifier_path_names_with_filter_to_top<'a>(
48    identifier_path_names: &Vec<&str>,
49    schema: &'a Schema,
50    source: &'a Source,
51    namespace_str_path: &Vec<&str>,
52    filter: &Arc<dyn Fn(&Node) -> bool>,
53    availability: Availability,
54) -> Option<&'a Node> {
55    resolve_identifier_path_names_with_filter_to_top(
56        identifier_path_names,
57        schema,
58        source,
59        namespace_str_path,
60        filter,
61        availability,
62    )
63}
64
65pub fn search_identifier_path_names_with_filter_to_expr_info_multiple(
66    identifier_path_names: &Vec<&str>,
67    schema: &Schema,
68    source: &Source,
69    namespace_str_path: &Vec<&str>,
70    filter: &Arc<dyn Fn(&Node) -> bool>,
71    availability: Availability,
72) -> Vec<ExprInfo> {
73    search_identifier_path_names_with_filter_to_top_multiple(
74        identifier_path_names,
75        schema,
76        source,
77        namespace_str_path,
78        filter,
79        availability
80    ).iter().map(|t| top_to_expr_info(t, None)).collect()
81}
82
83pub fn search_identifier_path_names_with_filter_to_path_multiple(
84    identifier_path_names: &Vec<&str>,
85    schema: &Schema,
86    source: &Source,
87    namespace_str_path: &Vec<&str>,
88    filter: &Arc<dyn Fn(&Node) -> bool>,
89    availability: Availability,
90) -> Vec<Vec<usize>> {
91    search_identifier_path_names_with_filter_to_top_multiple(
92        identifier_path_names,
93        schema,
94        source,
95        namespace_str_path,
96        filter,
97        availability
98    ).iter().map(|t| t.path().clone()).collect()
99}
100
101pub fn search_identifier_path_names_with_filter_to_top_multiple<'a>(
102    identifier_path_names: &Vec<&str>,
103    schema: &'a Schema,
104    source: &'a Source,
105    namespace_str_path: &Vec<&str>,
106    filter: &Arc<dyn Fn(&Node) -> bool>,
107    availability: Availability,
108) -> Vec<&'a Node> {
109    resolve_identifier_path_names_with_filter_to_top_multiple(
110        identifier_path_names,
111        schema,
112        source,
113        namespace_str_path,
114        filter,
115        availability,
116    )
117}