blob: 2c778dfc56b0a5280ec74da4b2a2b83a7be6bed9 [file] [log] [blame]
csharptest2b868842011-06-10 14:41:47 -05001using System;
2using System.Xml;
3
4namespace Google.ProtocolBuffers.Serialization
5{
6 /// <summary>
7 /// Provides a base class for text writers
8 /// </summary>
9 public abstract class AbstractTextWriter : AbstractWriter
10 {
11 /// <summary>
12 /// Encodes raw bytes to be written to the stream
13 /// </summary>
csharptest74c5e0c2011-07-14 13:06:22 -050014 protected virtual string EncodeBytes(ByteString bytes)
15 {
16 return bytes.ToBase64();
17 }
csharptest2b868842011-06-10 14:41:47 -050018
19 /// <summary>
20 /// Writes a typed field as a text value
21 /// </summary>
22 protected abstract void WriteAsText(string field, string textValue, object typedValue);
23
24 /// <summary>
25 /// Writes a String value
26 /// </summary>
csharptest74c5e0c2011-07-14 13:06:22 -050027 protected override void Write(string field, string value)
28 {
29 WriteAsText(field, value, value);
30 }
csharptest2b868842011-06-10 14:41:47 -050031
32 /// <summary>
33 /// Writes a Boolean value
34 /// </summary>
csharptest74c5e0c2011-07-14 13:06:22 -050035 protected override void Write(string field, bool value)
36 {
37 WriteAsText(field, XmlConvert.ToString(value), value);
38 }
csharptest2b868842011-06-10 14:41:47 -050039
40 /// <summary>
41 /// Writes a Int32 value
42 /// </summary>
csharptest74c5e0c2011-07-14 13:06:22 -050043 protected override void Write(string field, int value)
44 {
45 WriteAsText(field, XmlConvert.ToString(value), value);
46 }
csharptest2b868842011-06-10 14:41:47 -050047
48 /// <summary>
49 /// Writes a UInt32 value
50 /// </summary>
51 [CLSCompliant(false)]
csharptest74c5e0c2011-07-14 13:06:22 -050052 protected override void Write(string field, uint value)
53 {
54 WriteAsText(field, XmlConvert.ToString(value), value);
55 }
csharptest2b868842011-06-10 14:41:47 -050056
57 /// <summary>
58 /// Writes a Int64 value
59 /// </summary>
csharptest74c5e0c2011-07-14 13:06:22 -050060 protected override void Write(string field, long value)
61 {
62 WriteAsText(field, XmlConvert.ToString(value), value);
63 }
csharptest2b868842011-06-10 14:41:47 -050064
65 /// <summary>
66 /// Writes a UInt64 value
67 /// </summary>
68 [CLSCompliant(false)]
csharptest74c5e0c2011-07-14 13:06:22 -050069 protected override void Write(string field, ulong value)
70 {
71 WriteAsText(field, XmlConvert.ToString(value), value);
72 }
csharptest2b868842011-06-10 14:41:47 -050073
74 /// <summary>
75 /// Writes a Single value
76 /// </summary>
csharptest74c5e0c2011-07-14 13:06:22 -050077 protected override void Write(string field, float value)
78 {
79 WriteAsText(field, XmlConvert.ToString(value), value);
80 }
csharptest2b868842011-06-10 14:41:47 -050081
82 /// <summary>
83 /// Writes a Double value
84 /// </summary>
csharptest74c5e0c2011-07-14 13:06:22 -050085 protected override void Write(string field, double value)
86 {
87 WriteAsText(field, XmlConvert.ToString(value), value);
88 }
csharptest2b868842011-06-10 14:41:47 -050089
90 /// <summary>
91 /// Writes a set of bytes
92 /// </summary>
csharptest74c5e0c2011-07-14 13:06:22 -050093 protected override void Write(string field, ByteString value)
94 {
95 WriteAsText(field, EncodeBytes(value), value);
96 }
csharptest2b868842011-06-10 14:41:47 -050097
98 /// <summary>
99 /// Writes a System.Enum by the numeric and textual value
100 /// </summary>
csharptest74c5e0c2011-07-14 13:06:22 -0500101 protected override void WriteEnum(string field, int number, string name)
102 {
103 WriteAsText(field, name, number);
104 }
csharptest2b868842011-06-10 14:41:47 -0500105 }
106}