Skip to content

Commit cb2943e

Browse files
authored
Merge pull request #2044 from loloicci/allow-into-event
Enable "add_event" and "add_events" functions to process types implemented "into<Event>"
2 parents fb08588 + df40c06 commit cb2943e

File tree

2 files changed

+50
-4
lines changed

2 files changed

+50
-4
lines changed

CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,13 @@ and this project adheres to
66

77
## [Unreleased]
88

9+
### Changed
10+
11+
- cosmwasm-std: Enable `add_event` and `add_events` functions to process types
12+
implementing `Into<Event>` ([#2044])
13+
14+
[#2044]: https://github.com/CosmWasm/cosmwasm/pull/2044
15+
916
## [2.0.0-rc.1] - 2023-02-09
1017

1118
### Fixed

packages/std/src/results/response.rs

Lines changed: 43 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -129,8 +129,8 @@ impl<T> Response<T> {
129129
///
130130
/// The `wasm-` prefix will be appended by the runtime to the provided type
131131
/// of event.
132-
pub fn add_event(mut self, event: Event) -> Self {
133-
self.events.push(event);
132+
pub fn add_event(mut self, event: impl Into<Event>) -> Self {
133+
self.events.push(event.into());
134134
self
135135
}
136136

@@ -219,8 +219,11 @@ impl<T> Response<T> {
219219
///
220220
/// The `wasm-` prefix will be appended by the runtime to the provided types
221221
/// of events.
222-
pub fn add_events(mut self, events: impl IntoIterator<Item = Event>) -> Self {
223-
self.events.extend(events);
222+
pub fn add_events<E>(mut self, events: impl IntoIterator<Item = E>) -> Self
223+
where
224+
E: Into<Event>,
225+
{
226+
self.events.extend(events.into_iter().map(|e| e.into()));
224227
self
225228
}
226229

@@ -331,4 +334,40 @@ mod tests {
331334
assert!(failure.is_err());
332335
assert!(!success.is_err());
333336
}
337+
338+
// struct implements `Into<Event>`
339+
#[derive(Clone)]
340+
struct OurEvent {
341+
msg: String,
342+
}
343+
344+
// allow define `into` rather than `from` to define `into` clearly
345+
#[allow(clippy::from_over_into)]
346+
impl Into<Event> for OurEvent {
347+
fn into(self) -> Event {
348+
Event::new("our_event").add_attribute("msg", self.msg)
349+
}
350+
}
351+
352+
#[test]
353+
fn add_event_takes_into_event() {
354+
let msg = "message".to_string();
355+
let our_event = OurEvent { msg };
356+
let event: Event = our_event.clone().into();
357+
let actual = Response::<Empty>::new().add_event(our_event);
358+
let expected = Response::<Empty>::new().add_event(event);
359+
assert_eq!(expected, actual);
360+
}
361+
362+
#[test]
363+
fn add_events_takes_into_event() {
364+
let msg1 = "foo".to_string();
365+
let msg2 = "bare".to_string();
366+
let our_event1 = OurEvent { msg: msg1 };
367+
let our_event2 = OurEvent { msg: msg2 };
368+
let events: Vec<Event> = vec![our_event1.clone().into(), our_event2.clone().into()];
369+
let actual = Response::<Empty>::new().add_events([our_event1, our_event2]);
370+
let expected = Response::<Empty>::new().add_events(events);
371+
assert_eq!(expected, actual);
372+
}
334373
}

0 commit comments

Comments
 (0)