ReUseX
0.0.5
3D Point Cloud Processing for Building Reuse
Toggle main menu visibility
Loading...
Searching...
No Matches
resource_router.hpp
Go to the documentation of this file.
1
// SPDX-FileCopyrightText: 2025 Povl Filip Sonne-Frederiksen
2
//
3
// SPDX-License-Identifier: GPL-3.0-or-later
4
5
#pragma once
6
7
#include "
format_handler.hpp
"
8
#include "
path_parser.hpp
"
9
10
#include <reusex/core/ProjectDB.hpp>
11
12
#include <filesystem>
13
#include <map>
14
#include <memory>
15
#include <string_view>
16
#include <vector>
17
18
namespace
rux::database
{
19
26
class
ResourceRouter
{
27
public
:
28
explicit
ResourceRouter
(std::shared_ptr<reusex::ProjectDB> db) :
db_
(db) {}
29
virtual
~ResourceRouter
() =
default
;
30
38
virtual
DataPayload
get
(
const
std::vector<PathComponent> &components) = 0;
39
47
virtual
void
set
(
const
std::vector<PathComponent> &components,
48
const
DataPayload
&data) = 0;
49
56
virtual
void
del
(
const
std::vector<PathComponent> &components) = 0;
57
66
virtual
std::vector<std::string>
list
()
const
= 0;
67
74
std::optional<std::string>
resolve_index
(
int
index)
const
{
75
auto
items =
list
();
76
if
(index < 0 || index >=
static_cast<
int
>
(items.size())) {
77
return
std::nullopt;
78
}
79
return
items[index];
80
}
81
82
protected
:
83
std::shared_ptr<reusex::ProjectDB>
db_
;
84
};
85
89
class
RouterRegistry
{
90
public
:
94
explicit
RouterRegistry
(std::shared_ptr<reusex::ProjectDB> db);
95
103
ResourceRouter
&
get_router
(std::string_view collection);
104
105
private
:
106
std::shared_ptr<reusex::ProjectDB> db_;
107
std::map<std::string, std::unique_ptr<ResourceRouter>> routers_;
108
};
109
117
std::vector<std::vector<PathComponent>>
118
expand_wildcards
(
const
std::vector<PathComponent> &components,
119
const
ResourceRouter
&router);
120
121
}
// namespace rux::database
rux::database::ResourceRouter
Base interface for resource routers.
Definition
resource_router.hpp:26
rux::database::ResourceRouter::~ResourceRouter
virtual ~ResourceRouter()=default
rux::database::ResourceRouter::set
virtual void set(const std::vector< PathComponent > &components, const DataPayload &data)=0
Set resource data at the given path.
rux::database::ResourceRouter::ResourceRouter
ResourceRouter(std::shared_ptr< reusex::ProjectDB > db)
Definition
resource_router.hpp:28
rux::database::ResourceRouter::del
virtual void del(const std::vector< PathComponent > &components)=0
Delete resource at the given path.
rux::database::ResourceRouter::get
virtual DataPayload get(const std::vector< PathComponent > &components)=0
Get resource data at the given path.
rux::database::ResourceRouter::list
virtual std::vector< std::string > list() const =0
List all items in this collection.
rux::database::ResourceRouter::resolve_index
std::optional< std::string > resolve_index(int index) const
Resolve array index to item name/id.
Definition
resource_router.hpp:74
rux::database::ResourceRouter::db_
std::shared_ptr< reusex::ProjectDB > db_
Definition
resource_router.hpp:83
rux::database::RouterRegistry::get_router
ResourceRouter & get_router(std::string_view collection)
Get router for a collection.
rux::database::RouterRegistry::RouterRegistry
RouterRegistry(std::shared_ptr< reusex::ProjectDB > db)
Create routers for all resource types.
format_handler.hpp
rux::database
Definition
cloud_router.hpp:9
rux::database::DataPayload
std::variant< std::string, std::vector< uint8_t >, nlohmann::json > DataPayload
Data payload that can be returned by routers.
Definition
format_handler.hpp:33
rux::database::expand_wildcards
std::vector< std::vector< PathComponent > > expand_wildcards(const std::vector< PathComponent > &components, const ResourceRouter &router)
Helper to expand wildcards in path components.
path_parser.hpp
apps
rux
include
database
resource_router.hpp
Generated by
1.17.0