macro_rules! external_interface_members {
    (
        $blueprint_context:tt,
        fn $method_name:ident(&self$(, $method_args:ident: $method_types:ty)*) -> $method_output:ty;
        $($rest:tt)*
    ) => { ... };
    (
        $blueprint_context:tt,
        fn $method_name:ident(&self$(, $method_args:ident: $method_types:ty)*);
        $($rest:tt)*
    ) => { ... };
    (
        $blueprint_context:tt,
        fn $method_name:ident(&mut self$(, $method_args:ident: $method_types:ty)*) -> $method_output:ty;
        $($rest:tt)*
    ) => { ... };
    (
        $blueprint_context:tt,
        fn $method_name:ident(&mut self$(, $method_args:ident: $method_types:ty)*);
        $($rest:tt)*
    ) => { ... };
    (
        $blueprint_context:tt,
        fn $method_name:ident(self$(, $method_args:ident: $method_types:ty)*) -> $method_output:ty;
        $($rest:tt)*
    ) => { ... };
    (
        $blueprint_context:tt,
        fn $method_name:ident(self$(, $method_args:ident: $method_types:ty)*);
        $($rest:tt)*
    ) => { ... };
    (
        $blueprint_context:tt,
        fn $func_name:ident($($func_args:ident: $func_types:ty),*) -> $func_output:ty;
        $($rest:tt)*
    ) => { ... };
    (
        $blueprint_context:tt,
        fn $func_name:ident($($func_args:ident: $func_types:ty),*);
        $($rest:tt)*
    ) => { ... };
    (
        $blueprint_context:tt,
    ) => { ... };
}