use crate::rule::shape::{one_to_one, part_of};
use seesaw_tgg::rules::format::RuleFile;
const CATALOGUE_NAME: &str = "elixir";
pub const STRUCT_TO_MODULE: &str = "struct-to-module";
pub const MEMBER_TO_FIELD: &str = "member-to-field";
pub const ENUM_TO_MODULE: &str = "enum-to-module";
pub const ENUMERATOR_TO_FUNCTION: &str = "enumerator-to-function";
pub const ALIAS_TO_TYPE: &str = "alias-to-type";
pub const UNION_TO_MODULE: &str = "union-to-module";
pub const CASE_TO_FIELD: &str = "case-to-field";
pub const BITMASK_TO_MODULE: &str = "bitmask-to-module";
pub const BIT_TO_FUNCTION: &str = "bit-to-function";
pub const BITSET_TO_MODULE: &str = "bitset-to-module";
pub const VALUETYPE_TO_MODULE: &str = "valuetype-to-module";
pub const MODULE_TO_MODULE: &str = "module-to-module";
pub const CONST_TO_FUNCTION: &str = "const-to-function";
pub const EXCEPTION_TO_MODULE: &str = "exception-to-module";
pub const NATIVE_TO_TYPE: &str = "native-to-type";
pub const INTERFACE_TO_BEHAVIOUR: &str = "interface-to-behaviour";
#[must_use]
pub fn catalogue() -> RuleFile {
RuleFile {
format: 3,
name: CATALOGUE_NAME.to_string(),
rules: vec![
one_to_one(
STRUCT_TO_MODULE,
"Structure",
"ElixirStruct",
"ElixirStructCorr",
),
part_of(
MEMBER_TO_FIELD,
("Member", "Structure", "ElixirStructCorr"),
("ElixirField", "ElixirStruct", "ElixirFieldCorr"),
),
one_to_one(
ENUM_TO_MODULE,
"Enumeration",
"ElixirEnum",
"ElixirEnumCorr",
),
part_of(
ENUMERATOR_TO_FUNCTION,
("Enumerator", "Enumeration", "ElixirEnumCorr"),
("ElixirEnumerator", "ElixirEnum", "ElixirEnumeratorCorr"),
),
one_to_one(ALIAS_TO_TYPE, "Alias", "ElixirAlias", "ElixirAliasCorr"),
one_to_one(UNION_TO_MODULE, "Union", "ElixirUnion", "ElixirUnionCorr"),
part_of(
CASE_TO_FIELD,
("Case", "Union", "ElixirUnionCorr"),
("ElixirCase", "ElixirUnion", "ElixirCaseCorr"),
),
one_to_one(
BITMASK_TO_MODULE,
"Bitmask",
"ElixirBitmask",
"ElixirBitmaskCorr",
),
part_of(
BIT_TO_FUNCTION,
("BitValue", "Bitmask", "ElixirBitmaskCorr"),
("ElixirBit", "ElixirBitmask", "ElixirBitCorr"),
),
one_to_one(
BITSET_TO_MODULE,
"Bitset",
"ElixirBitset",
"ElixirBitsetCorr",
),
one_to_one(
VALUETYPE_TO_MODULE,
"Valuetype",
"ElixirValue",
"ElixirValueCorr",
),
one_to_one(
MODULE_TO_MODULE,
"Module",
"ElixirModule",
"ElixirModuleCorr",
),
one_to_one(CONST_TO_FUNCTION, "Const", "ElixirConst", "ElixirConstCorr"),
one_to_one(
EXCEPTION_TO_MODULE,
"Exception",
"ElixirError",
"ElixirErrorCorr",
),
one_to_one(NATIVE_TO_TYPE, "Native", "ElixirNative", "ElixirNativeCorr"),
one_to_one(
INTERFACE_TO_BEHAVIOUR,
"Interface",
"ElixirBehaviour",
"ElixirBehaviourCorr",
),
],
}
}