// Automatically generated by the Flatbuffers compiler. Do not modify.
// @generated
pub mod my_game {
    use super::*;
    pub mod example {
        use super::*;
        mod color_generated;
        pub use self::color_generated::*;
        mod race_generated;
        pub use self::race_generated::*;
        mod long_enum_generated;
        pub use self::long_enum_generated::*;
        mod any_generated;
        pub use self::any_generated::*;
        mod any_unique_aliases_generated;
        pub use self::any_unique_aliases_generated::*;
        mod any_ambiguous_aliases_generated;
        pub use self::any_ambiguous_aliases_generated::*;
        mod test_generated;
        pub use self::test_generated::*;
        mod test_simple_table_with_enum_generated;
        pub use self::test_simple_table_with_enum_generated::*;
        mod vec_3_generated;
        pub use self::vec_3_generated::*;
        mod ability_generated;
        pub use self::ability_generated::*;
        mod struct_of_structs_generated;
        pub use self::struct_of_structs_generated::*;
        mod struct_of_structs_of_structs_generated;
        pub use self::struct_of_structs_of_structs_generated::*;
        mod stat_generated;
        pub use self::stat_generated::*;
        mod referrable_generated;
        pub use self::referrable_generated::*;
        mod monster_generated;
        pub use self::monster_generated::*;
        mod type_aliases_generated;
        pub use self::type_aliases_generated::*;
    } // example
    pub mod example_2 {
        use super::*;
        mod monster_generated;
        pub use self::monster_generated::*;
    } // example_2
    pub mod other_name_space {
        use super::*;
        mod from_include_generated;
        pub use self::from_include_generated::*;
        mod unused_generated;
        pub use self::unused_generated::*;
        mod table_b_generated;
        pub use self::table_b_generated::*;
    } // other_name_space
    mod in_parent_namespace_generated;
    pub use self::in_parent_namespace_generated::*;
} // my_game
mod table_a_generated;
pub use self::table_a_generated::*;
