Skip to content

Commit 941579c

Browse files
committed
[proto] Support generate toString method for the proto messages
1 parent 1f9de70 commit 941579c

File tree

15 files changed

+160
-1
lines changed

15 files changed

+160
-1
lines changed

fluss-common/src/main/java/org/apache/fluss/utils/ProtoCodecUtils.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -284,11 +284,21 @@ public static void skipUnknownField(int tag, ByteBuf buffer) {
284284
public static final class StringHolder {
285285
public String s;
286286
public int len;
287+
288+
@Override
289+
public String toString() {
290+
return s;
291+
}
287292
}
288293

289294
/** Holder for a byte array and byte length. */
290295
public static final class BytesHolder {
291296
public byte[] b;
292297
public int len;
298+
299+
@Override
300+
public String toString() {
301+
return "<byte[" + len + "]>";
302+
}
293303
}
294304
}

fluss-protogen/fluss-protogen-generator/src/main/java/org/apache/fluss/protogen/generator/generator/ProtoGenUtil.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import org.apache.fluss.utils.ProtoCodecUtils;
3131

3232
import java.io.PrintWriter;
33+
import java.util.Arrays;
3334

3435
import static org.apache.fluss.shaded.guava32.com.google.common.base.CaseFormat.LOWER_CAMEL;
3536
import static org.apache.fluss.shaded.guava32.com.google.common.base.CaseFormat.LOWER_UNDERSCORE;
@@ -72,7 +73,9 @@ public class ProtoGenUtil {
7273
WritableOutput.class,
7374
// netty dependencies
7475
ByteBuf.class,
75-
Unpooled.class
76+
Unpooled.class,
77+
// util dependencies
78+
Arrays.class
7679
};
7780

7881
public static void printHeader(PrintWriter pw) {

fluss-protogen/fluss-protogen-generator/src/main/java/org/apache/fluss/protogen/generator/generator/ProtobufAbstractRepeated.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,4 +44,10 @@ public void fieldClear(PrintWriter w, String enclosingType) {
4444
w.format(" return this;\n");
4545
w.format(" }\n");
4646
}
47+
48+
@Override
49+
public void stringify(PrintWriter w, String sep) {
50+
w.format(" + \"%s%s=\"\n", sep, pluralName);
51+
w.format(" + %s\n", pluralName);
52+
}
4753
}

fluss-protogen/fluss-protogen-generator/src/main/java/org/apache/fluss/protogen/generator/generator/ProtobufBytesField.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,4 +103,10 @@ public void serialize(PrintWriter w) {
103103
protected String typeTag() {
104104
return "ProtoCodecUtils.WIRETYPE_LENGTH_DELIMITED";
105105
}
106+
107+
@Override
108+
public void stringify(PrintWriter w, String sep) {
109+
w.format(" + \"%s%s=\"\n", sep, ccName);
110+
w.format(" + \"<byte[\" + %s.length + \"]>\"\n", ccName);
111+
}
106112
}

fluss-protogen/fluss-protogen-generator/src/main/java/org/apache/fluss/protogen/generator/generator/ProtobufField.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,4 +171,9 @@ protected String fieldMask() {
171171
protected int bitFieldIndex() {
172172
return index / 32;
173173
}
174+
175+
public void stringify(PrintWriter w, String sep) {
176+
w.format(" + \"%s%s=\"\n", sep, ccName);
177+
w.format(" + %s\n", ccName);
178+
}
174179
}

