Why rust could deduce the type of `adjusted_fee`

?

And I mock a minimal version, but it can not compile.

```
fn mock1() {
let len_fee: u128 = 50;
let weight_fee: u128 = 50;
let adjustable_fee = len_fee.saturating_add(weight_fee);
println!("adjustable_fee: {:?}", adjustable_fee);
let targeted_fee_adjustment: Multiplier = Multiplier::saturating_from_integer(-1);
println!("targeted_fee_adjustment: {:?}", targeted_fee_adjustment);
let adjusted_fee: u128 =
targeted_fee_adjustment.saturating_mul_acc_int(adjustable_fee.saturated_into());
println!("adjusted_fee: u128: {}", adjusted_fee);
let adjusted_fee: i128 =
targeted_fee_adjustment.saturating_mul_acc_int(adjustable_fee.saturated_into());
println!("adjusted_fee: i128: {}", adjusted_fee);
// FIXME: type annotations needed
// adjusted_fee -> ?
// adjusted_fee.saturated_into() -> u128
//
// ```rust
// let adjusted_fee =
// targeted_fee_adjustment.saturating_mul_acc_int(adjustable_fee.saturated_into());
// let _infer: u128 = 1;
// let _infer: u128 = _infer.saturating_add(adjusted_fee.saturated_into());
// ```
}
fn mock2<T>(len_fee: T, weight_fee: T, base_fee: T) -> T
where
T: sp_runtime::traits::AtLeast32Bit + sp_arithmetic::fixed::FixedPointOperand,
{
let adjustable_fee = len_fee.saturating_add(weight_fee);
let targeted_fee_adjustment: Multiplier = Multiplier::saturating_from_integer(-1);
let adjusted_fee =
targeted_fee_adjustment.saturating_mul_acc_int(adjustable_fee.saturated_into());
base_fee.saturating_add(adjusted_fee)
// FIXME: type annotations needed
// base_fee.saturating_add(adjusted_fee.saturated_into())
}
```