teo-parser 0.3.0

Parser for Teo schema language
Documentation
use std::sync::Arc;
use crate::ast::node::Node;
use crate::availability::Availability;
use crate::expr::ExprInfo;
use crate::ast::schema::Schema;
use crate::ast::source::Source;
use 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};
use crate::traits::identifiable::Identifiable;
use crate::traits::resolved::Resolve;

pub fn search_identifier_path_names_with_filter_to_expr_info(
    identifier_path_names: &Vec<&str>,
    schema: &Schema,
    source: &Source,
    namespace_str_path: &Vec<&str>,
    filter: &Arc<dyn Fn(&Node) -> bool>,
    availability: Availability,
) -> Option<ExprInfo> {
    search_identifier_path_names_with_filter_to_top(
        identifier_path_names,
        schema,
        source,
        namespace_str_path,
        filter,
        availability
    ).map(|t| top_to_expr_info(t, None))
}

pub fn search_identifier_path_names_with_filter_to_path(
    identifier_path_names: &Vec<&str>,
    schema: &Schema,
    source: &Source,
    namespace_str_path: &Vec<&str>,
    filter: &Arc<dyn Fn(&Node) -> bool>,
    availability: Availability,
) -> Option<Vec<usize>> {
    search_identifier_path_names_with_filter_to_top(
        identifier_path_names,
        schema,
        source,
        namespace_str_path,
        filter,
        availability
    ).map(|t| t.path().clone())
}

pub fn search_identifier_path_names_with_filter_to_top<'a>(
    identifier_path_names: &Vec<&str>,
    schema: &'a Schema,
    source: &'a Source,
    namespace_str_path: &Vec<&str>,
    filter: &Arc<dyn Fn(&Node) -> bool>,
    availability: Availability,
) -> Option<&'a Node> {
    resolve_identifier_path_names_with_filter_to_top(
        identifier_path_names,
        schema,
        source,
        namespace_str_path,
        filter,
        availability,
    )
}

pub fn search_identifier_path_names_with_filter_to_expr_info_multiple(
    identifier_path_names: &Vec<&str>,
    schema: &Schema,
    source: &Source,
    namespace_str_path: &Vec<&str>,
    filter: &Arc<dyn Fn(&Node) -> bool>,
    availability: Availability,
) -> Vec<ExprInfo> {
    search_identifier_path_names_with_filter_to_top_multiple(
        identifier_path_names,
        schema,
        source,
        namespace_str_path,
        filter,
        availability
    ).iter().map(|t| top_to_expr_info(t, None)).collect()
}

pub fn search_identifier_path_names_with_filter_to_path_multiple(
    identifier_path_names: &Vec<&str>,
    schema: &Schema,
    source: &Source,
    namespace_str_path: &Vec<&str>,
    filter: &Arc<dyn Fn(&Node) -> bool>,
    availability: Availability,
) -> Vec<Vec<usize>> {
    search_identifier_path_names_with_filter_to_top_multiple(
        identifier_path_names,
        schema,
        source,
        namespace_str_path,
        filter,
        availability
    ).iter().map(|t| t.path().clone()).collect()
}

pub fn search_identifier_path_names_with_filter_to_top_multiple<'a>(
    identifier_path_names: &Vec<&str>,
    schema: &'a Schema,
    source: &'a Source,
    namespace_str_path: &Vec<&str>,
    filter: &Arc<dyn Fn(&Node) -> bool>,
    availability: Availability,
) -> Vec<&'a Node> {
    resolve_identifier_path_names_with_filter_to_top_multiple(
        identifier_path_names,
        schema,
        source,
        namespace_str_path,
        filter,
        availability,
    )
}