fluss-protogen/fluss-protogen-generator/src/main/java/org/apache/fluss/protogen/generator/generator/ProtobufMessage.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ public void generate(PrintWriter w) {
103103
generateCheckRequiredFields(w);
104104
generateClear(w);
105105
generateCopyFrom(w);
106+
generateToString(w);
106107

107108
w.println();
108109
w.println(" @Override");
@@ -331,6 +332,23 @@ private void generateCheckRequiredFields(PrintWriter w) {
331332
w.format("}\n");
332333
}
333334

335+
private void generateToString(PrintWriter w) {
336+
w.println();
337+
w.format(" @Override\n");
338+
w.format(" public String toString() {\n");
339+
w.format(" return \"%s{\"\n", message.getName());
340+
341+
boolean first = true;
342+
for (ProtobufField field : fields) {
343+
String sep = first ? "" : ", ";
344+
first = false;
345+
346+
field.stringify(w, sep);
347+
}
348+
w.format(" + '}';\n");
349+
w.format(" }\n");
350+
}
351+
334352
private int bitFieldsCount() {
335353
if (message.getFieldCount() == 0) {
336354
return 0;

fluss-protogen/fluss-protogen-generator/src/main/java/org/apache/fluss/protogen/generator/generator/ProtobufRecordsField.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,4 +194,12 @@ public void serialize(PrintWriter w) {
194194
protected String typeTag() {
195195
return "ProtoCodecUtils.WIRETYPE_LENGTH_DELIMITED";
196196
}
197+
198+
@Override
199+
public void stringify(PrintWriter w, String sep) {
200+
w.format(" + \"%s%s=\"\n", sep, ccName);
201+
w.format(
202+
" + \"<%s[\" + %s.getBytesLength() + \"]>\"\n",
203+
BYTES_VIEW_CLASS, ccName);
204+
}
197205
}

fluss-protogen/fluss-protogen-generator/src/main/java/org/apache/fluss/protogen/generator/generator/ProtobufRepeatedNumberField.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,4 +205,10 @@ public void clear(PrintWriter w) {
205205
protected String typeTag() {
206206
return ProtobufNumberField.typeTag(field);
207207
}
208+
209+
@Override
210+
public void stringify(PrintWriter w, String sep) {
211+
w.format(" + \"%s%s=\"\n", sep, pluralName);
212+
w.format(" + Arrays.toString(%s)\n", pluralName);
213+
}
208214
}

fluss-protogen/fluss-protogen-tests/src/test/java/org/apache/fluss/protogen/tests/AddressBookTest.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,4 +121,19 @@ public void testAddressBook() throws Exception {
121121
assertThat(parsed.getPersonAt(1).getPhoneAt(0).getNumber()).isEqualTo("xxx-zzz-2222");
122122
assertThat(parsed.getPersonAt(1).getPhoneAt(0).getType()).isEqualTo(Person.PhoneType.HOME);
123123
}
124+
125+
@Test
126+
public void testToString() {
127+
AddressBook ab = new AddressBook();
128+
Person p1 = ab.addPerson().setName("name 1").setEmail("[email protected]").setId(5);
129+
p1.addPhone().setNumber("xxx-zzz-1111").setType(Person.PhoneType.HOME);
130+
p1.addPhone().setNumber("xxx-zzz-2222").setType(Person.PhoneType.MOBILE);
131+
132+
Person p2 = ab.addPerson().setName("name 2").setEmail("[email protected]").setId(6);
133+
p2.addPhone().setNumber("xxx-zzz-2222").setType(Person.PhoneType.HOME);
134+
135+
assertThat(ab.toString())
136+
.isEqualTo(
137+
"AddressBook{persons=[Person{name=name 1, id=5, [email protected], phones=[PhoneNumber{number=xxx-zzz-1111, type=HOME}, PhoneNumber{number=xxx-zzz-2222, type=MOBILE}]}, Person{name=name 2, id=6, [email protected], phones=[PhoneNumber{number=xxx-zzz-2222, type=HOME}]}]}");
138+
}
124139
}

fluss-protogen/fluss-protogen-tests/src/test/java/org/apache/fluss/protogen/tests/BytesTest.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -276,4 +276,22 @@ public void testRepeatedBytes() throws Exception {
276276
assertThat(parsed.getExtraItemAt(0)).isEqualTo(new byte[] {1, 2, 3});
277277
assertThat(parsed.getExtraItemAt(1)).isEqualTo(new byte[] {4, 5, 6, 7});
278278
}
279+
280+
@Test
281+
public void testBytesToString() {
282+
B lpb = new B();
283+
lpb.setPayload(new byte[] {1, 2, 3, 4, 5});
284+
lpb.addExtraItem(new byte[] {1, 2, 3});
285+
lpb.addExtraItem(new byte[] {4, 5, 6, 7});
286+
System.out.println(lpb.toString());
287+
288+
// assertThat(lpb.toString()).isEqualTo("B{payload=<byte[5]>, extraItems=null}");
289+
}
290+
291+
@Test
292+
public void testRecordsToString() {
293+
RD lpb = new RD().setRecords(new byte[] {1, 2, 3, 4, 5});
294+
295+
assertThat(lpb.toString()).isEqualTo("RD{records=<BytesView[5]>}");
296+
}
279297
}

0 commit comments

Comments
 (0)