diff --git a/xtask/src/gen_doc.rs b/xtask/src/gen_doc.rs index 13ce53a7af00e5b99b34485133038c5c3a66dc96..06188243c8d06dce03da06aca15ef9dd94f6ea4e 100644 --- a/xtask/src/gen_doc.rs +++ b/xtask/src/gen_doc.rs @@ -255,47 +255,15 @@ pub(super) fn gen_doc() -> Result<()> { println!("Metadata successfully loaded!"); - let mut runtime = if let frame_metadata::RuntimeMetadata::V14(ref metadata_v14) = metadata.1 { - get_from_metadata_v14(metadata_v14.clone())? - } else { - bail!("unsuported metadata version") - }; - - // Compute the weights from the weight files. - // Require the `pallet_xxx.rs` weights, - // the `paritydb_weights.rs` and the `extrinsic_weights.rs` - let max_weight = if let frame_metadata::RuntimeMetadata::V14(metadata_v14) = metadata.1 { - let block_weights = metadata_v14 - .pallets - .iter() - .find(|pallet| pallet.name == "System") - .expect("Can't find System pallet metadata") - .constants - .iter() - .find(|constant| constant.name == "BlockWeights") - .expect("Can't find BlockWeights"); - - let block_weights = scale_value::scale::decode_as_type( - &mut &*block_weights.value, - block_weights.ty.id, - &metadata_v14.types, - ) - .expect("Can't decode max_weight") - .value; - - let max_weight: u128 = - if let scale_value::ValueDef::Composite(scale_value::Composite::Named(i)) = block_weights - && let scale_value::ValueDef::Composite(scale_value::Composite::Named(j)) = &i.iter().find(|name| name.0 == "max_block").unwrap().1.value - && let scale_value::ValueDef::Primitive(scale_value::Primitive::U128(k)) = &j.iter().find(|name| name.0 == "ref_time").unwrap().1.value - { - *k + let (mut runtime, max_weight) = + if let frame_metadata::RuntimeMetadata::V14(ref metadata_v14) = metadata.1 { + ( + get_from_metadata_v14(metadata_v14.clone())?, + get_max_weight_from_metadata_v14(metadata_v14.clone())?, + ) } else { - 0u128 + bail!("unsuported metadata version") }; - max_weight - } else { - 0u128 - }; let mut weights = get_weights(max_weight); // AdHoc names convertion @@ -360,6 +328,40 @@ pub(super) fn gen_doc() -> Result<()> { Ok(()) } +fn get_max_weight_from_metadata_v14( + metadata_v14: frame_metadata::v14::RuntimeMetadataV14, +) -> Result<u128> { + // Compute the weights from the weight files. + // Require the `pallet_xxx.rs` weights, + // the `paritydb_weights.rs` and the `extrinsic_weights.rs` + let block_weights = metadata_v14 + .pallets + .iter() + .find(|pallet| pallet.name == "System") + .expect("Can't find System pallet metadata") + .constants + .iter() + .find(|constant| constant.name == "BlockWeights") + .expect("Can't find BlockWeights"); + + let block_weights = scale_value::scale::decode_as_type( + &mut &*block_weights.value, + block_weights.ty.id, + &metadata_v14.types, + ) + .expect("Can't decode max_weight") + .value; + + if let scale_value::ValueDef::Composite(scale_value::Composite::Named(i)) = block_weights + && let scale_value::ValueDef::Composite(scale_value::Composite::Named(j)) = &i.iter().find(|name| name.0 == "max_block").unwrap().1.value + && let scale_value::ValueDef::Primitive(scale_value::Primitive::U128(k)) = &j.iter().find(|name| name.0 == "ref_time").unwrap().1.value + { + Ok(*k) + } else { + bail!("Invalid max_weight") + } +} + fn get_from_metadata_v14( metadata_v14: frame_metadata::v14::RuntimeMetadataV14, ) -> Result<RuntimePallets> {