Skip to content

Commit ebc89b1

Browse files
committed
refactor: use String for extension identifiers in metadata structures (#83)
* Updated Metadata struct to use String for extensions and extension_fns to prevent loss of precision in frontend codes. * Adjusted related mapping logic to convert identifiers to String.
1 parent 842160c commit ebc89b1

2 files changed

Lines changed: 9 additions & 6 deletions

File tree

pvq-extension/src/metadata.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
use crate::ExtensionIdTy;
2+
use scale_info::prelude::string::{String, ToString};
23

34
// This trait is for ExtensionImpl
45
pub trait ExtensionImplMetadata {
@@ -17,15 +18,16 @@ use serde::Serialize;
1718
#[derive(Clone, PartialEq, Eq, Encode, Debug, Serialize)]
1819
pub struct Metadata {
1920
pub types: PortableRegistry,
20-
pub extensions: BTreeMap<ExtensionIdTy, ExtensionMetadata<PortableForm>>,
21+
// Use String to prevent loss of precision in frontend codes
22+
pub extensions: BTreeMap<String, ExtensionMetadata<PortableForm>>,
2123
}
2224

2325
impl Metadata {
2426
pub fn new(extensions: BTreeMap<ExtensionIdTy, ExtensionMetadata>) -> Self {
2527
let mut registry = Registry::new();
2628
let extensions = extensions
2729
.into_iter()
28-
.map(|(id, metadata)| (id, metadata.into_portable(&mut registry)))
30+
.map(|(id, metadata)| (id.to_string(), metadata.into_portable(&mut registry)))
2931
.collect();
3032
Self {
3133
types: registry.into(),

pvq-program-metadata-gen/src/metadata_gen.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,7 @@ fn import_packages() -> proc_macro2::TokenStream {
217217
use parity_scale_codec::Encode;
218218
use scale_info::{
219219
form::{Form, MetaForm, PortableForm},
220-
prelude::vec::Vec,
220+
prelude::{string::{String, ToString}, vec::Vec},
221221
IntoPortable, PortableRegistry, Registry,
222222
};
223223
}
@@ -230,16 +230,17 @@ fn metadata_defs() -> proc_macro2::TokenStream {
230230
#[derive(Clone, PartialEq, Eq, Encode, Debug, Serialize)]
231231
pub struct Metadata {
232232
pub types: PortableRegistry,
233-
pub extension_fns: Vec<(ExtensionId, FnIndex, FunctionMetadata<PortableForm>)>,
234-
pub entrypoint: FunctionMetadata<PortableForm>,
233+
// Use String to prevent loss of precision in frontend codes
234+
pub extension_fns: Vec<(String, FnIndex, FunctionMetadata<PortableForm>)>,
235+
pub entrypoints: Vec<FunctionMetadata<PortableForm>>,
235236
}
236237

237238
impl Metadata {
238239
pub fn new(extension_fns: Vec<(ExtensionId, FnIndex, FunctionMetadata)>, entrypoint: FunctionMetadata) -> Self {
239240
let mut registry = Registry::new();
240241
let extension_fns = extension_fns
241242
.into_iter()
242-
.map(|(id, index, metadata)| (id, index, metadata.into_portable(&mut registry)))
243+
.map(|(id, index, metadata)| (id.to_string(), index, metadata.into_portable(&mut registry)))
243244
.collect();
244245
let entrypoint = entrypoint.into_portable(&mut registry);
245246
Self {

0 commit comments

Comments
 (0)