blob: 2d63ef17196befd43763d17cf48f0a1fb61de851 [file] [log] [blame]
package com.google.protobuf;
import com.google.protobuf.Descriptors.FieldDescriptor;
/**
* Provides an explicit API for unstable, redacting debug output suitable for debug logging. This
* implementation is based on TextFormat, but should not be parsed.
*/
public final class DebugFormat {
private final boolean isSingleLine;
private DebugFormat(boolean singleLine) {
isSingleLine = singleLine;
}
public static DebugFormat singleLine() {
return new DebugFormat(true);
}
public static DebugFormat multiline() {
return new DebugFormat(false);
}
public String toString(MessageOrBuilder message) {
return TextFormat.printer()
.emittingSingleLine(this.isSingleLine)
.enablingSafeDebugFormat(true)
.printToString(message);
}
public String toString(FieldDescriptor field, Object value) {
return TextFormat.printer()
.emittingSingleLine(this.isSingleLine)
.enablingSafeDebugFormat(true)
.printFieldToString(field, value);
}
public String toString(UnknownFieldSet fields) {
return TextFormat.printer()
.emittingSingleLine(this.isSingleLine)
.enablingSafeDebugFormat(true)
.printToString(fields);
}
public Object lazyToString(MessageOrBuilder message) {
return new LazyDebugOutput(message, this);
}
public Object lazyToString(UnknownFieldSet fields) {
return new LazyDebugOutput(fields, this);
}
private static class LazyDebugOutput {
private final MessageOrBuilder message;
private final UnknownFieldSet fields;
private final DebugFormat format;
LazyDebugOutput(MessageOrBuilder message, DebugFormat format) {
this.message = message;
this.fields = null;
this.format = format;
}
LazyDebugOutput(UnknownFieldSet fields, DebugFormat format) {
this.message = null;
this.fields = fields;
this.format = format;
}
@Override
public String toString() {
if (message != null) {
return format.toString(message);
}
return format.toString(fields);
}
}
}