mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-16 16:41:10 +00:00
XXX/metadata: Include runtime ty IDs in subxt::Metadata
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
This commit is contained in:
@@ -85,6 +85,7 @@ struct MetadataInner {
|
|||||||
// Type of the DispatchError type, which is what comes back if
|
// Type of the DispatchError type, which is what comes back if
|
||||||
// an extrinsic fails.
|
// an extrinsic fails.
|
||||||
dispatch_error_ty: Option<u32>,
|
dispatch_error_ty: Option<u32>,
|
||||||
|
runtime: HashMap<String, RuntimeFnMetadata>,
|
||||||
// The hashes uniquely identify parts of the metadata; different
|
// The hashes uniquely identify parts of the metadata; different
|
||||||
// hashes mean some type difference exists between static and runtime
|
// hashes mean some type difference exists between static and runtime
|
||||||
// versions. We cache them here to avoid recalculating:
|
// versions. We cache them here to avoid recalculating:
|
||||||
@@ -101,6 +102,14 @@ pub struct Metadata {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Metadata {
|
impl Metadata {
|
||||||
|
/// Returns a reference to [`RuntimeFnMetadata`].
|
||||||
|
pub fn runtime_fn(&self, name: &str) -> Result<&RuntimeFnMetadata, MetadataError> {
|
||||||
|
self.inner
|
||||||
|
.runtime
|
||||||
|
.get(name)
|
||||||
|
.ok_or(MetadataError::PalletNotFound)
|
||||||
|
}
|
||||||
|
|
||||||
/// Returns a reference to [`PalletMetadata`].
|
/// Returns a reference to [`PalletMetadata`].
|
||||||
pub fn pallet(&self, name: &str) -> Result<&PalletMetadata, MetadataError> {
|
pub fn pallet(&self, name: &str) -> Result<&PalletMetadata, MetadataError> {
|
||||||
self.inner
|
self.inner
|
||||||
@@ -240,6 +249,35 @@ impl Metadata {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Metadata for a specific runtime API function.
|
||||||
|
#[derive(Clone, Debug)]
|
||||||
|
pub struct RuntimeFnMetadata {
|
||||||
|
/// The name of the runtime function (trait_method).
|
||||||
|
name: String,
|
||||||
|
// TODO: This could be `(param name, ty_id)` for resolving.
|
||||||
|
/// The type ID of the parameters in order of definition.
|
||||||
|
params_ty_id: Vec<u32>,
|
||||||
|
/// The type ID of the return type.
|
||||||
|
return_ty_id: u32,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl RuntimeFnMetadata {
|
||||||
|
/// Get the name of the runtime fn.
|
||||||
|
pub fn name(&self) -> &str {
|
||||||
|
&self.name
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Get the type IDs of the parameters.
|
||||||
|
pub fn params_ty_ids(&self) -> &[u32] {
|
||||||
|
&self.params_ty_id
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Get the type ID of the return type.
|
||||||
|
pub fn return_ty_id(&self) -> u32 {
|
||||||
|
self.return_ty_id
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Metadata for a specific pallet.
|
/// Metadata for a specific pallet.
|
||||||
#[derive(Clone, Debug)]
|
#[derive(Clone, Debug)]
|
||||||
pub struct PalletMetadata {
|
pub struct PalletMetadata {
|
||||||
@@ -421,6 +459,38 @@ impl TryFrom<RuntimeMetadataPrefixed> for Metadata {
|
|||||||
_ => return Err(InvalidMetadataError::InvalidVersion),
|
_ => return Err(InvalidMetadataError::InvalidVersion),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let runtime: HashMap<String, RuntimeFnMetadata> = metadata
|
||||||
|
.runtime
|
||||||
|
.iter()
|
||||||
|
.map(|trait_metadata| {
|
||||||
|
let trait_name = &trait_metadata.name;
|
||||||
|
|
||||||
|
trait_metadata
|
||||||
|
.methods
|
||||||
|
.iter()
|
||||||
|
.map(|method_metadata| {
|
||||||
|
let name = format!("{}_{}", trait_name, method_metadata.name);
|
||||||
|
|
||||||
|
let params_ty_id: Vec<_> = method_metadata
|
||||||
|
.inputs
|
||||||
|
.iter()
|
||||||
|
.map(|input| input.ty.id())
|
||||||
|
.collect();
|
||||||
|
let return_ty_id = method_metadata.output.id();
|
||||||
|
|
||||||
|
let metadata = RuntimeFnMetadata {
|
||||||
|
name: name.clone(),
|
||||||
|
params_ty_id,
|
||||||
|
return_ty_id,
|
||||||
|
};
|
||||||
|
|
||||||
|
(name, metadata)
|
||||||
|
})
|
||||||
|
.collect::<Vec<_>>()
|
||||||
|
})
|
||||||
|
.flatten()
|
||||||
|
.collect();
|
||||||
|
|
||||||
let get_type_def_variant = |type_id: u32| {
|
let get_type_def_variant = |type_id: u32| {
|
||||||
let ty = metadata
|
let ty = metadata
|
||||||
.types
|
.types
|
||||||
@@ -538,6 +608,7 @@ impl TryFrom<RuntimeMetadataPrefixed> for Metadata {
|
|||||||
events,
|
events,
|
||||||
errors,
|
errors,
|
||||||
dispatch_error_ty,
|
dispatch_error_ty,
|
||||||
|
runtime,
|
||||||
cached_metadata_hash: Default::default(),
|
cached_metadata_hash: Default::default(),
|
||||||
cached_call_hashes: Default::default(),
|
cached_call_hashes: Default::default(),
|
||||||
cached_constant_hashes: Default::default(),
|
cached_constant_hashes: Default::default(),
|
||||||
|
|||||||
Reference in New Issue
Block a user