ForwardingOutput.java

package io.jstach.rainbowgum.file;

import java.net.URI;
import java.nio.ByteBuffer;

import org.jspecify.annotations.NonNull;
import org.jspecify.annotations.Nullable;

import io.jstach.rainbowgum.LogConfig;
import io.jstach.rainbowgum.LogEncoder;
import io.jstach.rainbowgum.LogEncoder.Buffer;
import io.jstach.rainbowgum.LogEncoder.BufferHints;
import io.jstach.rainbowgum.LogEvent;
import io.jstach.rainbowgum.LogOutput;

interface ForwardingOutput extends LogOutput {

	@Nullable LogOutput delegate();

	@Override
	default void start(LogConfig config) {
		var d = delegate();
		if (d != null) {
			d.start(config);
		}
	}

	@Override
	default void write(@NonNull LogEvent[] events, int count, LogEncoder encoder) {
		var d = delegate();
		if (d != null) {
			d.write(events, count, encoder);
		}
	}

	@Override
	default void write(@NonNull LogEvent[] events, int count, LogEncoder encoder, Buffer buffer) {
		var d = delegate();
		if (d != null) {
			d.write(events, count, encoder, buffer);
		}
	}

	@Override
	default void write(LogEvent event, Buffer buffer) {
		var d = delegate();
		if (d != null) {
			d.write(event, buffer);
		}
	}

	@Override
	default void write(LogEvent event, String s) {
		var d = delegate();
		if (d != null) {
			d.write(event, s);
		}
	}

	@Override
	default void write(LogEvent event, byte[] bytes, ContentType contentType) {
		var d = delegate();
		if (d != null) {
			d.write(event, bytes, contentType);
		}
	}

	@Override
	default void write(LogEvent event, byte[] bytes, int off, int len, ContentType contentType) {
		var d = delegate();
		if (d != null) {
			d.write(event, bytes, off, len, contentType);
		}
	}

	@Override
	default void write(LogEvent event, ByteBuffer buf, ContentType contentType) {
		var d = delegate();
		if (d != null) {
			d.write(event, buf, contentType);
		}
	}

	@Override
	default void flush() {
		var d = delegate();
		if (d != null) {
			d.flush();
		}
	}

	@Override
	default void close() {
		var d = delegate();
		if (d != null) {
			d.close();
		}
	}

	@Override
	public URI uri() throws UnsupportedOperationException;

	@Override
	public OutputType type();

	@Override
	public BufferHints bufferHints();

	@Override
	public void reopen();

}