Placing an arbitrary limit of 21m btc on the Amount type makes it impossible to be used to represent added values. Like "total received by address" which many RPC APIs provide. It also makes it impossible to parse transactions that core can correctly parse.
Also this seems to be recently changed as the current API does not return an error on Amount::from_sat.
I will be making a PR to revert this change as I think it makes no sense.