diff --git a/substrate/bin/node-template/runtime/src/lib.rs b/substrate/bin/node-template/runtime/src/lib.rs
index a2f595f571a9081e286f9d30d1775c8ab21d8b33..a4382cc9038ce5dfe3da4132d10ebb1f5bc4b219 100644
--- a/substrate/bin/node-template/runtime/src/lib.rs
+++ b/substrate/bin/node-template/runtime/src/lib.rs
@@ -272,10 +272,11 @@ impl pallet_template::Config for Runtime {
 
 // Create the runtime by composing the FRAME pallets that were previously configured.
 construct_runtime!(
-	pub enum Runtime where
+	pub struct Runtime
+	where
 		Block = Block,
 		NodeBlock = opaque::Block,
-		UncheckedExtrinsic = UncheckedExtrinsic
+		UncheckedExtrinsic = UncheckedExtrinsic,
 	{
 		System: frame_system,
 		RandomnessCollectiveFlip: pallet_randomness_collective_flip,
diff --git a/substrate/frame/balances/src/tests_local.rs b/substrate/frame/balances/src/tests_local.rs
index 6f4c50d90153a11a8d62cd7adfd62485e60a68fd..48c6574c3b39f52b1ab5b5e82ab8332fb3c8e52b 100644
--- a/substrate/frame/balances/src/tests_local.rs
+++ b/substrate/frame/balances/src/tests_local.rs
@@ -34,7 +34,7 @@ type UncheckedExtrinsic = frame_system::mocking::MockUncheckedExtrinsic<Test>;
 type Block = frame_system::mocking::MockBlock<Test>;
 
 frame_support::construct_runtime!(
-	pub enum Test where
+	pub struct Test where
 		Block = Block,
 		NodeBlock = Block,
 		UncheckedExtrinsic = UncheckedExtrinsic,
diff --git a/substrate/frame/support/procedural/src/construct_runtime/parse.rs b/substrate/frame/support/procedural/src/construct_runtime/parse.rs
index a2cda6a0777b81c1761f800bde65fc54e12042ca..711da85c10cfc8ecc0436fcf94d434a860a83411 100644
--- a/substrate/frame/support/procedural/src/construct_runtime/parse.rs
+++ b/substrate/frame/support/procedural/src/construct_runtime/parse.rs
@@ -73,7 +73,14 @@ pub struct ExplicitRuntimeDeclaration {
 impl Parse for RuntimeDeclaration {
 	fn parse(input: ParseStream) -> Result<Self> {
 		input.parse::<Token![pub]>()?;
-		input.parse::<Token![enum]>()?;
+
+		// Support either `enum` or `struct`.
+		if input.peek(Token![struct]) {
+			input.parse::<Token![struct]>()?;
+		} else {
+			input.parse::<Token![enum]>()?;
+		}
+
 		let name = input.parse::<syn::Ident>()?;
 		let where_section = input.parse()?;
 		let pallets =