pub struct Runtime;
Implementations§
source§impl Runtime
impl Runtime
pub fn metadata() -> RuntimeMetadataPrefixed
pub fn metadata_at_version(version: u32) -> Option<OpaqueMetadata>
pub fn metadata_versions() -> Vec<u32>
Trait Implementations§
source§impl CallerTrait<<Runtime as Config>::AccountId> for OriginCaller
impl CallerTrait<<Runtime as Config>::AccountId> for OriginCaller
source§fn into_system(self) -> Option<RawOrigin<<Runtime as Config>::AccountId>>
fn into_system(self) -> Option<RawOrigin<<Runtime as Config>::AccountId>>
Extract the signer from the message if it is a
Signed
origin.source§fn as_system_ref(&self) -> Option<&RawOrigin<<Runtime as Config>::AccountId>>
fn as_system_ref(&self) -> Option<&RawOrigin<<Runtime as Config>::AccountId>>
Extract a reference to the system-level
RawOrigin
if it is that.source§fn as_signed(&self) -> Option<&AccountId>
fn as_signed(&self) -> Option<&AccountId>
Extract the signer from it if a system
Signed
origin, None
otherwise.source§impl Config for Runtime
impl Config for Runtime
§type RuntimeEvent = RuntimeEvent
type RuntimeEvent = RuntimeEvent
The overarching event type.
§type HeapSize = MessageQueueHeapSize
type HeapSize = MessageQueueHeapSize
The size of the page; this implies the maximum message size which can be sent. Read more
§type MaxStale = MessageQueueMaxStale
type MaxStale = MessageQueueMaxStale
The maximum number of stale pages (i.e. of overweight messages) allowed before culling
can happen. Once there are more stale pages than this, then historical pages may be
dropped, even if they contain unprocessed overweight messages.
§type ServiceWeight = MessageQueueServiceWeight
type ServiceWeight = MessageQueueServiceWeight
The amount of weight (if any) which should be provided to the message queue for
servicing enqueued items. Read more
§type MessageProcessor = MessageProcessor
type MessageProcessor = MessageProcessor
Processor for a message. Read more
§type QueueChangeHandler = ()
type QueueChangeHandler = ()
Code to be called when a message queue changes - either with items introduced or
removed.
§type WeightInfo = ()
type WeightInfo = ()
Weight information for extrinsics in this pallet.
§type QueuePausedQuery = ()
type QueuePausedQuery = ()
Queried by the pallet to check whether a queue can be serviced. Read more
source§impl Config for Runtime
impl Config for Runtime
§type MaxLocks = MaxLocks
type MaxLocks = MaxLocks
The maximum number of locks that should exist on an account.
Not strictly enforced, but used for weight estimation.
§type RuntimeEvent = RuntimeEvent
type RuntimeEvent = RuntimeEvent
The overarching event type.
§type DustRemoval = ()
type DustRemoval = ()
Handler for the unbalanced reduction when removing a dust account.
§type ExistentialDeposit = ExistentialDeposit
type ExistentialDeposit = ExistentialDeposit
The minimum amount required to keep an account open. MUST BE GREATER THAN ZERO! Read more
§type AccountStore = Pallet<Runtime>
type AccountStore = Pallet<Runtime>
The means of storing the balances of an account.
§type WeightInfo = ()
type WeightInfo = ()
Weight information for extrinsics in this pallet.
§type MaxReserves = MaxReserves
type MaxReserves = MaxReserves
The maximum number of named reserves that can exist on an account.
§type ReserveIdentifier = [u8; 8]
type ReserveIdentifier = [u8; 8]
The ID type for reserves. Read more
§type FreezeIdentifier = ()
type FreezeIdentifier = ()
The ID type for freezes.
§type MaxFreezes = ConstU32<0>
type MaxFreezes = ConstU32<0>
The maximum number of individual freeze locks that can exist on an account at any time.
§type RuntimeHoldReason = RuntimeHoldReason
type RuntimeHoldReason = RuntimeHoldReason
The overarching hold reason.
§type RuntimeFreezeReason = RuntimeFreezeReason
type RuntimeFreezeReason = RuntimeFreezeReason
The overarching freeze reason.
source§impl Config for Runtime
impl Config for Runtime
§type WeightInfo = TestWeightInfo
type WeightInfo = TestWeightInfo
Weight information for extrinsics in this pallet.
source§impl Config for Runtime
impl Config for Runtime
§type RuntimeEvent = RuntimeEvent
type RuntimeEvent = RuntimeEvent
The overarching event type.
§type SendXcmOrigin = EnsureXcmOrigin<RuntimeOrigin, SignedToAccountId32<RuntimeOrigin, AccountId32, RelayNetwork>>
type SendXcmOrigin = EnsureXcmOrigin<RuntimeOrigin, SignedToAccountId32<RuntimeOrigin, AccountId32, RelayNetwork>>
Required origin for sending XCM messages. If successful, it resolves to
MultiLocation
which exists as an interior location within this chain’s XCM context.§type XcmRouter = RelayChainXcmRouter
type XcmRouter = RelayChainXcmRouter
The type used to actually dispatch an XCM to its destination.
§type ExecuteXcmOrigin = EnsureXcmOrigin<RuntimeOrigin, SignedToAccountId32<RuntimeOrigin, AccountId32, RelayNetwork>>
type ExecuteXcmOrigin = EnsureXcmOrigin<RuntimeOrigin, SignedToAccountId32<RuntimeOrigin, AccountId32, RelayNetwork>>
Required origin for executing XCM messages, including the teleport functionality. If
successful, then it resolves to
MultiLocation
which exists as an interior location
within this chain’s XCM context.§type XcmExecuteFilter = Everything
type XcmExecuteFilter = Everything
Our XCM filter which messages to be executed using
XcmExecutor
must pass.§type XcmExecutor = XcmExecutor<XcmConfig>
type XcmExecutor = XcmExecutor<XcmConfig>
Something to execute an XCM message.
§type XcmTeleportFilter = Everything
type XcmTeleportFilter = Everything
Our XCM filter which messages to be teleported using the dedicated extrinsic must pass.
§type XcmReserveTransferFilter = Everything
type XcmReserveTransferFilter = Everything
Our XCM filter which messages to be reserve-transferred using the dedicated extrinsic
must pass.
§type Weigher = FixedWeightBounds<XcmInstructionWeight, RuntimeCall, MaxInstructions>
type Weigher = FixedWeightBounds<XcmInstructionWeight, RuntimeCall, MaxInstructions>
Means of measuring the weight consumed by an XCM message locally.
§type UniversalLocation = UniversalLocation
type UniversalLocation = UniversalLocation
This chain’s Universal Location.
§type RuntimeOrigin = RuntimeOrigin
type RuntimeOrigin = RuntimeOrigin
The runtime
Origin
type.§type RuntimeCall = RuntimeCall
type RuntimeCall = RuntimeCall
The runtime
Call
type.const VERSION_DISCOVERY_QUEUE_SIZE: u32 = 100u32
§type AdvertisedXcmVersion = CurrentXcmVersion
type AdvertisedXcmVersion = CurrentXcmVersion
The latest supported version that we advertise. Generally just set it to
pallet_xcm::CurrentXcmVersion
.§type CurrencyMatcher = IsConcrete<TokenLocation>
type CurrencyMatcher = IsConcrete<TokenLocation>
The
MultiAsset
matcher for Currency
.§type TrustedLockers = ()
type TrustedLockers = ()
The assets which we consider a given origin is trusted if they claim to have placed a
lock.
§type SovereignAccountOf = (HashedDescription<AccountId32, DescribeFamily<(DescribeTerminus, DescribePalletTerminal, DescribeAccountId32Terminal, DescribeAccountKey20Terminal, DescribeTreasuryVoiceTerminal, DescribeBodyTerminal)>>, AccountId32Aliases<RelayNetwork, AccountId32>, ChildParachainConvertsVia<Id, AccountId32>)
type SovereignAccountOf = (HashedDescription<AccountId32, DescribeFamily<(DescribeTerminus, DescribePalletTerminal, DescribeAccountId32Terminal, DescribeAccountKey20Terminal, DescribeTreasuryVoiceTerminal, DescribeBodyTerminal)>>, AccountId32Aliases<RelayNetwork, AccountId32>, ChildParachainConvertsVia<Id, AccountId32>)
How to get an
AccountId
value from a MultiLocation
, useful for handling asset locks.§type MaxLockers = ConstU32<8>
type MaxLockers = ConstU32<8>
The maximum number of local XCM locks that a single account may have.
§type MaxRemoteLockConsumers = ConstU32<0>
type MaxRemoteLockConsumers = ConstU32<0>
The maximum number of consumers a single remote lock may have.
§type RemoteLockConsumerIdentifier = ()
type RemoteLockConsumerIdentifier = ()
The ID type for local consumers of remote locks.
§type WeightInfo = TestWeightInfo
type WeightInfo = TestWeightInfo
Weight information for extrinsics in this pallet.
§type AdminOrigin = EnsureRoot<AccountId32>
type AdminOrigin = EnsureRoot<AccountId32>
The origin that is allowed to call privileged operations on the XCM pallet
source§impl Config for Runtime
impl Config for Runtime
§type RuntimeOrigin = RuntimeOrigin
type RuntimeOrigin = RuntimeOrigin
The
RuntimeOrigin
type used by dispatchable calls.§type RuntimeCall = RuntimeCall
type RuntimeCall = RuntimeCall
The aggregated
RuntimeCall
type.§type Block = Block<Header<u64, BlakeTwo256>, UncheckedExtrinsic<<Runtime as Config>::AccountId, <Runtime as Config>::RuntimeCall, (), ()>>
type Block = Block<Header<u64, BlakeTwo256>, UncheckedExtrinsic<<Runtime as Config>::AccountId, <Runtime as Config>::RuntimeCall, (), ()>>
The Block type used by the runtime. This is used by
construct_runtime
to retrieve the
extrinsics or other block specific data as needed.§type Hashing = BlakeTwo256
type Hashing = BlakeTwo256
The hashing system (algorithm) being used in the runtime (e.g. Blake2).
§type AccountId = AccountId32
type AccountId = AccountId32
The user account identifier type for the runtime.
§type Lookup = IdentityLookup<<Runtime as Config>::AccountId>
type Lookup = IdentityLookup<<Runtime as Config>::AccountId>
Converting trait to take a source type and convert to
AccountId
. Read more§type RuntimeEvent = RuntimeEvent
type RuntimeEvent = RuntimeEvent
The aggregated event type of the runtime.
§type BlockHashCount = BlockHashCount
type BlockHashCount = BlockHashCount
Maximum number of block number to block hash mappings to keep (oldest pruned first).
§type BlockWeights = ()
type BlockWeights = ()
Block & extrinsics weights: base values and limits.
§type BlockLength = ()
type BlockLength = ()
The maximum length of a block (in bytes).
§type PalletInfo = PalletInfo
type PalletInfo = PalletInfo
Provides information about the pallet setup in the runtime. Read more
§type AccountData = AccountData<u128>
type AccountData = AccountData<u128>
Data to be associated with an account (other than nonce/transaction counter, which this
pallet does regardless).
§type OnNewAccount = ()
type OnNewAccount = ()
Handler for when a new account has just been created.
§type OnKilledAccount = ()
type OnKilledAccount = ()
A function that is invoked when an account has been determined to be dead. Read more
§type BaseCallFilter = Everything
type BaseCallFilter = Everything
The basic call filter to use in Origin. All origins are built with this filter as base,
except Root. Read more
type SystemWeightInfo = ()
§type SS58Prefix = ()
type SS58Prefix = ()
The designated SS58 prefix of this chain. Read more
§type MaxConsumers = ConstU32<16>
type MaxConsumers = ConstU32<16>
The maximum number of consumers allowed on a single account.
§type RuntimeTask = RuntimeTask
type RuntimeTask = RuntimeTask
The aggregated
RuntimeTask
type.source§impl GetRuntimeBlockType for Runtime
impl GetRuntimeBlockType for Runtime
§type RuntimeBlock = <Runtime as Config>::Block
type RuntimeBlock = <Runtime as Config>::Block
The
RuntimeBlock
type.source§impl PartialEq for Runtime
impl PartialEq for Runtime
source§impl ValidateUnsigned for Runtime
impl ValidateUnsigned for Runtime
§type Call = RuntimeCall
type Call = RuntimeCall
The call to validate
source§fn pre_dispatch(call: &Self::Call) -> Result<(), TransactionValidityError>
fn pre_dispatch(call: &Self::Call) -> Result<(), TransactionValidityError>
Validate the call right before dispatch. Read more
source§fn validate_unsigned(
source: TransactionSource,
call: &Self::Call
) -> TransactionValidity
fn validate_unsigned( source: TransactionSource, call: &Self::Call ) -> TransactionValidity
Return the validity of the call Read more
impl Config for Runtime
impl Config for Runtime
impl Copy for Runtime
impl Eq for Runtime
impl StructuralPartialEq for Runtime
Auto Trait Implementations§
impl RefUnwindSafe for Runtime
impl Send for Runtime
impl Sync for Runtime
impl Unpin for Runtime
impl UnwindSafe for Runtime
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
source§impl<T> CheckedConversion for T
impl<T> CheckedConversion for T
§impl<T> Conv for T
impl<T> Conv for T
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Convert
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Convert
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
Convert
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
Convert
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.§impl<T> DowncastSync for T
impl<T> DowncastSync for T
source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
Compare self to
key
and return true
if they are equal.§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
Checks if this value is equivalent to the given key. Read more
§impl<T> FmtForward for T
impl<T> FmtForward for T
§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
Causes
self
to use its Binary
implementation when Debug
-formatted.§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
Causes
self
to use its Display
implementation when
Debug
-formatted.§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
Causes
self
to use its LowerExp
implementation when
Debug
-formatted.§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
Causes
self
to use its LowerHex
implementation when
Debug
-formatted.§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
Causes
self
to use its Octal
implementation when Debug
-formatted.§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
Causes
self
to use its Pointer
implementation when
Debug
-formatted.§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
Causes
self
to use its UpperExp
implementation when
Debug
-formatted.§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
Causes
self
to use its UpperHex
implementation when
Debug
-formatted.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
Formats each item in a sequence. Read more
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T, Outer> IsWrappedBy<Outer> for T
impl<T, Outer> IsWrappedBy<Outer> for T
§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Pipes by value. This is generally the method you want to use. Read more
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
Borrows
self
and passes that borrow into the pipe function. Read more§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
Mutably borrows
self
and passes that borrow into the pipe function. Read more§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R ) -> R
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
Borrows
self
, then passes self.as_ref()
into the pipe function.§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
Mutably borrows
self
, then passes self.as_mut()
into the pipe
function.§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
Borrows
self
, then passes self.deref()
into the pipe function.§impl<T> SaturatedConversion for T
impl<T> SaturatedConversion for T
§fn saturated_from<T>(t: T) -> Selfwhere
Self: UniqueSaturatedFrom<T>,
fn saturated_from<T>(t: T) -> Selfwhere
Self: UniqueSaturatedFrom<T>,
§fn saturated_into<T>(self) -> Twhere
Self: UniqueSaturatedInto<T>,
fn saturated_into<T>(self) -> Twhere
Self: UniqueSaturatedInto<T>,
Consume self to return an equivalent value of
T
. Read more§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Immutable access to the
Borrow<B>
of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
Mutable access to the
BorrowMut<B>
of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
Immutable access to the
AsRef<R>
view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
Mutable access to the
AsMut<R>
view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Immutable access to the
Deref::Target
of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Mutable access to the
Deref::Target
of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
Calls
.tap()
only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
Calls
.tap_mut()
only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
Calls
.tap_borrow()
only in debug builds, and is erased in release
builds.§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
Calls
.tap_borrow_mut()
only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
Calls
.tap_ref()
only in debug builds, and is erased in release
builds.§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
Calls
.tap_ref_mut()
only in debug builds, and is erased in release
builds.§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
Calls
.tap_deref()
only in debug builds, and is erased in release
builds.§impl<T> TryConv for T
impl<T> TryConv for T
source§impl<S, T> UncheckedInto<T> for Swhere
T: UncheckedFrom<S>,
impl<S, T> UncheckedInto<T> for Swhere
T: UncheckedFrom<S>,
source§fn unchecked_into(self) -> T
fn unchecked_into(self) -> T
The counterpart to
unchecked_from
.§impl<T, S> UniqueSaturatedInto<T> for S
impl<T, S> UniqueSaturatedInto<T> for S
§fn unique_saturated_into(self) -> T
fn unique_saturated_into(self) -> T
Consume self to return an equivalent value of
T
.