fixing up errors

This commit is contained in:
keldu.magnus 2021-06-20 13:28:59 +02:00
parent f84b56d42a
commit 92e45d56d6
3 changed files with 18 additions and 2 deletions

View File

@ -99,7 +99,7 @@ public:
template <typename T> class ErrorOr : public ErrorOrValue {
private:
std::variant<FixVoid<T>, Error> value_or_error;
std::variant<Error, FixVoid<T>> value_or_error;
public:
ErrorOr() = default;
@ -127,4 +127,9 @@ public:
}
};
template <typename T> class ErrorOr<ErrorOr<T>> {
private:
ErrorOr() = delete;
};
} // namespace gin

View File

@ -12,7 +12,9 @@ AsyncIoStream::AsyncIoStream(Own<IoStream> str)
.sink()},
read_disconnected{stream->onReadDisconnected()
.then([this]() {
if (read_stepper.on_read_disconnect) {
read_stepper.on_read_disconnect->feed();
}
})
.sink()} {}
@ -24,6 +26,12 @@ Conveyor<size_t> AsyncIoStream::readDone() {
return std::move(caf.conveyor);
}
Conveyor<void> AsyncIoStream::onReadDisconnected() {
auto caf = newConveyorAndFeeder<void>();
read_stepper.on_read_disconnect = std::move(caf.feeder);
return std::move(caf.conveyor);
}
void AsyncIoStream::write(const void *buffer, size_t length) {}
Conveyor<size_t> AsyncIoStream::writeDone() {

View File

@ -48,6 +48,7 @@ public:
virtual void read(void *buffer, size_t min_length, size_t max_length) = 0;
virtual Conveyor<size_t> readDone() = 0;
virtual Conveyor<void> onReadDisconnected() = 0;
};
class AsyncOutputStream {
@ -77,6 +78,8 @@ public:
Conveyor<size_t> readDone() override;
Conveyor<void> onReadDisconnected() override;
void write(const void *buffer, size_t length) override;
Conveyor<size_t> writeDone() override;