1// Copyright 2019 The Fuchsia Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
45use std::any::Any;
67/// Message type
8pub type Message = Box<dyn Any>;
910/// Make a message
11pub fn make_message<A: Any>(message_contents: A) -> Message {
12 Box::new(message_contents)
13}
1415/// Macro to implement a handle message trait method that delegates
16/// known types to other methods on the struct implementing ViewAssistant.
17#[macro_export]
18macro_rules! derive_handle_message {
19 (
20 $(
21$message_type:ty => $handler_method:ident
22 ),
23 +
24 ) => {
25fn handle_message(&mut self, msg: carnelian::Message) {
26 $(
27if let Some(my_message) = msg.downcast_ref::<$message_type>() {
28self.$handler_method(my_message);
29return;
30 }
31 )*
32 }
33 };
34}
3536/// Macro to implement a handle message trait method that delegates
37/// known types to other methods on the struct implementing ViewAssistant.
38#[macro_export]
39macro_rules! derive_handle_message_with_default {
40 (
41$default_handler_method:ident,
42 $(
43$message_type:ty => $handler_method:ident
44 ),
45 +
46 ) => {
47fn handle_message(&mut self, msg: carnelian::Message) {
48 $(
49if let Some(my_message) = msg.downcast_ref::<$message_type>() {
50self.$handler_method(my_message);
51return;
52 }
53 )*
54self.$default_handler_method(&msg);
55 }
56 };
57}