use crate::common::error_helpers;
use crate::common::request_helpers::CancellableOneShot;
use crate::messages::{IncomingMessages, ResponseMessage};
use crate::subscriptions::{DecoderContext, StreamDecoder};
use crate::wsh::*;
use crate::Error;
use super::decoders;
impl StreamDecoder<WshEventData> for WshEventData {
const RESPONSE_MESSAGE_IDS: &'static [IncomingMessages] = &[IncomingMessages::WshEventData];
fn decode(_context: &DecoderContext, message: &ResponseMessage) -> Result<Self, Error> {
decoders::decode_wsh_event_data(message.expect_type(IncomingMessages::WshEventData)?)
}
fn cancel_message(_server_version: i32, request_id: Option<i32>, _context: Option<&DecoderContext>) -> Result<Vec<u8>, Error> {
let request_id = error_helpers::require_request_id_for(request_id, "encode cancel wsh event data message")?;
super::encoders::encode_cancel_wsh_event_data(request_id)
}
}
pub(crate) enum WshMetadataRequest {}
impl CancellableOneShot for WshMetadataRequest {
type Proto = crate::proto::WshMetaData;
type Output = WshMetadata;
fn decode(payload: Self::Proto) -> Result<WshMetadata, Error> {
decoders::decode_wsh_metadata_proto(payload)
}
fn cancel(request_id: i32) -> Result<Vec<u8>, Error> {
super::encoders::encode_cancel_wsh_metadata(request_id)
}
}
pub(crate) enum WshEventDataRequest {}
impl CancellableOneShot for WshEventDataRequest {
type Proto = crate::proto::WshEventData;
type Output = WshEventData;
fn decode(payload: Self::Proto) -> Result<WshEventData, Error> {
decoders::decode_wsh_event_data_proto(payload)
}
fn cancel(request_id: i32) -> Result<Vec<u8>, Error> {
super::encoders::encode_cancel_wsh_event_data(request_id)
}
}