diff --git a/derive/src/lib.rs b/derive/src/lib.rs index 083b9f50..2653a0cf 100644 --- a/derive/src/lib.rs +++ b/derive/src/lib.rs @@ -201,6 +201,7 @@ fn clean_type_string(input: &str) -> String { .replace("< ", "<") .replace(" >", ">") .replace("& \'", "&'") + .replace("&\'", "&'") } fn generate_composite_type(data_struct: &DataStruct, scale_info: &Ident) -> TokenStream2 { diff --git a/src/impls.rs b/src/impls.rs index 82ff2530..a0b1326e 100644 --- a/src/impls.rs +++ b/src/impls.rs @@ -131,7 +131,7 @@ impl TypeInfo for VecDeque where T: TypeInfo + 'static, { - type Identity = Vec; + type Identity = [T]; fn type_info() -> Type { Self::Identity::type_info() diff --git a/test_suite/tests/json.rs b/test_suite/tests/json.rs index 60dd8959..ca047cce 100644 --- a/test_suite/tests/json.rs +++ b/test_suite/tests/json.rs @@ -18,6 +18,7 @@ use scale_info::prelude::{ boxed::Box, + collections::VecDeque, marker::PhantomData, string::String, vec, @@ -65,6 +66,29 @@ fn test_primitives() { assert_json_for_type::(json!({ "def": { "primitive": "i128" } })); } +#[test] +fn test_sequences_have_same_type() { + #[derive(TypeInfo)] + struct Struct { + a: &'static [u8], + b: Vec, + c: VecDeque, + } + + assert_json_for_type::(json!({ + "path": ["json", "Struct"], + "def": { + "composite": { + "fields": [ + { "name": "a", "type": 0, "typeName": "&'static[u8]" }, + { "name": "b", "type": 0, "typeName": "Vec" }, + { "name": "c", "type": 0, "typeName": "VecDeque" }, + ], + }, + } + })); +} + #[test] fn test_builtins() { // arrays