/* SPDX-License-Identifier: GPL-2.0 */
/*
 * C++ stream style string formatter and printer used in KUnit for outputting
 * KUnit messages.
 *
 * Copyright (C) 2019, Google LLC.
 * Author: Brendan Higgins <brendanhiggins@google.com>
 */

#ifndef _KUNIT_KUNIT_STREAM_H
#define _KUNIT_KUNIT_STREAM_H

#include <linux/types.h>
#include <kunit/string-stream.h>

struct kunit;

/**
 * struct kunit_stream - a std::stream style string builder.
 *
 * A std::stream style string builder. Allows messages to be built up and
 * printed all at once.
 */
struct kunit_stream {
	/* private: internal use only. */
	struct kunit *test;
	const char *level;
	struct string_stream *internal_stream;
};

/**
 * alloc_kunit_stream() - constructs a new &struct kunit_stream.
 * @test: The test context object.
 * @level: The log level at which to print out the message.
 *
 * Constructs a new test managed &struct kunit_stream.
 */
struct kunit_stream *alloc_kunit_stream(struct kunit *test, const char *level);

/**
 * kunit_stream_add(): adds the formatted input to the internal buffer.
 * @kstream: the stream being operated on.
 * @fmt: printf style format string to append to stream.
 *
 * Appends the formatted string, @fmt, to the internal buffer.
 */
void __printf(2, 3) kunit_stream_add(struct kunit_stream *kstream,
				     const char *fmt, ...);

/**
 * kunit_stream_append(): appends the contents of @other to @kstream.
 * @kstream: the stream to which @other is appended.
 * @other: the stream whose contents are appended to @kstream.
 *
 * Appends the contents of @other to @kstream.
 */
void kunit_stream_append(struct kunit_stream *kstream,
			 struct kunit_stream *other);

/**
 * kunit_stream_commit(): prints out the internal buffer to the user.
 * @kstream: the stream being operated on.
 *
 * Outputs the contents of the internal buffer as a kunit_printk formatted
 * output. KUNIT_STREAM ONLY OUTPUTS ITS BUFFER TO THE USER IF COMMIT IS
 * CALLED!!! The reason for this is that it allows us to construct a message
 * before we know whether we want to print it out; this can be extremely handy
 * if there is information you might need for a failure message that is easiest
 * to collect in the steps leading up to the actual check.
 */
void kunit_stream_commit(struct kunit_stream *kstream);

/**
 * kunit_stream_clear(): clears the internal buffer.
 * @kstream: the stream being operated on.
 *
 * Clears the contents of the internal buffer.
 */
void kunit_stream_clear(struct kunit_stream *kstream);

#endif /* _KUNIT_KUNIT_STREAM_H */
