// This file is part of Substrate.
// Copyright (C) Parity Technologies (UK) Ltd.
// SPDX-License-Identifier: Apache-2.0
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};
use crate::traits::{
BaseArithmetic, Bounded, CheckedAdd, CheckedMul, CheckedSub, One, SaturatedConversion,
Saturating, UniqueSaturatedInto, Unsigned, Zero,
};
use codec::{CompactAs, Encode};
use num_traits::{Pow, SaturatingAdd, SaturatingSub};
use sp_std::{
fmt, ops,
ops::{Add, Sub},
prelude::*,
};
/// Get the inner type of a `PerThing`.
pub type InnerOf
=
::Inner;
/// Get the upper type of a `PerThing`.
pub type UpperOf
=
::Upper;
pub trait RationalArg:
Clone
+ Ord
+ ops::Div
+ ops::Rem
+ ops::Add
+ ops::AddAssign
+ Unsigned
+ Zero
+ One
+ crate::MultiplyRational
{
}
impl<
T: Clone
+ Ord
+ ops::Div
+ ops::Rem
+ ops::Add
+ ops::AddAssign
+ Unsigned
+ Zero
+ One
+ crate::MultiplyRational,
> RationalArg for T
{
}
pub trait MultiplyArg:
Clone
+ ops::Rem
+ ops::Div
+ ops::Mul
+ ops::Add
+ Unsigned
{
}
impl<
T: Clone
+ ops::Rem
+ ops::Div
+ ops::Mul
+ ops::Add
+ Unsigned,
> MultiplyArg for T
{
}
pub trait ReciprocalArg: MultiplyArg + Saturating {}
impl ReciprocalArg for T {}
/// Something that implements a fixed point ration with an arbitrary granularity `X`, as _parts per
/// `X`_.
pub trait PerThing:
Sized
+ Saturating
+ Copy
+ Default
+ Eq
+ PartialEq
+ Ord
+ PartialOrd
+ Bounded
+ fmt::Debug
+ ops::Div