autoload 0.1.0

rust autoload macro,single scan load ioc aop
Documentation
WHITESPACE = _{" " | notes|NEWLINE}
notes = {"//"+~(!"\n"~ANY)*~NEWLINE+}
char = @{ ASCII_ALPHANUMERIC}
attr_name_char = {(char+|"_")}
attr_name_char_group = {attr_name_char+}


use_char = @{ ASCII_ALPHANUMERIC|":"|","|"{"|"}"|"_"}
use_char_group = {use_char*}
use_content = {("use"~use_char_group~";")}

extern_char =  @{ ASCII_ALPHANUMERIC|":"|","|"{"|"}"|"_"}
extern_char_group = {extern_char+}
extern_content = {("extern"~"crate"~extern_char_group+~";")}

macro_char = @{ ASCII_ALPHANUMERIC|"("|")"|"!"|","|"_"|"-"|">"|"<"|"/"|"\""|"="|"." }
macro_char_group = {macro_char*}
macro_content = {("#"~"["~macro_char_group~"]")}

let_static_char = @{ASCII_ALPHANUMERIC}
let_static_char_group_name = {let_static_char*}
let_static_char_group_value = {let_static_char*}
let_static_content = {("static"~let_static_char_group_name~"="~let_static_char_group_value~";")}


cast_content = {(use_content|extern_content)}
cast_all_content = {cast_content*}

type_char = @{ ASCII_ALPHANUMERIC|":"|"," |"+"|"'"|"_"|"("|")"}
type_fnafor = {(type_fnbfor|type_fncfor|type_fndfor)}
type_fnbfor = {"<"~type_char*~type_fnafor~type_char*~">"}
type_fncfor = {type_char*~"<"~type_char*~">"~type_char*}
type_fndfor = {type_char*~"<"~type_fnafor*~">"~type_char*}

fun_char = { !"{"~!"}"~ANY}
fun_char_group = {fun_char*}
fun_afor = {(fun_bfor|fun_cfor|fun_dfor)}
fun_bfor = {"{"~fun_char_group~fun_afor~fun_char_group~"}"}
fun_cfor = {fun_char_group~"{"~fun_char_group~"}"~fun_char_group}
fun_dfor = {fun_char_group~"{"~fun_afor*~"}"~fun_char_group}

fun_name_char = @{!"{"~!"}"~ASCII_ALPHANUMERIC|"_"}
fun_name_group = {fun_name_char*}
fun_brackets_char = {!"("~!")"~ANY}
fun_brackets_group = {fun_brackets_char*}
fun_head_end_char = @{!"{"~!"}"~ANY}
fun_head_end_group ={fun_head_end_char*}


toml_ver_char = @{!"="~!"\""~!"\""~ANY}
toml_ver_name_char = @{!"{"~!"}"~!"]"~!"["~!"="~!"\""~!"\""~ANY}
toml_ver_more_char = @{ANY}
toml_ver_more_group = {((!"{"~!"}"~!"version"~!"path"~toml_ver_more_char)*){0,1}}
toml_ver_name_group = {toml_ver_name_char+}
toml_ver_version_group = {toml_ver_char+}

dependencies_start = {("["~"dependencies"~"]")}

dependencies_end = {!dependencies_start~"["{0,1}}

toml_other_attr_content = {toml_ver_name_group~"="~"\""~toml_ver_version_group+~"\""}

toml_ver_content = {toml_ver_name_group~"="~"\""~toml_ver_version_group+~"\""}

toml_ver_more_content = {toml_ver_name_group~"="~"{"~toml_ver_more_group~"version"~"="~"\""~toml_ver_version_group+~"\""~toml_ver_more_group~"}"}

toml_ver_more_path_content = {toml_ver_name_group~"="~"{"~toml_ver_more_group~"path"~"="~"\""~toml_ver_version_group+~"\""~toml_ver_more_group~"}"}

other_toml_ver_content = {!dependencies_start~ANY}


file = {
    SOI~
    (other_toml_ver_content)*
    ~dependencies_start
   ~(toml_ver_more_path_content|toml_ver_more_content|toml_ver_content)*
   ~dependencies_end
   ~    (other_toml_ver_content)*
    ~EOI
}