1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#pragma once
#include <lix/libutil/async-io.hh>
#include <lix/libutil/file-descriptor.hh>
#include <cstdio>
#include <string>
#include <string_view>

[[nodiscard]] int tryWriteLine(int fd, std::string s);

class LineReader {
  public:
    LineReader(int fd);
    ~LineReader();

    LineReader(LineReader &&other);
    [[nodiscard]] std::string_view readLine();

  private:
    FILE *stream = nullptr;
    char *buffer = nullptr;
    size_t len = 0;
};

class AsyncLineReader {
public:
    AsyncLineReader(nix::AutoCloseFD fd);

    kj::Promise<nix::Result<std::optional<std::string>>> readLine();

private:
    nix::AsyncFdIoStream stream;
    std::string buffer;
    kj::Array<char> readBuffer;
};