129auto parse(std::string_view text) -> std::optional<engine_version>
134 std::string_view s = trim(strip_optional_v(text));
137 if(!parse_int_token(s, pos,
v.major))
141 if(!expect_char(s, pos,
'.'))
145 if(!parse_int_token(s, pos,
v.minor))
149 if(!expect_char(s, pos,
'.'))
153 if(!parse_int_token(s, pos,
v.patch))
159 if(pos < s.size() && s[pos] ==
'-')
162 if(!parse_int_token(s, pos,
v.commit_count))
168 if(pos < s.size() && s[pos] ==
'-')
171 std::string_view rest = trim(s.substr(pos));
174 v.sha = std::string(rest);
180 if(!trim(s.substr(pos)).empty())