blob: b6ba876183898c3d52e8e548ea97973f4ae10a78 [file] [log] [blame]
#ifndef THIRD_PARTY_MILOTIC_EXTERNAL_CC_TLBMC_REDFISH_QUERY_PARAMETERS_H_
#define THIRD_PARTY_MILOTIC_EXTERNAL_CC_TLBMC_REDFISH_QUERY_PARAMETERS_H_
#include <cstdint>
#include <string>
#include <vector>
#include "absl/status/statusor.h"
#include "absl/strings/str_cat.h"
#include "boost/url/params_view.hpp"
#include "nlohmann/json.hpp"
namespace milotic_tlbmc {
struct ExpandNode {
nlohmann::json::json_pointer json_pointer;
std::string url;
std::string DebugString() const {
return absl::StrCat(json_pointer.to_string(), ":", url);
}
bool operator==(const ExpandNode& other) const {
return json_pointer == other.json_pointer && url == other.url;
}
};
enum class ExpandType : std::uint8_t {
kNone = 0,
kNoLinks,
kLinksOnly,
kAll,
};
struct ExpandInfo {
int expand_level = 0;
ExpandType expand_type = ExpandType::kNone;
};
std::string ExpandTypeToUrlParam(ExpandType expand_type);
class QueryParameters {
public:
QueryParameters() = default;
static absl::StatusOr<QueryParameters> Create(
boost::urls::params_view query_parameters);
void SetExpandLevel(int expand_level) {
expand_info_.expand_level = expand_level;
}
void SetExpandType(ExpandType expand_type) {
expand_info_.expand_type = expand_type;
}
int GetExpandLevel() const { return expand_info_.expand_level; }
ExpandType GetExpandType() const { return expand_info_.expand_type; }
private:
ExpandInfo expand_info_;
};
// Helper method to extract all unexpanded URLs from a RedfishResponse Json.
std::vector<ExpandNode> GetUnexpandedUrls(const nlohmann::json& resp,
ExpandType expand_type);
} // namespace milotic_tlbmc
#endif // THIRD_PARTY_MILOTIC_EXTERNAL_CC_TLBMC_REDFISH_QUERY_PARAMETERS_H_