1 // Protocol Buffers - Google's data interchange format 2 // Copyright 2008 Google Inc. All rights reserved. 3 // 4 // Use of this source code is governed by a BSD-style 5 // license that can be found in the LICENSE file or at 6 // https://developers.google.com/open-source/licenses/bsd 7 8 package com.google.protobuf; 9 10 import java.io.IOException; 11 import java.util.List; 12 import java.util.Map; 13 14 /** A writer that performs serialization of protobuf message fields. */ 15 @ExperimentalApi 16 @CheckReturnValue 17 interface Writer { 18 19 /** The order in which the fields are written by a {@link Writer}. */ 20 enum FieldOrder { 21 /** Fields are written in ascending order by field number. */ 22 ASCENDING, 23 24 /** Fields are written in descending order by field number. */ 25 DESCENDING 26 } 27 28 /** Indicates the order in which the fields are written by this {@link Writer}. */ fieldOrder()29 FieldOrder fieldOrder(); 30 31 /** Writes a field of type {@link FieldType#SFIXED32}. */ writeSFixed32(int fieldNumber, int value)32 void writeSFixed32(int fieldNumber, int value) throws IOException; 33 34 /** Writes a field of type {@link FieldType#INT64}. */ writeInt64(int fieldNumber, long value)35 void writeInt64(int fieldNumber, long value) throws IOException; 36 37 /** Writes a field of type {@link FieldType#SFIXED64}. */ writeSFixed64(int fieldNumber, long value)38 void writeSFixed64(int fieldNumber, long value) throws IOException; 39 40 /** Writes a field of type {@link FieldType#FLOAT}. */ writeFloat(int fieldNumber, float value)41 void writeFloat(int fieldNumber, float value) throws IOException; 42 43 /** Writes a field of type {@link FieldType#DOUBLE}. */ writeDouble(int fieldNumber, double value)44 void writeDouble(int fieldNumber, double value) throws IOException; 45 46 /** Writes a field of type {@link FieldType#ENUM}. */ writeEnum(int fieldNumber, int value)47 void writeEnum(int fieldNumber, int value) throws IOException; 48 49 /** Writes a field of type {@link FieldType#UINT64}. */ writeUInt64(int fieldNumber, long value)50 void writeUInt64(int fieldNumber, long value) throws IOException; 51 52 /** Writes a field of type {@link FieldType#INT32}. */ writeInt32(int fieldNumber, int value)53 void writeInt32(int fieldNumber, int value) throws IOException; 54 55 /** Writes a field of type {@link FieldType#FIXED64}. */ writeFixed64(int fieldNumber, long value)56 void writeFixed64(int fieldNumber, long value) throws IOException; 57 58 /** Writes a field of type {@link FieldType#FIXED32}. */ writeFixed32(int fieldNumber, int value)59 void writeFixed32(int fieldNumber, int value) throws IOException; 60 61 /** Writes a field of type {@link FieldType#BOOL}. */ writeBool(int fieldNumber, boolean value)62 void writeBool(int fieldNumber, boolean value) throws IOException; 63 64 /** Writes a field of type {@link FieldType#STRING}. */ writeString(int fieldNumber, String value)65 void writeString(int fieldNumber, String value) throws IOException; 66 67 /** Writes a field of type {@link FieldType#BYTES}. */ writeBytes(int fieldNumber, ByteString value)68 void writeBytes(int fieldNumber, ByteString value) throws IOException; 69 70 /** Writes a field of type {@link FieldType#UINT32}. */ writeUInt32(int fieldNumber, int value)71 void writeUInt32(int fieldNumber, int value) throws IOException; 72 73 /** Writes a field of type {@link FieldType#SINT32}. */ writeSInt32(int fieldNumber, int value)74 void writeSInt32(int fieldNumber, int value) throws IOException; 75 76 /** Writes a field of type {@link FieldType#SINT64}. */ writeSInt64(int fieldNumber, long value)77 void writeSInt64(int fieldNumber, long value) throws IOException; 78 79 /** Writes a field of type {@link FieldType#MESSAGE}. */ writeMessage(int fieldNumber, Object value)80 void writeMessage(int fieldNumber, Object value) throws IOException; 81 82 /** Writes a field of type {@link FieldType#MESSAGE}. */ writeMessage(int fieldNumber, Object value, Schema schema)83 void writeMessage(int fieldNumber, Object value, Schema schema) throws IOException; 84 85 /** 86 * Writes a field of type {@link FieldType#GROUP}. 87 * 88 * @deprecated groups fields are deprecated. 89 */ 90 @Deprecated writeGroup(int fieldNumber, Object value)91 void writeGroup(int fieldNumber, Object value) throws IOException; 92 93 /** 94 * Writes a field of type {@link FieldType#GROUP}. 95 * 96 * @deprecated groups fields are deprecated. 97 */ 98 @Deprecated writeGroup(int fieldNumber, Object value, Schema schema)99 void writeGroup(int fieldNumber, Object value, Schema schema) throws IOException; 100 101 /** 102 * Writes a single start group tag. 103 * 104 * @deprecated groups fields are deprecated. 105 */ 106 @Deprecated writeStartGroup(int fieldNumber)107 void writeStartGroup(int fieldNumber) throws IOException; 108 109 /** 110 * Writes a single end group tag. 111 * 112 * @deprecated groups fields are deprecated. 113 */ 114 @Deprecated writeEndGroup(int fieldNumber)115 void writeEndGroup(int fieldNumber) throws IOException; 116 117 /** Writes a list field of type {@link FieldType#INT32}. */ writeInt32List(int fieldNumber, List<Integer> value, boolean packed)118 void writeInt32List(int fieldNumber, List<Integer> value, boolean packed) throws IOException; 119 120 /** Writes a list field of type {@link FieldType#FIXED32}. */ writeFixed32List(int fieldNumber, List<Integer> value, boolean packed)121 void writeFixed32List(int fieldNumber, List<Integer> value, boolean packed) throws IOException; 122 123 /** Writes a list field of type {@link FieldType#INT64}. */ writeInt64List(int fieldNumber, List<Long> value, boolean packed)124 void writeInt64List(int fieldNumber, List<Long> value, boolean packed) throws IOException; 125 126 /** Writes a list field of type {@link FieldType#UINT64}. */ writeUInt64List(int fieldNumber, List<Long> value, boolean packed)127 void writeUInt64List(int fieldNumber, List<Long> value, boolean packed) throws IOException; 128 129 /** Writes a list field of type {@link FieldType#FIXED64}. */ writeFixed64List(int fieldNumber, List<Long> value, boolean packed)130 void writeFixed64List(int fieldNumber, List<Long> value, boolean packed) throws IOException; 131 132 /** Writes a list field of type {@link FieldType#FLOAT}. */ writeFloatList(int fieldNumber, List<Float> value, boolean packed)133 void writeFloatList(int fieldNumber, List<Float> value, boolean packed) throws IOException; 134 135 /** Writes a list field of type {@link FieldType#DOUBLE}. */ writeDoubleList(int fieldNumber, List<Double> value, boolean packed)136 void writeDoubleList(int fieldNumber, List<Double> value, boolean packed) throws IOException; 137 138 /** Writes a list field of type {@link FieldType#ENUM}. */ writeEnumList(int fieldNumber, List<Integer> value, boolean packed)139 void writeEnumList(int fieldNumber, List<Integer> value, boolean packed) throws IOException; 140 141 /** Writes a list field of type {@link FieldType#BOOL}. */ writeBoolList(int fieldNumber, List<Boolean> value, boolean packed)142 void writeBoolList(int fieldNumber, List<Boolean> value, boolean packed) throws IOException; 143 144 /** Writes a list field of type {@link FieldType#STRING}. */ writeStringList(int fieldNumber, List<String> value)145 void writeStringList(int fieldNumber, List<String> value) throws IOException; 146 147 /** Writes a list field of type {@link FieldType#BYTES}. */ writeBytesList(int fieldNumber, List<ByteString> value)148 void writeBytesList(int fieldNumber, List<ByteString> value) throws IOException; 149 150 /** Writes a list field of type {@link FieldType#UINT32}. */ writeUInt32List(int fieldNumber, List<Integer> value, boolean packed)151 void writeUInt32List(int fieldNumber, List<Integer> value, boolean packed) throws IOException; 152 153 /** Writes a list field of type {@link FieldType#SFIXED32}. */ writeSFixed32List(int fieldNumber, List<Integer> value, boolean packed)154 void writeSFixed32List(int fieldNumber, List<Integer> value, boolean packed) throws IOException; 155 156 /** Writes a list field of type {@link FieldType#SFIXED64}. */ writeSFixed64List(int fieldNumber, List<Long> value, boolean packed)157 void writeSFixed64List(int fieldNumber, List<Long> value, boolean packed) throws IOException; 158 159 /** Writes a list field of type {@link FieldType#SINT32}. */ writeSInt32List(int fieldNumber, List<Integer> value, boolean packed)160 void writeSInt32List(int fieldNumber, List<Integer> value, boolean packed) throws IOException; 161 162 /** Writes a list field of type {@link FieldType#SINT64}. */ writeSInt64List(int fieldNumber, List<Long> value, boolean packed)163 void writeSInt64List(int fieldNumber, List<Long> value, boolean packed) throws IOException; 164 165 /** Writes a list field of type {@link FieldType#MESSAGE}. */ writeMessageList(int fieldNumber, List<?> value)166 void writeMessageList(int fieldNumber, List<?> value) throws IOException; 167 168 /** Writes a list field of type {@link FieldType#MESSAGE}. */ writeMessageList(int fieldNumber, List<?> value, Schema schema)169 void writeMessageList(int fieldNumber, List<?> value, Schema schema) throws IOException; 170 171 /** 172 * Writes a list field of type {@link FieldType#GROUP}. 173 * 174 * @deprecated groups fields are deprecated. 175 */ 176 @Deprecated writeGroupList(int fieldNumber, List<?> value)177 void writeGroupList(int fieldNumber, List<?> value) throws IOException; 178 179 /** 180 * Writes a list field of type {@link FieldType#GROUP}. 181 * 182 * @deprecated groups fields are deprecated. 183 */ 184 @Deprecated writeGroupList(int fieldNumber, List<?> value, Schema schema)185 void writeGroupList(int fieldNumber, List<?> value, Schema schema) throws IOException; 186 187 /** 188 * Writes a message field in {@code MessageSet} wire-format. 189 * 190 * @param value A message instance or an opaque {@link ByteString} for an unknown field. 191 */ writeMessageSetItem(int fieldNumber, Object value)192 void writeMessageSetItem(int fieldNumber, Object value) throws IOException; 193 194 /** Writes a map field. */ writeMap(int fieldNumber, MapEntryLite.Metadata<K, V> metadata, Map<K, V> map)195 <K, V> void writeMap(int fieldNumber, MapEntryLite.Metadata<K, V> metadata, Map<K, V> map) 196 throws IOException; 197 } 198