Skip to content

Commit 5625daa

Browse files
committed
Include Dropbox Business endpoints.
1 parent 42b7546 commit 5625daa

File tree

235 files changed

+41029
-736
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

235 files changed

+41029
-736
lines changed

Dropbox.Api/Babel/Decoder.cs

Lines changed: 85 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,43 @@ public static IDecoder<List<T>> CreateListDecoder<T>(IDecoder<T> itemDecoder)
2626
}
2727
}
2828

29+
/// <summary>
30+
/// Decoder for nullable struct.
31+
/// </summary>
32+
/// <typeparam name="T">Type of the struct.</typeparam>
33+
internal sealed class NullableDecoder<T> : IDecoder<T?> where T : struct
34+
{
35+
/// <summary>
36+
/// The decoder.
37+
/// </summary>
38+
private readonly IDecoder<T> decoder;
39+
40+
/// <summary>
41+
/// Initializes a new instance of the <see cref="NullableDecoder{T}"/>
42+
/// </summary>
43+
/// <param name="decoder">The decoder.</param>
44+
public NullableDecoder(IDecoder<T> decoder)
45+
{
46+
this.decoder = decoder;
47+
}
48+
49+
/// <summary>
50+
/// The decode.
51+
/// </summary>
52+
/// <param name="reader">The reader.</param>
53+
/// <returns>The value.</returns>
54+
public T? Decode(IJsonReader reader)
55+
{
56+
if (reader.IsNull)
57+
{
58+
reader.Read();
59+
return null;
60+
}
61+
62+
return this.decoder.Decode(reader);
63+
}
64+
}
65+
2966
/// <summary>
3067
/// Decoder for Int32.
3168
/// </summary>
@@ -36,6 +73,11 @@ internal sealed class Int32Decoder : IDecoder<int>
3673
/// </summary>
3774
public static readonly IDecoder<int> Instance = new Int32Decoder();
3875

76+
/// <summary>
77+
/// The instance for nullable.
78+
/// </summary>
79+
public static readonly IDecoder<int?> NullableInstance = new NullableDecoder<int>(Instance);
80+
3981
/// <summary>
4082
/// The decode.
4183
/// </summary>
@@ -57,6 +99,11 @@ internal sealed class Int64Decoder : IDecoder<long>
5799
/// </summary>
58100
public static readonly IDecoder<long> Instance = new Int64Decoder();
59101

102+
/// <summary>
103+
/// The instance for nullable.
104+
/// </summary>
105+
public static readonly IDecoder<long?> NullableInstance = new NullableDecoder<long>(Instance);
106+
60107
/// <summary>
61108
/// The decode.
62109
/// </summary>
@@ -78,6 +125,11 @@ internal sealed class UInt32Decoder : IDecoder<uint>
78125
/// </summary>
79126
public static readonly IDecoder<uint> Instance = new UInt32Decoder();
80127

128+
/// <summary>
129+
/// The instance for nullable.
130+
/// </summary>
131+
public static readonly IDecoder<uint?> NullableInstance = new NullableDecoder<uint>(Instance);
132+
81133
/// <summary>
82134
/// The decode.
83135
/// </summary>
@@ -99,6 +151,11 @@ internal sealed class UInt64Decoder : IDecoder<ulong>
99151
/// </summary>
100152
public static readonly IDecoder<ulong> Instance = new UInt64Decoder();
101153

154+
/// <summary>
155+
/// The instance for nullable.
156+
/// </summary>
157+
public static readonly IDecoder<ulong?> NullableInstance = new NullableDecoder<ulong>(Instance);
158+
102159
/// <summary>
103160
/// The decode.
104161
/// </summary>
@@ -120,6 +177,11 @@ internal sealed class SingleDecoder : IDecoder<float>
120177
/// </summary>
121178
public static readonly IDecoder<float> Instance = new SingleDecoder();
122179

180+
/// <summary>
181+
/// The instance for nullable.
182+
/// </summary>
183+
public static readonly IDecoder<float?> NullableInstance = new NullableDecoder<float>(Instance);
184+
123185
/// <summary>
124186
/// The decode.
125187
/// </summary>
@@ -141,6 +203,11 @@ internal sealed class DoubleDecoder : IDecoder<double>
141203
/// </summary>
142204
public static readonly IDecoder<double> Instance = new DoubleDecoder();
143205

206+
/// <summary>
207+
/// The instance for nullable.
208+
/// </summary>
209+
public static readonly IDecoder<double?> NullableInstance = new NullableDecoder<double>(Instance);
210+
144211
/// <summary>
145212
/// The decode.
146213
/// </summary>
@@ -162,6 +229,11 @@ internal sealed class BooleanDecoder : IDecoder<bool>
162229
/// </summary>
163230
public static readonly IDecoder<bool> Instance = new BooleanDecoder();
164231

