#ifndef SMO_BODY_THREAD_H
#define SMO_BODY_THREAD_H

#include <boost/asio/io_context.hpp>
#include <spinscale/co/invokers.h>
#include <spinscale/co/postingPromise.h>

namespace smo {
namespace body {

struct BodyThreadTag
{
	static boost::asio::io_context &io_context();
};

template <typename T>
using BodyPostingPromise =
	sscl::co::TaggedPostingPromise<T, BodyThreadTag>;

using BodyNonViralPostingInvoker =
	sscl::co::NonViralPostingInvoker<BodyPostingPromise>;

template <typename T>
using BodyViralPostingInvoker =
	sscl::co::ViralPostingInvoker<BodyPostingPromise, T>;

} // namespace body
} // namespace smo

#endif // SMO_BODY_THREAD_H
