mirror of
https://github.com/serai-dex/serai.git
synced 2025-01-05 10:29:40 +00:00
b296be8515
* Add SignalsConfig to chain_spec * Correct multiexp feature flagging for rand_core std * Remove bincode for borsh Replaces a non-canonical encoding with a canonical encoding which additionally should be faster. Also fixes an issue where we used bincode in transcripts where it cannot be trusted. This ended up fixing a myriad of other bugs observed, unfortunately. Accordingly, it either has to be merged or the bug fixes from it must be ported to a new PR. * Make serde optional, minimize usage * Make borsh an optional dependency of substrate/ crates * Remove unused dependencies * Use [u8; 64] where possible in the processor messages * Correct borsh feature flagging
43 lines
1.2 KiB
Rust
43 lines
1.2 KiB
Rust
use messages::{ProcessorMessage, CoordinatorMessage};
|
|
|
|
use message_queue::{Service, Metadata, client::MessageQueue};
|
|
|
|
#[derive(Clone, PartialEq, Eq, Debug)]
|
|
pub struct Message {
|
|
pub id: u64,
|
|
pub msg: CoordinatorMessage,
|
|
}
|
|
|
|
#[async_trait::async_trait]
|
|
pub trait Coordinator {
|
|
async fn send(&mut self, msg: impl Send + Into<ProcessorMessage>);
|
|
async fn recv(&mut self) -> Message;
|
|
async fn ack(&mut self, msg: Message);
|
|
}
|
|
|
|
#[async_trait::async_trait]
|
|
impl Coordinator for MessageQueue {
|
|
async fn send(&mut self, msg: impl Send + Into<ProcessorMessage>) {
|
|
let msg: ProcessorMessage = msg.into();
|
|
let metadata = Metadata { from: self.service, to: Service::Coordinator, intent: msg.intent() };
|
|
let msg = borsh::to_vec(&msg).unwrap();
|
|
|
|
self.queue(metadata, msg).await;
|
|
}
|
|
|
|
async fn recv(&mut self) -> Message {
|
|
let msg = self.next(Service::Coordinator).await;
|
|
|
|
let id = msg.id;
|
|
|
|
// Deserialize it into a CoordinatorMessage
|
|
let msg: CoordinatorMessage =
|
|
borsh::from_slice(&msg.msg).expect("message wasn't a borsh-encoded CoordinatorMessage");
|
|
|
|
return Message { id, msg };
|
|
}
|
|
|
|
async fn ack(&mut self, msg: Message) {
|
|
MessageQueue::ack(self, Service::Coordinator, msg.id).await
|
|
}
|
|
}
|