blob: 641aa518ad0d33c36b8a2cba9c215303d2c74c37 [file] [log] [blame]
#include "redfish_entity_trie_node.h"
#include <cstddef>
#include <memory>
#include <string>
#include <string_view>
#include <utility>
#include "authorizer_enums.h"
namespace milotic::authz::internal {
// Note in both Get or GetOrDefault, we must check if the current node is a
// collection as any resource collection will only ever have one element inside
// its children map because it is supposed to handle all wildcards to the next
// level. Since it is not necessarily possible to obtain the generic wildcarded
// path, we can just directly return the only element in the children map.
RedfishEntityTrieNode* RedfishEntityTrieNode::GetOrDefaultChild(
std::string_view path) {
if (IsCollection()) {
// If it is a collection node, then there is only 1 child entry which is the
// wildcard
return children_.begin()->second.get();
}
auto it = children_.find(path);
if (it == children_.end()) {
auto [inserted_it, _] = children_.insert(
{std::string(path), std::make_unique<RedfishEntityTrieNode>()});
return inserted_it->second.get();
}
return it->second.get();
}
RedfishEntityTrieNode* RedfishEntityTrieNode::GetChild(
std::string_view path) const {
if (IsCollection()) {
// If it is a collection node, then there is only 1 child entry which is the
// wildcard
return children_.begin()->second.get();
}
auto it = children_.find(path);
if (it == children_.end()) {
return nullptr;
}
return it->second.get();
}
ecclesia::ResourceEntity RedfishEntityTrieNode::GetEntityTag() const {
return entity_tag_;
}
void RedfishEntityTrieNode::SetEntityTag(ecclesia::ResourceEntity tag) {
entity_tag_ = tag;
}
void RedfishEntityTrieNode::SetNodeIndexInPatternArray(std::size_t index) {
node_index_in_pattern_array_ = index;
}
std::size_t RedfishEntityTrieNode::GetNodeIndexInPatternArray() const {
return node_index_in_pattern_array_;
}
bool RedfishEntityTrieNode::IsCollection() const { return collection_; }
void RedfishEntityTrieNode::SetCollection(bool collection) {
collection_ = collection;
}
} // namespace milotic::authz::internal