use std::{
fs::File,
io::{BufRead, BufReader},
num::ParseIntError,
};
pub const SPEC_VERSION_FIELD: &str = "spec_version:";
pub const GEAR_NODE_SPEC_VERSION_PATTERN: &str = "Native runtime: gear-node-";
pub fn find(f: &File) -> Option<u16> {
let parse_spec_version = |s: String| -> Option<u16> {
s.split_whitespace()
.last()?
.trim_end_matches(',')
.parse()
.ok()
};
for maybe_line in BufReader::new(f).lines() {
let line = maybe_line.ok()?;
if !line.contains(SPEC_VERSION_FIELD) {
continue;
}
if let Some(version) = parse_spec_version(line) {
return Some(version);
}
}
None
}
pub fn parse(line: &str) -> Result<u16, ParseIntError> {
line.split(GEAR_NODE_SPEC_VERSION_PATTERN)
.collect::<Vec<_>>()[1]
.split(|p: char| p.is_whitespace())
.collect::<Vec<_>>()[0]
.parse()
}