Line data Source code
1 : /**
2 : * Copyright Soramitsu Co., Ltd. All Rights Reserved.
3 : * SPDX-License-Identifier: Apache-2.0
4 : */
5 :
6 : #include "backend/protobuf/proposal.hpp"
7 :
8 : #include "backend/protobuf/transaction.hpp"
9 : #include "backend/protobuf/util.hpp"
10 :
11 : namespace shared_model {
12 : namespace proto {
13 : using namespace interface::types;
14 :
15 : struct Proposal::Impl {
16 : explicit Impl(TransportType &&ref) : proto_(std::move(ref)) {}
17 :
18 : explicit Impl(const TransportType &ref) : proto_(ref) {}
19 :
20 : TransportType proto_;
21 :
22 : const std::vector<proto::Transaction> transactions_{[this] {
23 4225 : return std::vector<proto::Transaction>(
24 4225 : proto_.mutable_transactions()->begin(),
25 4225 : proto_.mutable_transactions()->end());
26 : }()};
27 :
28 : interface::types::BlobType blob_{[this] { return makeBlob(proto_); }()};
29 :
30 3446 : const interface::types::HashType hash_{
31 : [this] { return crypto::DefaultHashProvider::makeHash(blob_); }()};
32 : };
33 :
34 : Proposal::Proposal(Proposal &&o) noexcept = default;
35 :
36 : Proposal::Proposal(const TransportType &ref) {
37 3446 : impl_ = std::make_unique<Proposal::Impl>(ref);
38 3446 : }
39 :
40 : Proposal::Proposal(TransportType &&ref) {
41 779 : impl_ = std::make_unique<Proposal::Impl>(std::move(ref));
42 779 : }
43 :
44 : TransactionsCollectionType Proposal::transactions() const {
45 5802 : return impl_->transactions_;
46 : }
47 :
48 : TimestampType Proposal::createdTime() const {
49 2856 : return impl_->proto_.created_time();
50 : }
51 :
52 : HeightType Proposal::height() const {
53 5848 : return impl_->proto_.height();
54 : }
55 :
56 : const interface::types::BlobType &Proposal::blob() const {
57 0 : return impl_->blob_;
58 : }
59 :
60 : const Proposal::TransportType &Proposal::getTransport() const {
61 1427 : return impl_->proto_;
62 : }
63 :
64 : Proposal::ModelType *Proposal::clone() const {
65 15 : return new Proposal(impl_->proto_);
66 0 : }
67 :
68 : const interface::types::HashType &Proposal::hash() const {
69 0 : return impl_->hash_;
70 : }
71 :
72 : Proposal::~Proposal() = default;
73 :
74 : } // namespace proto
75 : } // namespace shared_model
|