in components/support/firefox-versioning/src/version.rs [140:175]
fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
let num_a_ord = self.num_a.partial_cmp(&other.num_a);
match num_a_ord {
Some(Ordering::Greater) | Some(Ordering::Less) => return num_a_ord,
_ => (),
};
if self.str_b.is_empty() && !other.str_b.is_empty() {
return Some(Ordering::Greater);
} else if other.str_b.is_empty() && !self.str_b.is_empty() {
return Some(Ordering::Less);
}
let str_b_ord = self.str_b.partial_cmp(&other.str_b);
match str_b_ord {
Some(Ordering::Greater) | Some(Ordering::Less) => return str_b_ord,
_ => (),
};
let num_c_ord = self.num_c.partial_cmp(&other.num_c);
match num_c_ord {
Some(Ordering::Greater) | Some(Ordering::Less) => return num_c_ord,
_ => (),
};
if self.extra_d.is_empty() && !other.extra_d.is_empty() {
return Some(Ordering::Greater);
} else if other.extra_d.is_empty() && !self.extra_d.is_empty() {
return Some(Ordering::Less);
}
let extra_d_ord = self.extra_d.partial_cmp(&other.extra_d);
match extra_d_ord {
Some(Ordering::Greater) | Some(Ordering::Less) => return extra_d_ord,
_ => (),
};
Some(Ordering::Equal)
}