diff --git a/substrate/primitives/api/proc-macro/src/decl_runtime_apis.rs b/substrate/primitives/api/proc-macro/src/decl_runtime_apis.rs index 8294c8bfbd68428e15cefd410a15137c9a730d7e..a628ade6f9b476a2b2604b456c215a8545b2a27d 100644 --- a/substrate/primitives/api/proc-macro/src/decl_runtime_apis.rs +++ b/substrate/primitives/api/proc-macro/src/decl_runtime_apis.rs @@ -912,6 +912,13 @@ impl CheckTraitDecl { .entry(method.sig.ident.clone()) .or_default() .push(changed_in); + + if method.default.is_some() { + self.errors.push(Error::new( + method.default.span(), + "A runtime API function cannot have a default implementation!", + )); + } }); method_to_signature_changed.into_iter().for_each(|(f, changed)| { diff --git a/substrate/primitives/api/test/tests/ui/no_default_implementation.rs b/substrate/primitives/api/test/tests/ui/no_default_implementation.rs new file mode 100644 index 0000000000000000000000000000000000000000..6af93d6b865399c85b4d0756cb4357a4b71e21b2 --- /dev/null +++ b/substrate/primitives/api/test/tests/ui/no_default_implementation.rs @@ -0,0 +1,9 @@ +sp_api::decl_runtime_apis! { + pub trait Api { + fn test() { + println!("Hey, I'm a default implementation!"); + } + } +} + +fn main() {} diff --git a/substrate/primitives/api/test/tests/ui/no_default_implementation.stderr b/substrate/primitives/api/test/tests/ui/no_default_implementation.stderr new file mode 100644 index 0000000000000000000000000000000000000000..0ccece1441916245bd43517842cd0335395cbdf6 --- /dev/null +++ b/substrate/primitives/api/test/tests/ui/no_default_implementation.stderr @@ -0,0 +1,8 @@ +error: A runtime API function cannot have a default implementation! + --> $DIR/no_default_implementation.rs:3:13 + | +3 | fn test() { + | ___________________^ +4 | | println!("Hey, I'm a default implementation!"); +5 | | } + | |_________^