232+
/// <summary>
233+
/// The instance for nullable.
234+
/// </summary>
235+
public static readonly IDecoder<bool?> NullableInstance = new NullableDecoder<bool>(Instance);
236+
165237
/// <summary>
166238
/// The decode.
167239
/// </summary>
@@ -183,6 +255,11 @@ internal sealed class DateTimeDecoder : IDecoder<DateTime>
183255
/// </summary>
184256
public static readonly IDecoder<DateTime> Instance = new DateTimeDecoder();
185257

258+
/// <summary>
259+
/// The instance for nullable.
260+
/// </summary>
261+
public static readonly IDecoder<DateTime?> NullableInstance = new NullableDecoder<DateTime>(Instance);
262+
186263
/// <summary>
187264
/// The decode.
188265
/// </summary>
@@ -240,7 +317,7 @@ public string Decode(IJsonReader reader)
240317
/// Decoder for struct type.
241318
/// </summary>
242319
/// <typeparam name="T">The struct type.</typeparam>
243-
internal abstract class StructDecoder<T> : IDecoder<T>
320+
internal abstract class StructDecoder<T> : IDecoder<T> where T : class
244321
{
245322
/// <summary>
246323
/// The decode.
@@ -249,6 +326,12 @@ internal abstract class StructDecoder<T> : IDecoder<T>
249326
/// <returns>The value.</returns>
250327
public T Decode(IJsonReader reader)
251328
{
329+
if (reader.IsNull)
330+
{
331+
reader.Read();
332+
return null;
333+
}
334+
252335
EnsureStartObject(reader);
253336

254337
var obj = this.DecodeFields(reader);
@@ -357,7 +440,7 @@ private static void EnsureEndObject(IJsonReader reader)
357440
/// Decoder for union type.
358441
/// </summary>
359442
/// <typeparam name="T">The union type.</typeparam>
360-
internal abstract class UnionDecoder<T> : StructDecoder<T> where T : new()
443+
internal abstract class UnionDecoder<T> : StructDecoder<T> where T : class, new()
361444
{
362445
/// <summary>
363446
/// Decode fields without ensuring start and end object.

Dropbox.Api/Babel/Encoder.cs

Lines changed: 79 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,43 @@ public static IEncoder<IList<T>> CreateListEncoder<T>(IEncoder<T> itemEncoder)
2626
}
2727
}
2828

29+
/// <summary>
30+
/// Encoder for nullable struct.
31+
/// </summary>
32+
/// <typeparam name="T">Type of the struct.</typeparam>
33+
internal sealed class NullableEncoder<T> : IEncoder<T?> where T : struct
34+
{
35+
/// <summary>
36+
/// The encoder.
37+
/// </summary>
38+
private readonly IEncoder<T> encoder;
39+
40+
/// <summary>
41+
/// Initializes a new instance of the <see cref="NullableEncoder{T}"/> class.
42+
/// </summary>
43+
/// <param name="encoder">The encoder.</param>
44+
public NullableEncoder(IEncoder<T> encoder)
45+
{
46+
this.encoder = encoder;
47+
}
48+
49+
/// <summary>
50+
/// The encode.
51+
/// </summary>
52+
/// <param name="value">The value.</param>
53+
/// <param name="writer">The writer.</param>
54+
public void Encode(T? value, IJsonWriter writer)
55+
{
56+
if (value == null)
57+
{
58+
writer.WriteNull();
59+
return;
60+
}
61+
62+
this.encoder.Encode(value.Value, writer);
63+
}
64+
}
65+
2966
/// <summary>
3067
/// Encoder for Int32.
3168
/// </summary>
@@ -36,6 +73,11 @@ internal sealed class Int32Encoder : IEncoder<int>
3673
/// </summary>
3774
public static readonly IEncoder<int> Instance = new Int32Encoder();
3875

76+
/// <summary>
77+
/// The nullable instance.
78+
/// </summary>
79+
public static readonly IEncoder<int?> NullableInstance = new NullableEncoder<int>(Instance);
80+
3981
/// <summary>
4082
/// The encode.
4183
/// </summary>
@@ -57,6 +99,11 @@ internal sealed class Int64Encoder : IEncoder<long>
5799
/// </summary>
58100
public static readonly IEncoder<long> Instance = new Int64Encoder();
59101

102+
/// <summary>
103+
/// The nullable instance.
104+
/// </summary>
105+
public static readonly IEncoder<long?> NullableInstance = new NullableEncoder<long>(Instance);
106+
60107
/// <summary>
61108
/// The encode.
62109
/// </summary>
@@ -78,6 +125,11 @@ internal sealed class UInt32Encoder : IEncoder<uint>
78125
/// </summary>
79126
public static readonly IEncoder<uint> Instance = new UInt32Encoder();
80127

128+
/// <summary>
129+
/// The nullable instance.
130+
/// </summary>
131+
public static readonly IEncoder<uint?> NullableInstance = new NullableEncoder<uint>(Instance);
132+
81133
/// <summary>
82134
/// The encode.
83135
/// </summary>
@@ -99,6 +151,11 @@ internal sealed class UInt64Encoder : IEncoder<ulong>
99151
/// </summary>
100152
public static readonly IEncoder<ulong> Instance = new UInt64Encoder();
101153

154+
/// <summary>
155+
/// The nullable instance.
156+
/// </summary>
157+
public static readonly IEncoder<ulong?> NullableInstance = new NullableEncoder<ulong>(Instance);
158+
102159
/// <summary>
103160
/// The encode.
104161
/// </summary>
@@ -141,6 +198,11 @@ internal sealed class DoubleEncoder : IEncoder<double>
141198
/// </summary>
142199
public static readonly IEncoder<double> Instance = new DoubleEncoder();
143200

201+
/// <summary>
202+
/// The nullable instance.
203+
/// </summary>
204+
public static readonly IEncoder<double?> NullableInstance = new NullableEncoder<double>(Instance);
205+
144206
/// <summary>
145207
/// The encode.
146208
/// </summary>
@@ -162,6 +224,11 @@ internal sealed class BooleanEncoder : IEncoder<bool>
162224
/// </summary>
163225
public static readonly IEncoder<bool> Instance = new BooleanEncoder();
164226

227+
/// <summary>
228+
/// The nullable instance.
229+
/// </summary>
230+
public static readonly IEncoder<bool?> NullableInstance = new NullableEncoder<bool>(Instance);
231+
165232
/// <summary>
166233
/// The encode.
167234
/// </summary>
@@ -183,6 +250,11 @@ internal sealed class DateTimeEncoder : IEncoder<DateTime>
183250
/// </summary>
184251
public static readonly IEncoder<DateTime> Instance = new DateTimeEncoder();
185252

253+
/// <summary>
254+
/// The nullable instance.
255+
/// </summary>
256+
public static readonly IEncoder<DateTime?> NullableInstance = new NullableEncoder<DateTime>(Instance);
257+
186258
/// <summary>
187259
/// The encode.
188260
/// </summary>
@@ -260,7 +332,7 @@ public void Encode(Empty value, IJsonWriter writer)
260332
/// Encoder for struct type.
261333
/// </summary>
262334
/// <typeparam name="T">The type.</typeparam>
263-
internal abstract class StructEncoder<T> : IEncoder<T>
335+
internal abstract class StructEncoder<T> : IEncoder<T> where T : class
264336
{
265337
/// <summary>
266338
/// The encode.
@@ -269,6 +341,12 @@ internal abstract class StructEncoder<T> : IEncoder<T>
269341
/// <param name="writer">The writer.</param>
270342
public void Encode(T value, IJsonWriter writer)
271343
{
344+
if (value == null)
345+
{
346+
writer.WriteNull();
347+
return;
348+
}
349+
272350
writer.WriteStartObject();
273351
this.EncodeFields(value, writer);
274352
writer.WriteEndObject();

Dropbox.Api/Babel/IDecoder.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ namespace Dropbox.Api.Babel
1313
/// Interface that is used to decode objects of specific type.
1414
/// </summary>
1515
/// <typeparam name="T">The type of the decoded object.</typeparam>
16-
internal interface IDecoder<T>
16+
internal interface IDecoder<out T>
1717
{
1818
/// <summary>
1919
/// Decode into specific type.

Dropbox.Api/Babel/IJsonReader.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,11 @@ internal interface IJsonReader
3838
/// </summary>
3939
bool IsPropertyName { get; }
4040

41+
/// <summary>
42+
/// Gets a value indicating whether current token is null.
43+
/// </summary>
44+
bool IsNull { get; }
45+
4146
/// <summary>
4247
/// Read one token.
4348
/// </summary>

Dropbox.Api/Babel/IJsonWriter.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,11 @@ internal interface IJsonWriter
7373
/// <param name="value">The value.</param>
7474
void WriteString(string value);
7575

76+
/// <summary>
77+
/// Write a null value.
78+
/// </summary>
79+
void WriteNull();
80+
7681
/// <summary>
7782
/// Write start object.
7883
/// </summary>

Dropbox.Api/Babel/JsonReader.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,14 @@ bool IJsonReader.IsPropertyName
7373
get { return this.reader.TokenType == JsonToken.PropertyName; }
7474
}
7575

76+
/// <summary>
77+
/// Gets a value indicating whether current token is null.
78+
/// </summary>
79+
bool IJsonReader.IsNull
80+
{
81+
get { return this.reader.TokenType == JsonToken.Null; }
82+
}
83+
7684
/// <summary>
7785
/// Read specific type form given json.
7886
/// </summary>

Dropbox.Api/Babel/JsonWriter.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,14 @@ void IJsonWriter.WriteString(string value)
147147
this.writer.WriteValue(value);
148148
}
149149

150+
/// <summary>
151+
/// Write a null value.
152+
/// </summary>
153+
void IJsonWriter.WriteNull()
154+
{
155+
this.writer.WriteNull();
156+
}
157+
150158
/// <summary>
151159
/// Write start object.
152160
/// </summary>

0 commit comments

Comments
 (0)