Skip to main content

gear_core/message/
signal.rs

1// Copyright (C) Gear Technologies Inc.
2// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0
3
4use crate::{
5    ids::{ActorId, MessageId, prelude::*},
6    message::{Dispatch, DispatchKind, Message, SignalDetails},
7};
8use gear_core_errors::SignalCode;
9
10/// Message for signal entry point.
11#[derive(Clone, Debug, PartialEq, Eq)]
12pub struct SignalMessage {
13    /// Message id.
14    id: MessageId,
15    /// Reply status code.
16    code: SignalCode,
17}
18
19impl SignalMessage {
20    /// Creates a new [`SignalMessage`].
21    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    /// Convert [`SignalMessage`] into [`Message`].
28    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    /// Convert [`SignalMessage`] into [`Dispatch`].
41    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    /// Message id.
49    pub fn id(&self) -> MessageId {
50        self.id
51    }
52
53    /// Status code of the reply message.
54    pub fn code(&self) -> SignalCode {
55        self.code
56    }
57}