use std::sync::mpsc; use satrs::{ pus::EcssTmSender, queue::GenericSendError, spacepackets::ecss::WritablePusPacket, tmtc::{PacketAsVec, PacketSenderWithSharedPool}, }; #[allow(dead_code)] #[derive(Debug, Clone)] pub enum TmSender { Static(PacketSenderWithSharedPool), Heap(mpsc::SyncSender), } impl EcssTmSender for TmSender { fn send_tm( &self, sender_id: satrs::ComponentId, tm: satrs::pus::PusTmVariant, ) -> Result<(), satrs::pus::EcssTmtcError> { match self { TmSender::Static(sync_sender) => sync_sender.send_tm(sender_id, tm), TmSender::Heap(sync_sender) => match tm { satrs::pus::PusTmVariant::InStore(_) => panic!("can not send TM in store"), satrs::pus::PusTmVariant::Direct(pus_tm_creator) => sync_sender .send(PacketAsVec::new(sender_id, pus_tm_creator.to_vec()?)) .map_err(|_| GenericSendError::RxDisconnected.into()), }, } } }