use crate::{
traits::{
DecodeWithVersion, DecodeWithVersionWithMemTracking, DispatchInfoOf, DispatchOriginOf,
Dispatchable, Pipeline, PipelineMetadataBuilder, PipelineVersion, PostDispatchInfoOf,
},
transaction_validity::{TransactionSource, TransactionValidityError, ValidTransaction},
};
use codec::Encode;
use core::fmt::Debug;
use scale_info::TypeInfo;
use sp_weights::Weight;
#[derive(Encode, Debug, Clone, Eq, PartialEq, TypeInfo)]
pub enum InvalidVersion {}
impl DecodeWithVersion for InvalidVersion {
fn decode_with_version<I: codec::Input>(
_extension_version: u8,
_input: &mut I,
) -> Result<Self, codec::Error> {
Err(codec::Error::from("Invalid extension version"))
}
}
impl DecodeWithVersionWithMemTracking for InvalidVersion {}
impl<Call: Dispatchable> Pipeline<Call> for InvalidVersion {
fn build_metadata(_builder: &mut PipelineMetadataBuilder) {
}
fn validate_only(
&self,
_origin: DispatchOriginOf<Call>,
_call: &Call,
_info: &DispatchInfoOf<Call>,
_len: usize,
_source: TransactionSource,
) -> Result<ValidTransaction, TransactionValidityError> {
unreachable!()
}
fn dispatch_transaction(
self,
_origin: DispatchOriginOf<Call>,
_call: Call,
_info: &DispatchInfoOf<Call>,
_len: usize,
) -> crate::ApplyExtrinsicResultWithInfo<PostDispatchInfoOf<Call>> {
unreachable!()
}
fn weight(&self, _call: &Call) -> Weight {
unreachable!()
}
}
impl PipelineVersion for InvalidVersion {
fn version(&self) -> u8 {
unreachable!()
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn invalid_version_cannot_be_decoded() {
let mut input = &b""[..];
assert_eq!(
InvalidVersion::decode_with_version(0, &mut input),
Err(codec::Error::from("Invalid extension version"))
);
}
}