Files
rippled/include/xrpl/resource/Consumer.h
2026-07-13 10:40:40 +00:00

100 lines
2.0 KiB
C++

#pragma once
#include <xrpl/beast/utility/Journal.h>
#include <xrpl/protocol/PublicKey.h>
#include <xrpl/resource/Charge.h>
#include <xrpl/resource/Disposition.h>
#include <ostream>
#include <string>
namespace xrpl::Resource {
struct Entry;
class Logic;
/**
* An endpoint that consumes resources.
*/
class Consumer
{
private:
friend class Logic;
Consumer(Logic& logic, Entry& entry);
public:
Consumer();
~Consumer();
Consumer(Consumer const& other);
Consumer&
operator=(Consumer const& other);
/**
* Return a human readable string uniquely identifying this consumer.
*/
[[nodiscard]] std::string
toString() const;
/**
* Returns `true` if this is a privileged endpoint.
*/
[[nodiscard]] bool
isUnlimited() const;
/**
* Raise the Consumer's privilege level to a Named endpoint.
* The reference to the original endpoint descriptor is released.
*/
void
elevate(std::string const& name);
/**
* Returns the current disposition of this consumer.
* This should be checked upon creation to determine if the consumer
* should be disconnected immediately.
*/
[[nodiscard]] Disposition
disposition() const;
/**
* Apply a load charge to the consumer.
*/
Disposition
charge(Charge const& fee, std::string const& context = {});
/**
* Returns `true` if the consumer should be warned.
* This consumes the warning.
*/
bool
warn();
/**
* Returns `true` if the consumer should be disconnected.
*/
bool
disconnect(beast::Journal const& j);
/**
* Returns the credit balance representing consumption.
*/
int
balance();
// Private: Retrieve the entry associated with the consumer
Entry&
entry();
void
setPublicKey(PublicKey const& publicKey);
private:
Logic* logic_;
Entry* entry_;
};
std::ostream&
operator<<(std::ostream& os, Consumer const& v);
} // namespace xrpl::Resource