/* Copyright (c) 2016 Microsoft Corporation. All rights reserved. Released under Apache 2.0 license as described in the file LICENSE. Author: Gabriel Ebner */ #pragma once #include #include "util/exception.h" #include "library/io_state_stream.h" #include "library/messages.h" namespace lean { /** Buider for a message object. Automatically reports the message on destruction. */ class message_builder { pos_info_provider const * m_pos_info_provider; std::shared_ptr m_tc; std::string m_file_name; pos_info m_pos; message_severity m_severity; std::string m_caption; std::shared_ptr m_text; io_state_stream m_text_stream; public: message_builder(pos_info_provider const * provider, std::shared_ptr const & tc, environment const & env, io_state const & ios, std::string const & file_name, pos_info const & pos, message_severity severity); message_builder(environment const & env, io_state const & ios, std::string const & file_name, pos_info const & pos, message_severity severity); message build(); void report(); message_builder & set_file_name(std::string const & file_name) { m_file_name = file_name; return *this; } message_builder & set_pos(pos_info const & pos) { m_pos = pos; return *this; } message_builder & set_severity(message_severity severity) { m_severity = severity; return *this; } message_builder & set_caption(std::string const & caption) { m_caption = caption; return *this; } formatter const & get_formatter() const { return m_text_stream.get_formatter(); } io_state_stream & get_text_stream() { return m_text_stream; } template message_builder & operator<<(T const & t) { m_text_stream << t; return *this; } message_builder & set_exception(throwable const & ex, bool use_pos = true); }; }