16#include "pw_status/try.h"
17#include "pw_stream/stream.h"
36 : writer_(writer), limit_(
limit) {}
39 size_t limit()
const {
return limit_; }
57 size_t remain()
const {
61 if (written_ > limit_) {
64 return limit_ - written_;
69 if (data.size() > remain()) {
70 return Status::OutOfRange();
72 PW_TRY(writer_.
Write(data));
73 written_ += data.size();
79 case LimitType::kRead:
81 case LimitType::kWrite:
Definition: limited_stream.h:27
void set_limit(size_t limit)
Definition: limited_stream.h:45
size_t limit() const
Returns the current limit of this writer.
Definition: limited_stream.h:39
size_t bytes_written() const
Returns the number of bytes written to the stream.
Definition: limited_stream.h:48
Status DoWrite(ConstByteSpan data) override
Virtual Write() function implemented by derived classes.
Definition: limited_stream.h:67
size_t ConservativeLimit(LimitType limit_type) const override
Definition: limited_stream.h:77
LimitedStreamWriter(Writer &writer, size_t limit=kUnlimited)
Definition: limited_stream.h:35
static constexpr size_t kUnlimited
Value returned from read/write limit if unlimited.
Definition: stream.h:66
Status Write(ConstByteSpan data)
Definition: stream.h:192
size_t ConservativeWriteLimit() const
Definition: stream.h:254
constexpr Status OkStatus()
Definition: status.h:235