• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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