use crate::sns::report::{SnsNeuronRow, SnsNeuronsCacheSort};
pub(in crate::sns::report) fn sort_sns_neurons(
neurons: &mut [SnsNeuronRow],
sort: SnsNeuronsCacheSort,
) {
match sort {
SnsNeuronsCacheSort::Id => {
neurons.sort_by(|left, right| left.neuron_id.cmp(&right.neuron_id));
}
SnsNeuronsCacheSort::Stake => {
sort_by_descending_value(neurons, |neuron| neuron.cached_neuron_stake_e8s);
}
SnsNeuronsCacheSort::Maturity => {
sort_by_descending_value(neurons, |neuron| neuron.maturity_e8s_equivalent);
}
SnsNeuronsCacheSort::Created => {
sort_by_descending_value(neurons, |neuron| neuron.created_timestamp_seconds);
}
}
}
fn sort_by_descending_value(neurons: &mut [SnsNeuronRow], value: impl Fn(&SnsNeuronRow) -> u64) {
neurons.sort_by(|left, right| {
value(right)
.cmp(&value(left))
.then_with(|| left.neuron_id.cmp(&right.neuron_id))
});
}