use crate::ctx::GenContext;
pub fn gen(ctx: &mut GenContext<'_>, buf: &mut String) {
let postal = if let Some(id) = ctx.identity {
&*id.postal
} else {
let loc = ctx.pick_locale();
let i = ctx.rng.urange(0, loc.cities.len() - 1);
loc.cities[i].postal
};
let bytes = postal.as_bytes();
let mut last_digit_pos = bytes.len();
let mut digits_found = 0;
for i in (0..bytes.len()).rev() {
if bytes[i].is_ascii_digit() {
last_digit_pos = i;
digits_found += 1;
if digits_found >= 2 {
break;
}
} else if digits_found > 0 {
break; }
}
if digits_found >= 2 {
buf.push_str(&postal[..last_digit_pos]);
let tag = ctx.rng.record().wrapping_mul(0x9E37_79B9);
buf.push((b'0' + (tag % 10) as u8) as char);
buf.push((b'0' + ((tag / 10) % 10) as u8) as char);
let after = last_digit_pos + 2;
if after < postal.len() {
buf.push_str(&postal[after..]);
}
} else {
buf.push_str(postal);
}
}