gear_core/message/
signal.rs1use crate::{
5 ids::{ActorId, MessageId, prelude::*},
6 message::{Dispatch, DispatchKind, Message, SignalDetails},
7};
8use gear_core_errors::SignalCode;
9
10#[derive(Clone, Debug, PartialEq, Eq)]
12pub struct SignalMessage {
13 id: MessageId,
15 code: SignalCode,
17}
18
19impl SignalMessage {
20 pub fn new(origin_msg_id: MessageId, code: SignalCode) -> Self {
22 let id = MessageId::generate_signal(origin_msg_id);
23
24 Self { id, code }
25 }
26
27 pub fn into_message(self, origin_msg_id: MessageId, destination: ActorId) -> Message {
29 Message::new(
30 self.id,
31 ActorId::SYSTEM,
32 destination,
33 Default::default(),
34 None,
35 0,
36 Some(SignalDetails::new(origin_msg_id, self.code).into()),
37 )
38 }
39
40 pub fn into_dispatch(self, origin_msg_id: MessageId, destination: ActorId) -> Dispatch {
42 Dispatch::new(
43 DispatchKind::Signal,
44 self.into_message(origin_msg_id, destination),
45 )
46 }
47
48 pub fn id(&self) -> MessageId {
50 self.id
51 }
52
53 pub fn code(&self) -> SignalCode {
55 self.code
56 }
57}