pub(crate) struct XtazyParts {
pub(crate) _xtazy_version: String,
pub(crate) piko_version: String,
pub(crate) piko_hash: String,
pub(crate) rusttime_version: String,
pub(crate) rusttime_hash: String,
pub(crate) std_version: String,
pub(crate) std_hash: String,
pub(crate) rust_version: String,
pub(crate) rust_hash: String,
pub(crate) fn parse_xtazy_parts(content: &str) -> Result<XtazyParts, String> {
let lines: Vec<&str> = content
.filter(|l| !l.is_empty())
return Err(format!("expected exactly 5 lines, found {}", lines.len()));
// Line 0: xtazy <version>
let p0: Vec<&str> = lines[0].split_whitespace().collect();
if p0.len() != 2 || p0[0] != crate::constants::components::COMPONENT_XTAZY {
"line 1 must start with '{}'",
crate::constants::components::COMPONENT_XTAZY
let xtazy_version = p0[1].to_string();
// Line 1: piko <version> sha256:<hash>
let p1: Vec<&str> = lines[1].split_whitespace().collect();
if p1.len() != 3 || p1[0] != crate::constants::components::COMPONENT_PIKO {
"line 2 must start with '{}'",
crate::constants::components::COMPONENT_PIKO
let piko_version = p1[1].to_string();
let piko_hash = p1[2].to_string();
// Line 2: rusttime <version> sha256:<hash>
let p2: Vec<&str> = lines[2].split_whitespace().collect();
if p2.len() != 3 || p2[0] != crate::constants::components::COMPONENT_RUSTTIME {
"line 3 must start with '{}'",
crate::constants::components::COMPONENT_RUSTTIME
let rusttime_version = p2[1].to_string();
let rusttime_hash = p2[2].to_string();
// Line 3: std <version> sha256:<hash>
let p3: Vec<&str> = lines[3].split_whitespace().collect();
if p3.len() != 3 || p3[0] != crate::constants::components::COMPONENT_STD {
"line 4 must start with '{}'",
crate::constants::components::COMPONENT_STD
let std_version = p3[1].to_string();
let std_hash = p3[2].to_string();
// Line 4: rust <version> sha256:<hash>
let p4: Vec<&str> = lines[4].split_whitespace().collect();
if p4.len() != 3 || p4[0] != crate::constants::components::COMPONENT_RUST {
"line 5 must start with '{}'",
crate::constants::components::COMPONENT_RUST
let rust_version = p4[1].to_string();
let rust_hash = p4[2].to_string();
_xtazy_version: xtazy_version,