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 evmc::bytes32 format_hash{};
93 };
94
95 std::optional<ConnectorAddedEvent> decodeConnectorAddedEvent(
96 const std::uint8_t* data,
97 std::size_t data_size,
98 const evmc::bytes32 topics[],
99 std::size_t num_topics);
100
101 std::optional<ConnectorAddedEvent> decodeConnectorAddedEvent(
102 const std::string & data_hex,
103 const std::vector<std::string> & topics_hex);
104
105}
106
107namespace dcn::parse
108{
109 template<>
110 Result<json> parseToJson(TransformationDef transform_def, use_json_t);
111
112 template<>
113 Result<TransformationDef> parseFromJson(json json_obj, use_json_t);
114
115 template<>
116 Result<json> parseToJson(Dimension dimension, use_json_t);
117
118 template<>
119 Result<Dimension> parseFromJson(json json_obj, use_json_t);
120
121 template<>
122 Result<std::string> parseToJson(Dimension dimension, use_protobuf_t);
123
124 template<>
125 Result<Dimension> parseFromJson(std::string json_str, use_protobuf_t);
126
127 template<>
128 Result<json> parseToJson(Connector connector, use_json_t);
129
130 template<>
131 Result<Connector> parseFromJson(json json_obj, use_json_t);
132
133 template<>
134 Result<std::string> parseToJson(Connector connector, use_protobuf_t);
135
136 template<>
137 Result<Connector> parseFromJson(std::string json_str, use_protobuf_t);
138
139 template<>
140 Result<json> parseToJson(ConnectorRecord connector_record, use_json_t);
141
142 template<>
143 Result<std::string> parseToJson(ConnectorRecord connector_record, use_protobuf_t);
144
145 template<>
146 Result<ConnectorRecord> parseFromJson(json json_obj, use_json_t);
147
148 template<>
149 Result<ConnectorRecord> parseFromJson(std::string json_str, use_protobuf_t);
150}
evmc::address Address
Definition address.hpp:18
Definition hex.hpp:28
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:401
Definition decentralised_art.hpp:35
parse::Result< std::string > constructConnectorSolidityCode(const Connector &connector)
Definition connector.cpp:71
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
evmc::bytes32 format_hash
Definition connector.hpp:92
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