15#ifndef ACTIONENGINE_DISTRIBUTED_SINKS_H_ 
   16#define ACTIONENGINE_DISTRIBUTED_SINKS_H_ 
   22#include "actionengine/data/conversion.h" 
   24namespace act::distributed {
 
   28  virtual ~Sink() = 
default;
 
   29  virtual absl::Status Append(std::string_view s) = 0;
 
   32  absl::Status Append(T&& value) {
 
   33    auto value_str = act::ConvertTo<std::string>(std::forward<T>(value));
 
   34    if (!value_str.ok()) {
 
   35      return value_str.status();
 
   37    return this->Append(*std::move(value_str));
 
   40  [[nodiscard]] 
virtual std::string_view View() 
const = 0;
 
   43class StringSink final : 
public Sink {
 
   45  StringSink() = 
default;
 
   47  explicit StringSink(std::string_view s);
 
   49  absl::Status Append(std::string_view s) 
override;
 
   51  [[nodiscard]] std::string_view View() 
const override;