use pro_env::{
call::{
utils::{
ReturnType,
Set,
},
CallBuilder,
ExecutionInput,
Selector,
},
Environment,
};
use pro_storage::traits::SpreadLayout;
#[doc(hidden)]
pub unsafe trait CheckedProTrait<T> {}
#[doc(hidden)]
pub trait ImpliesReturn<T> {}
impl<T> ImpliesReturn<T> for T {}
impl<T, E, Callee, GasCost, TransferredValue, Args> ImpliesReturn<T>
for CallBuilder<
E,
Callee,
GasCost,
TransferredValue,
Set<ExecutionInput<Args>>,
Set<ReturnType<T>>,
>
where
E: Environment,
{
}
impl<E, Callee, GasCost, TransferredValue, Args> ImpliesReturn<()>
for CallBuilder<
E,
Callee,
GasCost,
TransferredValue,
Set<ExecutionInput<Args>>,
Set<()>,
>
where
E: Environment,
{
}
#[doc(hidden)]
pub trait FnInput {
type Input: scale::Decode + 'static;
}
#[doc(hidden)]
pub trait FnOutput {
type Output: scale::Encode + 'static;
}
#[doc(hidden)]
pub trait FnSelector {
const SELECTOR: Selector;
}
#[doc(hidden)]
pub trait FnState {
type State: SpreadLayout + Sized;
}
#[doc(hidden)]
pub trait Constructor: FnInput + FnSelector + FnState {
const CALLABLE: fn(<Self as FnInput>::Input) -> <Self as FnState>::State;
}
#[doc(hidden)]
pub trait MessageRef: FnInput + FnOutput + FnSelector + FnState {
const CALLABLE: fn(
&<Self as FnState>::State,
<Self as FnInput>::Input,
) -> <Self as FnOutput>::Output;
}
#[doc(hidden)]
pub trait MessageMut: FnInput + FnOutput + FnSelector + FnState {
const CALLABLE: fn(
&mut <Self as FnState>::State,
<Self as FnInput>::Input,
) -> <Self as FnOutput>::Output;
}
#[doc(hidden)]
pub trait True {}