Skip to content
This repository was archived by the owner on Nov 15, 2023. It is now read-only.

Commit 1538807

Browse files
committed
Implement json metadata for outer events
Progress on: #535
1 parent 2f593df commit 1538807

File tree

4 files changed

+106
-29
lines changed

4 files changed

+106
-29
lines changed

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

substrate/runtime-support/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ substrate-codec = { path = "../codec", default_features = false }
1616
[dev-dependencies]
1717
pretty_assertions = "0.5.1"
1818
serde_json = { version = "1.0" }
19+
substrate-codec-derive = { path = "../../substrate/codec/derive" }
1920

2021
[features]
2122
default = ["std"]
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
#[macro_export]
2+
macro_rules! impl_outer_event {
3+
($(#[$attr:meta])* pub enum $name:ident for $runtime:ident { $( $module:ident ),* }) => {
4+
// Workaround for https://github.com/rust-lang/rust/issues/26925 . Remove when sorted.
5+
#[derive(Clone, PartialEq, Eq, Encode, Decode)]
6+
#[cfg_attr(feature = "std", derive(Debug, Serialize, Deserialize))]
7+
$(#[$attr])*
8+
#[allow(non_camel_case_types)]
9+
pub enum $name {
10+
system(system::Event),
11+
$(
12+
$module($module::Event<$runtime>),
13+
)*
14+
}
15+
impl From<system::Event> for $name {
16+
fn from(x: system::Event) -> Self {
17+
$name::system(x)
18+
}
19+
}
20+
$(
21+
impl From<$module::Event<$runtime>> for $name {
22+
fn from(x: $module::Event<$runtime>) -> Self {
23+
$name::$module(x)
24+
}
25+
}
26+
)*
27+
__impl_outer_event_json_metadata!($runtime; $name; $( $module )*);
28+
}
29+
}
30+
31+
#[macro_export]
32+
#[doc(hidden)]
33+
macro_rules! __impl_outer_event_json_metadata {
34+
(
35+
$runtime:ident;
36+
$event_name:ident;
37+
$( $module:ident )*
38+
) => {
39+
impl $runtime {
40+
pub fn outer_event_json_metadata() -> &'static str {
41+
concat!(r#"{ "name": ""#, stringify!($event_name), r#"", "items": { "#,
42+
r#""system": "system::Event""#,
43+
$(concat!(", \"", stringify!($module), r#"": ""#,
44+
stringify!($module), "::Event<", stringify!($runtime), r#">""#),)*
45+
" } }")
46+
}
47+
}
48+
}
49+
}
50+
51+
#[cfg(test)]
52+
mod tests {
53+
use serde;
54+
use serde_json;
55+
56+
mod system {
57+
#[derive(Debug, Clone, PartialEq, Eq, Encode, Decode, Deserialize, Serialize)]
58+
pub struct Event;
59+
}
60+
61+
mod event_module {
62+
#[derive(Debug, Clone, PartialEq, Eq, Encode, Decode, Deserialize, Serialize)]
63+
pub struct Event<T> {
64+
t: T,
65+
}
66+
}
67+
68+
mod event_module2 {
69+
#[derive(Debug, Clone, PartialEq, Eq, Encode, Decode, Deserialize, Serialize)]
70+
pub struct Event<T> {
71+
t: T,
72+
}
73+
}
74+
75+
#[derive(Debug, Clone, PartialEq, Eq, Encode, Decode, Deserialize, Serialize)]
76+
pub struct TestRuntime;
77+
78+
impl_outer_event! {
79+
pub enum TestEvent for TestRuntime {
80+
event_module, event_module2
81+
}
82+
}
83+
84+
const EXPECTED_METADATA: &str = concat!(
85+
r#"{ "name": "TestEvent", "items": { "#,
86+
r#""system": "system::Event", "#,
87+
r#""event_module": "event_module::Event<TestRuntime>", "#,
88+
r#""event_module2": "event_module2::Event<TestRuntime>" "#,
89+
r#"} }"#
90+
);
91+
92+
#[test]
93+
fn outer_event_json_metadata() {
94+
let metadata = TestRuntime::outer_event_json_metadata();
95+
assert_eq!(EXPECTED_METADATA, metadata);
96+
let _: serde::de::IgnoredAny =
97+
serde_json::from_str(metadata).expect("Is valid json syntax");
98+
}
99+
}

substrate/runtime-support/src/lib.rs

Lines changed: 5 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@ extern crate pretty_assertions;
3333
extern crate serde_derive;
3434
#[cfg(test)]
3535
extern crate serde_json;
36+
#[cfg(test)]
37+
#[macro_use]
38+
extern crate substrate_codec_derive;
3639

3740
#[doc(hidden)]
3841
pub extern crate substrate_codec as codec;
@@ -42,6 +45,8 @@ pub use self::storage::generator::Storage as GenericStorage;
4245
pub mod dispatch;
4346
pub mod storage;
4447
mod hashable;
48+
#[macro_use]
49+
mod event;
4550

4651
pub use self::storage::{StorageVec, StorageList, StorageValue, StorageMap};
4752
pub use self::hashable::Hashable;
@@ -94,35 +99,6 @@ macro_rules! assert_ok {
9499
}
95100
}
96101

97-
#[macro_export]
98-
macro_rules! impl_outer_event {
99-
($(#[$attr:meta])* pub enum $name:ident for $trait:ident { $( $module:ident ),* }) => {
100-
// Workaround for https://github.com/rust-lang/rust/issues/26925 . Remove when sorted.
101-
#[derive(Clone, PartialEq, Eq, Encode, Decode)]
102-
#[cfg_attr(feature = "std", derive(Debug, Serialize, Deserialize))]
103-
$(#[$attr])*
104-
#[allow(non_camel_case_types)]
105-
pub enum $name {
106-
system(system::Event),
107-
$(
108-
$module($module::Event<$trait>),
109-
)*
110-
}
111-
impl From<system::Event> for $name {
112-
fn from(x: system::Event) -> Self {
113-
$name::system(x)
114-
}
115-
}
116-
$(
117-
impl From<$module::Event<$trait>> for $name {
118-
fn from(x: $module::Event<$trait>) -> Self {
119-
$name::$module(x)
120-
}
121-
}
122-
)*
123-
}
124-
}
125-
126102
#[macro_export]
127103
macro_rules! impl_outer_log {
128104

0 commit comments

Comments
 (0)