| 203 | type Err = anyhow::Error; |
| 204 | |
| 205 | fn from_str(s: &str) -> Result<Self, Self::Err> { |
| 206 | let (target, range) = s.split_once(':').context("No ':' in region string")?; |
| 207 | let (start, end) = range.split_once('-').context("No '-' in region string")?; |
| 208 | let start = start.parse::<i64>().context(format!( |
| 209 | "Could not parse integer from given region start {start}" |
| 210 | ))? - 1; // Compensate 1-based region specification |
| 211 | let end = end.parse::<i64>().context(format!( |
| 212 | "Could not parse integer from given region end {end}" |
| 213 | ))?; // No compensation so the region is fully inclusive |
| 214 | Ok(Region { |
| 215 | target: target.into(), |
| 216 | start, |
| 217 | end, |
| 218 | }) |
| 219 | } |
| 220 | } |
| 221 | |
| 222 | pub(crate) trait FromAround { |