1 #pragma once
2 
3 #include <string>
4 
5 namespace minimum_ship_level
6 {
7 
8 /** @brief Version components */
9 struct Version
10 {
11     uint8_t major;
12     uint8_t minor;
13     uint8_t rev;
14 };
15 
16 /** @brief Verify if the current BMC version meets the min ship level
17  *  @return true if the verification succeeded, false otherwise
18  */
19 bool verify(const std::string& versionStr);
20 
21 /** @brief Parse the version components into a struct
22  *  @details User passes a version string in regex format (REGEX_BMC_MSL)
23  *  at compilation time, this value is break down by parse function to allocate
24  *  a struct so it can be compared position by position against the (BMC_MSL)
25  *  also defined at compile time.
26  * @param[in]  versionStr - The version string to be parsed
27  * @param[out] version    - The version struct to be populated
28  */
29 void parse(const std::string& versionStr, Version& version);
30 
31 /** @brief Compare the versions provided
32  *  @param[in] a - The first version to compare
33  *  @param[in] b - The second version to compare
34  *  @return 1 if a > b
35  *          0 if a = b
36  *         -1 if a < b
37  */
38 int compare(const Version& a, const Version& b);
39 
40 } // namespace minimum_ship_level
41