Documentation
use crate::functions::basic::group as get_basic_functions;
use crate::functions::boolean::group as get_boolean_functions;
use crate::functions::list::group as get_list_functions;
use crate::functions::number::group as get_number_functions;
use crate::functions::number_as_string::group as get_nas_functions;
use crate::functions::object::group as get_object_functions;
use crate::functions::process::group as get_exec_functions;
use crate::functions::string::group as get_string_functions;
use crate::functions::time::group as get_time_functions;
use crate::functions::type_group::group as get_type_functions;
use crate::functions::variables::group as get_variable_functions;
use crate::functions_definitions::FunctionsGroup;

pub fn group() -> FunctionsGroup {
    FunctionsGroup::new("functions")
    .add_sub_group(get_basic_functions())
    .add_sub_group(get_type_functions())
    .add_sub_group(get_list_functions())
    .add_sub_group(get_object_functions())
    .add_sub_group(get_number_functions())
    .add_sub_group(get_string_functions())
    .add_sub_group(get_boolean_functions())
    .add_sub_group(get_time_functions())
    .add_sub_group(get_variable_functions())
    .add_sub_group(get_exec_functions())
    .add_sub_group(get_nas_functions())
    .add_description_line("Functions allow one to manipulate the input. The functions format is `(<function-name> <arg0> <arg1> ..)` where `<argN>` are functions or other types of selection.")
    .add_description_line("See additional help for selection for more details.")
    .add_description_line("See additional help with the group name to see the list of available functions in that group.")
    .root()
}