Decentralised Art Server
High-performance C++ backend that exposes HTML interface and a secure REST API for managing Performative Transactions entities
 
Loading...
Searching...
No Matches
connector.hpp
Go to the documentation of this file.
1#pragma once
2#include <algorithm>
3#include <cstdint>
4#include <map>
5#include <ranges>
6#include <string>
7#include <utility>
8#include <vector>
9
10#include <absl/hash/hash.h>
11
12#include "connector.pb.h"
13
14#include "parser.hpp"
15#include "chain.hpp"
16
17namespace dcn
18{
19 template <typename H>
20 inline H AbslHashValue(H h, const TransformationDef & td)
21 {
22 h = H::combine(std::move(h), td.name());
23 for(const int32_t & arg : td.args())
24 {
25 h = H::combine(std::move(h), arg);
26 }
27 return h;
28 }
29
30 template <typename H>
31 inline H AbslHashValue(H h, const Dimension & d)
32 {
33 h = H::combine(std::move(h), d.composite());
34
35 std::vector<std::pair<std::string, std::string>> sorted_bindings;
36 sorted_bindings.reserve(static_cast<std::size_t>(d.bindings_size()));
37 for(const auto & [slot, composite] : d.bindings())
38 {
39 sorted_bindings.emplace_back(slot, composite);
40 }
41 std::ranges::sort(sorted_bindings, [](const auto & lhs, const auto & rhs)
42 {
43 return lhs.first < rhs.first;
44 });
45
46 for(const auto & [slot, composite] : sorted_bindings)
47 {
48 h = H::combine(std::move(h), slot, composite);
49 }
50
51 for(const TransformationDef & t : d.transformations())
52 {
53 h = H::combine(std::move(h), t);
54 }
55 return h;
56 }
57
58 template <typename H>
59 inline H AbslHashValue(H h, const Connector & p)
60 {
61 h = H::combine(std::move(h), p.name());
62
63 for(const Dimension & d : p.dimensions())
64 {
65 h = H::combine(std::move(h), d);
66 }
67
68 h = H::combine(std::move(h), p.condition_name());
69 for(const auto & arg : p.condition_args())
70 {
71 h = H::combine(std::move(h), arg);
72 }
73 return h;
74 }
75
76 parse::Result<std::string> constructConnectorSolidityCode(const Connector & connector);
77}
78
79namespace dcn::pt
80{
82 {
85 std::string name;
87 std::uint32_t dimensions_count{};
88 std::map<std::uint32_t, std::string> composites;
89 std::map<std::pair<std::uint32_t, std::uint32_t>, std::string> bindings;
90 std::string condition_name;
91 std::vector<std::int32_t> condition_args;
92 };
93
94 std::optional<ConnectorAddedEvent> decodeConnectorAddedEvent(
95 const std::uint8_t* data,
96 std::size_t data_size,
97 const evmc::bytes32 topics[],
98 std::size_t num_topics);
99
100 std::optional<ConnectorAddedEvent> decodeConnectorAddedEvent(
101 const std::string & data_hex,
102 const std::vector<std::string> & topics_hex);
103
104}
105
106namespace dcn::parse
107{
108 template<>
109 Result<json> parseToJson(TransformationDef transform_def, use_json_t);
110
111 template<>
112 Result<TransformationDef> parseFromJson(json json_obj, use_json_t);
113
114 template<>
115 Result<json> parseToJson(Dimension dimension, use_json_t);
116
117 template<>
118 Result<Dimension> parseFromJson(json json_obj, use_json_t);
119
120 template<>
121 Result<std::string> parseToJson(Dimension dimension, use_protobuf_t);
122
123 template<>
124 Result<Dimension> parseFromJson(std::string json_str, use_protobuf_t);
125
126 template<>
127 Result<json> parseToJson(Connector connector, use_json_t);
128
129 template<>
130 Result<Connector> parseFromJson(json json_obj, use_json_t);
131
132 template<>
133 Result<std::string> parseToJson(Connector connector, use_protobuf_t);
134
135 template<>
136 Result<Connector> parseFromJson(std::string json_str, use_protobuf_t);
137
138 template<>
139 Result<json> parseToJson(ConnectorRecord connector_record, use_json_t);
140
141 template<>
142 Result<std::string> parseToJson(ConnectorRecord connector_record, use_protobuf_t);
143
144 template<>
145 Result<ConnectorRecord> parseFromJson(json json_obj, use_json_t);
146
147 template<>
148 Result<ConnectorRecord> parseFromJson(std::string json_str, use_protobuf_t);
149}
evmc::address Address
Definition address.hpp:18
Definition http.hpp:190
Result< json > parseToJson(T message, use_json_t)
Converts a T to a JSON object using JSON.
Result< T > parseFromJson(json json, use_json_t)
Converts a JSON string to a T using JSON.
Definition condition.hpp:33
std::optional< ConnectorAddedEvent > decodeConnectorAddedEvent(const std::uint8_t *data, std::size_t data_size, const evmc::bytes32 topics[], std::size_t num_topics)
Definition connector.cpp:351
Definition decentralised_art.hpp:33
parse::Result< std::string > constructConnectorSolidityCode(const Connector &connector)
Definition connector.cpp:70
H AbslHashValue(H h, const Condition &c)
Combines hash values for a Condition object.
Definition condition.hpp:25
nlohmann::json json
Definition parser.hpp:7
Definition connector.hpp:82
std::map< std::pair< std::uint32_t, std::uint32_t >, std::string > bindings
Definition connector.hpp:89
std::vector< std::int32_t > condition_args
Definition connector.hpp:91
std::map< std::uint32_t, std::string > composites
Definition connector.hpp:88
chain::Address caller
Definition connector.hpp:83
std::string name
Definition connector.hpp:85
chain::Address owner
Definition connector.hpp:84
chain::Address connector_address
Definition connector.hpp:86
std::string condition_name
Definition connector.hpp:90
std::uint32_t dimensions_count
Definition connector.hpp:87