// This file is auto-generated. Do not edit. #pragma once #include #include #include #include #include #include #include #include namespace xrpl::ledger_entries { class PayChannelBuilder; /** * @brief Ledger Entry: PayChannel * * Type: ltPAYCHAN (0x0078) * RPC Name: payment_channel * * Immutable wrapper around SLE providing type-safe field access. * Use PayChannelBuilder to construct new ledger entries. */ class PayChannel : public LedgerEntryBase { public: static constexpr LedgerEntryType entryType = ltPAYCHAN; /** * @brief Construct a PayChannel ledger entry wrapper from an existing SLE object. * @throws std::runtime_error if the ledger entry type doesn't match. */ explicit PayChannel(std::shared_ptr sle) : LedgerEntryBase(std::move(sle)) { // Verify ledger entry type if (sle_->getType() != entryType) { throw std::runtime_error("Invalid ledger entry type for PayChannel"); } } // Ledger entry-specific field getters /** * @brief Get sfAccount (soeREQUIRED) * @return The field value. */ [[nodiscard]] SF_ACCOUNT::type::value_type getAccount() const { return this->sle_->at(sfAccount); } /** * @brief Get sfDestination (soeREQUIRED) * @return The field value. */ [[nodiscard]] SF_ACCOUNT::type::value_type getDestination() const { return this->sle_->at(sfDestination); } /** * @brief Get sfSequence (soeOPTIONAL) * @return The field value, or std::nullopt if not present. */ [[nodiscard]] protocol_autogen::Optional getSequence() const { if (hasSequence()) return this->sle_->at(sfSequence); return std::nullopt; } /** * @brief Check if sfSequence is present. * @return True if the field is present, false otherwise. */ [[nodiscard]] bool hasSequence() const { return this->sle_->isFieldPresent(sfSequence); } /** * @brief Get sfAmount (soeREQUIRED) * @return The field value. */ [[nodiscard]] SF_AMOUNT::type::value_type getAmount() const { return this->sle_->at(sfAmount); } /** * @brief Get sfBalance (soeREQUIRED) * @return The field value. */ [[nodiscard]] SF_AMOUNT::type::value_type getBalance() const { return this->sle_->at(sfBalance); } /** * @brief Get sfPublicKey (soeREQUIRED) * @return The field value. */ [[nodiscard]] SF_VL::type::value_type getPublicKey() const { return this->sle_->at(sfPublicKey); } /** * @brief Get sfSettleDelay (soeREQUIRED) * @return The field value. */ [[nodiscard]] SF_UINT32::type::value_type getSettleDelay() const { return this->sle_->at(sfSettleDelay); } /** * @brief Get sfExpiration (soeOPTIONAL) * @return The field value, or std::nullopt if not present. */ [[nodiscard]] protocol_autogen::Optional getExpiration() const { if (hasExpiration()) return this->sle_->at(sfExpiration); return std::nullopt; } /** * @brief Check if sfExpiration is present. * @return True if the field is present, false otherwise. */ [[nodiscard]] bool hasExpiration() const { return this->sle_->isFieldPresent(sfExpiration); } /** * @brief Get sfCancelAfter (soeOPTIONAL) * @return The field value, or std::nullopt if not present. */ [[nodiscard]] protocol_autogen::Optional getCancelAfter() const { if (hasCancelAfter()) return this->sle_->at(sfCancelAfter); return std::nullopt; } /** * @brief Check if sfCancelAfter is present. * @return True if the field is present, false otherwise. */ [[nodiscard]] bool hasCancelAfter() const { return this->sle_->isFieldPresent(sfCancelAfter); } /** * @brief Get sfSourceTag (soeOPTIONAL) * @return The field value, or std::nullopt if not present. */ [[nodiscard]] protocol_autogen::Optional getSourceTag() const { if (hasSourceTag()) return this->sle_->at(sfSourceTag); return std::nullopt; } /** * @brief Check if sfSourceTag is present. * @return True if the field is present, false otherwise. */ [[nodiscard]] bool hasSourceTag() const { return this->sle_->isFieldPresent(sfSourceTag); } /** * @brief Get sfDestinationTag (soeOPTIONAL) * @return The field value, or std::nullopt if not present. */ [[nodiscard]] protocol_autogen::Optional getDestinationTag() const { if (hasDestinationTag()) return this->sle_->at(sfDestinationTag); return std::nullopt; } /** * @brief Check if sfDestinationTag is present. * @return True if the field is present, false otherwise. */ [[nodiscard]] bool hasDestinationTag() const { return this->sle_->isFieldPresent(sfDestinationTag); } /** * @brief Get sfOwnerNode (soeREQUIRED) * @return The field value. */ [[nodiscard]] SF_UINT64::type::value_type getOwnerNode() const { return this->sle_->at(sfOwnerNode); } /** * @brief Get sfPreviousTxnID (soeREQUIRED) * @return The field value. */ [[nodiscard]] SF_UINT256::type::value_type getPreviousTxnID() const { return this->sle_->at(sfPreviousTxnID); } /** * @brief Get sfPreviousTxnLgrSeq (soeREQUIRED) * @return The field value. */ [[nodiscard]] SF_UINT32::type::value_type getPreviousTxnLgrSeq() const { return this->sle_->at(sfPreviousTxnLgrSeq); } /** * @brief Get sfDestinationNode (soeOPTIONAL) * @return The field value, or std::nullopt if not present. */ [[nodiscard]] protocol_autogen::Optional getDestinationNode() const { if (hasDestinationNode()) return this->sle_->at(sfDestinationNode); return std::nullopt; } /** * @brief Check if sfDestinationNode is present. * @return True if the field is present, false otherwise. */ [[nodiscard]] bool hasDestinationNode() const { return this->sle_->isFieldPresent(sfDestinationNode); } }; /** * @brief Builder for PayChannel ledger entries. * * Provides a fluent interface for constructing ledger entries with method chaining. * Uses Json::Value internally for flexible ledger entry construction. * Inherits common field setters from LedgerEntryBuilderBase. */ class PayChannelBuilder : public LedgerEntryBuilderBase { public: /** * @brief Construct a new PayChannelBuilder with required fields. * @param account The sfAccount field value. * @param destination The sfDestination field value. * @param amount The sfAmount field value. * @param balance The sfBalance field value. * @param publicKey The sfPublicKey field value. * @param settleDelay The sfSettleDelay field value. * @param ownerNode The sfOwnerNode field value. * @param previousTxnID The sfPreviousTxnID field value. * @param previousTxnLgrSeq The sfPreviousTxnLgrSeq field value. */ PayChannelBuilder(std::decay_t const& account,std::decay_t const& destination,std::decay_t const& amount,std::decay_t const& balance,std::decay_t const& publicKey,std::decay_t const& settleDelay,std::decay_t const& ownerNode,std::decay_t const& previousTxnID,std::decay_t const& previousTxnLgrSeq) : LedgerEntryBuilderBase(ltPAYCHAN) { setAccount(account); setDestination(destination); setAmount(amount); setBalance(balance); setPublicKey(publicKey); setSettleDelay(settleDelay); setOwnerNode(ownerNode); setPreviousTxnID(previousTxnID); setPreviousTxnLgrSeq(previousTxnLgrSeq); } /** * @brief Construct a PayChannelBuilder from an existing SLE object. * @param sle The existing ledger entry to copy from. * @throws std::runtime_error if the ledger entry type doesn't match. */ PayChannelBuilder(std::shared_ptr sle) { if (sle->at(sfLedgerEntryType) != ltPAYCHAN) { throw std::runtime_error("Invalid ledger entry type for PayChannel"); } object_ = *sle; } /** @brief Ledger entry-specific field setters */ /** * @brief Set sfAccount (soeREQUIRED) * @return Reference to this builder for method chaining. */ PayChannelBuilder& setAccount(std::decay_t const& value) { object_[sfAccount] = value; return *this; } /** * @brief Set sfDestination (soeREQUIRED) * @return Reference to this builder for method chaining. */ PayChannelBuilder& setDestination(std::decay_t const& value) { object_[sfDestination] = value; return *this; } /** * @brief Set sfSequence (soeOPTIONAL) * @return Reference to this builder for method chaining. */ PayChannelBuilder& setSequence(std::decay_t const& value) { object_[sfSequence] = value; return *this; } /** * @brief Set sfAmount (soeREQUIRED) * @return Reference to this builder for method chaining. */ PayChannelBuilder& setAmount(std::decay_t const& value) { object_[sfAmount] = value; return *this; } /** * @brief Set sfBalance (soeREQUIRED) * @return Reference to this builder for method chaining. */ PayChannelBuilder& setBalance(std::decay_t const& value) { object_[sfBalance] = value; return *this; } /** * @brief Set sfPublicKey (soeREQUIRED) * @return Reference to this builder for method chaining. */ PayChannelBuilder& setPublicKey(std::decay_t const& value) { object_[sfPublicKey] = value; return *this; } /** * @brief Set sfSettleDelay (soeREQUIRED) * @return Reference to this builder for method chaining. */ PayChannelBuilder& setSettleDelay(std::decay_t const& value) { object_[sfSettleDelay] = value; return *this; } /** * @brief Set sfExpiration (soeOPTIONAL) * @return Reference to this builder for method chaining. */ PayChannelBuilder& setExpiration(std::decay_t const& value) { object_[sfExpiration] = value; return *this; } /** * @brief Set sfCancelAfter (soeOPTIONAL) * @return Reference to this builder for method chaining. */ PayChannelBuilder& setCancelAfter(std::decay_t const& value) { object_[sfCancelAfter] = value; return *this; } /** * @brief Set sfSourceTag (soeOPTIONAL) * @return Reference to this builder for method chaining. */ PayChannelBuilder& setSourceTag(std::decay_t const& value) { object_[sfSourceTag] = value; return *this; } /** * @brief Set sfDestinationTag (soeOPTIONAL) * @return Reference to this builder for method chaining. */ PayChannelBuilder& setDestinationTag(std::decay_t const& value) { object_[sfDestinationTag] = value; return *this; } /** * @brief Set sfOwnerNode (soeREQUIRED) * @return Reference to this builder for method chaining. */ PayChannelBuilder& setOwnerNode(std::decay_t const& value) { object_[sfOwnerNode] = value; return *this; } /** * @brief Set sfPreviousTxnID (soeREQUIRED) * @return Reference to this builder for method chaining. */ PayChannelBuilder& setPreviousTxnID(std::decay_t const& value) { object_[sfPreviousTxnID] = value; return *this; } /** * @brief Set sfPreviousTxnLgrSeq (soeREQUIRED) * @return Reference to this builder for method chaining. */ PayChannelBuilder& setPreviousTxnLgrSeq(std::decay_t const& value) { object_[sfPreviousTxnLgrSeq] = value; return *this; } /** * @brief Set sfDestinationNode (soeOPTIONAL) * @return Reference to this builder for method chaining. */ PayChannelBuilder& setDestinationNode(std::decay_t const& value) { object_[sfDestinationNode] = value; return *this; } /** * @brief Build and return the completed PayChannel wrapper. * @param index The ledger entry index. * @return The constructed ledger entry wrapper. */ PayChannel build(uint256 const& index) { return PayChannel{std::make_shared(std::move(object_), index)}; } }; } // namespace xrpl::ledger_entries