6 #ifndef IROHA_PROTO_TRANSPORT_FACTORY_HPP 7 #define IROHA_PROTO_TRANSPORT_FACTORY_HPP 16 #pragma push_macro("GetMessage") 23 template <
typename Interface,
typename Proto>
26 typename Proto::TransportType> {
30 typename Proto::TransportType>::Error;
35 typename Proto::TransportType>>;
39 : interface_validator_(
std::move(interface_validator)),
40 proto_validator_{std::move(proto_validator)} {}
43 typename Proto::TransportType m)
const override {
44 if (
auto error = proto_validator_->validate(m)) {
45 auto payload_field_descriptor =
46 m.GetDescriptor()->FindFieldByLowercaseName(
"payload");
48 if (payload_field_descriptor) {
50 m.GetReflection()->GetMessage(m, payload_field_descriptor);
55 return iroha::expected::makeError(Error{
hash, error->toString()});
58 std::unique_ptr<Interface> result =
59 std::make_unique<Proto>(std::move(m));
60 if (
auto error = interface_validator_->validate(*result)) {
61 return iroha::expected::makeError(
62 Error{result->hash(), error->toString()});
65 return iroha::expected::makeValue(std::move(result));
79 #pragma pop_macro("GetMessage") 82 #endif // IROHA_PROTO_TRANSPORT_FACTORY_HPP std::shared_ptr< shared_model::validation::AbstractValidator< typename Proto::TransportType > > ProtoValidatorType
Definition: proto_transport_factory.hpp:35
Definition: sha3_256.hpp:15
Definition: abstract_validator.hpp:17
Definition: result_fwd.hpp:27
ProtoTransportFactory(ValidatorType interface_validator, ProtoValidatorType proto_validator)
Definition: proto_transport_factory.hpp:37
crypto::Blob makeBlob(T &&message)
Definition: util.hpp:17
hash256_t hash(const T &pb)
Definition: pb_common.hpp:43
iroha::expected::Result< std::unique_ptr< Interface >, Error > build(typename Proto::TransportType m) const override
Definition: proto_transport_factory.hpp:42
static Hash makeHash(const Blob &blob)
Definition: sha3_256.hpp:18
Definition: proto_transport_factory.hpp:24
Definition: command_executor.hpp:12
Definition: query_service.hpp:24
std::unique_ptr< shared_model::validation::AbstractValidator< Interface > > ValidatorType
Definition: proto_transport_factory.hpp:32