snowbridge_pallet_outbound_queue_v2/
send_message_impl.rs1use super::*;
5use bridge_hub_common::AggregateMessageOrigin;
6use codec::Encode;
7use frame_support::{
8 ensure,
9 traits::{EnqueueMessage, Get},
10};
11use snowbridge_outbound_queue_primitives::{
12 v2::{Message, SendMessage},
13 SendError,
14};
15use sp_core::H256;
16use sp_runtime::BoundedVec;
17
18impl<T> SendMessage for Pallet<T>
19where
20 T: Config,
21{
22 type Ticket = Message;
23
24 fn validate(message: &Message) -> Result<Self::Ticket, SendError> {
25 let payload = message.encode();
27 ensure!(
28 payload.len() < T::MaxMessagePayloadSize::get() as usize,
29 SendError::MessageTooLarge
30 );
31
32 Ok(message.clone())
33 }
34
35 fn deliver(ticket: Self::Ticket) -> Result<H256, SendError> {
36 let origin = AggregateMessageOrigin::SnowbridgeV2(ticket.origin);
37
38 let message =
39 BoundedVec::try_from(ticket.encode()).map_err(|_| SendError::MessageTooLarge)?;
40
41 T::MessageQueue::enqueue_message(message.as_bounded_slice(), origin);
42 Self::deposit_event(Event::MessageQueued { message: ticket.clone() });
43 Ok(ticket.id)
44 }
45}