diff --git a/AutoRest/AutoRest.Core/ClientModel/KnownPrimaryType.cs b/AutoRest/AutoRest.Core/ClientModel/KnownPrimaryType.cs
index 200dcfe018..94dd5ffd7b 100644
--- a/AutoRest/AutoRest.Core/ClientModel/KnownPrimaryType.cs
+++ b/AutoRest/AutoRest.Core/ClientModel/KnownPrimaryType.cs
@@ -25,6 +25,7 @@ public enum KnownPrimaryType
Boolean,
Credentials,
Uuid,
- Base64Url
+ Base64Url,
+ UnixTime
}
}
diff --git a/AutoRest/AutoRest.Core/Utilities/Extensions.cs b/AutoRest/AutoRest.Core/Utilities/Extensions.cs
index 23bea5173d..9a18e21f1f 100644
--- a/AutoRest/AutoRest.Core/Utilities/Extensions.cs
+++ b/AutoRest/AutoRest.Core/Utilities/Extensions.cs
@@ -244,7 +244,7 @@ public static string EscapeXmlComment(this string comment)
}
///
- /// Returns true is the type is a PrimaryType with KnownPrimaryType matching typeToMatch.
+ /// Returns true if the type is a PrimaryType with KnownPrimaryType matching typeToMatch.
///
///
///
@@ -263,5 +263,54 @@ public static bool IsPrimaryType(this IType type, KnownPrimaryType typeToMatch)
}
return false;
}
+
+ ///
+ /// Returns true if the is a PrimaryType with KnownPrimaryType matching
+ /// or a DictionaryType with ValueType matching or a SequenceType matching
+ ///
+ ///
+ ///
+ ///
+ public static bool IsOrContainsPrimaryType(this IType type, KnownPrimaryType typeToMatch)
+ {
+ if (type == null)
+ {
+ return false;
+ }
+
+ if (type.IsPrimaryType(typeToMatch) ||
+ type.IsDictionaryContainingType(typeToMatch) ||
+ type.IsSequenceContainingType(typeToMatch))
+ {
+ return true;
+ }
+ return false;
+ }
+
+ ///
+ /// Returns true if the is a DictionaryType with ValueType matching
+ ///
+ ///
+ ///
+ ///
+ public static bool IsDictionaryContainingType(this IType type, KnownPrimaryType typeToMatch)
+ {
+ DictionaryType dictionaryType = type as DictionaryType;
+ PrimaryType dictionaryPrimaryType = dictionaryType?.ValueType as PrimaryType;
+ return dictionaryPrimaryType != null && dictionaryPrimaryType.IsPrimaryType(typeToMatch);
+ }
+
+ ///
+ /// Returns true if the is a SequenceType matching
+ ///
+ ///
+ ///
+ ///
+ public static bool IsSequenceContainingType(this IType type, KnownPrimaryType typeToMatch)
+ {
+ SequenceType sequenceType = type as SequenceType;
+ PrimaryType sequencePrimaryType = sequenceType?.ElementType as PrimaryType;
+ return sequencePrimaryType != null && sequencePrimaryType.IsPrimaryType(typeToMatch);
+ }
}
}
\ No newline at end of file
diff --git a/AutoRest/Generators/CSharp/CSharp.Tests/AcceptanceTests.cs b/AutoRest/Generators/CSharp/CSharp.Tests/AcceptanceTests.cs
index 0d5c31f0e5..804db915e6 100644
--- a/AutoRest/Generators/CSharp/CSharp.Tests/AcceptanceTests.cs
+++ b/AutoRest/Generators/CSharp/CSharp.Tests/AcceptanceTests.cs
@@ -198,12 +198,16 @@ public void IntegerTests()
client.IntModel.PutMin32(Int32.MinValue);
client.IntModel.PutMax64(Int64.MaxValue);
client.IntModel.PutMin64(Int64.MinValue);
+ client.IntModel.PutUnixTimeDate(new DateTime(2016, 4, 13, 0, 0, 0));
client.IntModel.GetNull();
Assert.Throws(() => client.IntModel.GetInvalid());
Assert.Throws(() => client.IntModel.GetOverflowInt32());
Assert.Throws(() => client.IntModel.GetOverflowInt64());
Assert.Throws(() => client.IntModel.GetUnderflowInt32());
Assert.Throws(() => client.IntModel.GetUnderflowInt64());
+ Assert.Throws(() => client.IntModel.GetInvalidUnixTime());
+ Assert.Null(client.IntModel.GetNullUnixTime());
+ Assert.Equal(new DateTime(2016, 4, 13, 0, 0, 0), client.IntModel.GetUnixTime());
}
[Fact]
@@ -1351,6 +1355,7 @@ public void UrlPathTests()
client.Paths.Base64Url(Encoding.UTF8.GetBytes("lorem"));
var testArray = new List { "ArrayPath1", @"begin!*'();:@ &=+$,/?#[]end", null, "" };
client.Paths.ArrayCsvInPath(testArray);
+ client.Paths.UnixTimeUrl(new DateTime(2016, 4, 13, 0, 0, 0));
}
}
diff --git a/AutoRest/Generators/CSharp/CSharp.Tests/Expected/AcceptanceTests/BodyInteger/IIntModel.cs b/AutoRest/Generators/CSharp/CSharp.Tests/Expected/AcceptanceTests/BodyInteger/IIntModel.cs
index 4b90323fef..7131504bb1 100644
--- a/AutoRest/Generators/CSharp/CSharp.Tests/Expected/AcceptanceTests/BodyInteger/IIntModel.cs
+++ b/AutoRest/Generators/CSharp/CSharp.Tests/Expected/AcceptanceTests/BodyInteger/IIntModel.cs
@@ -129,5 +129,47 @@ public partial interface IIntModel
/// The cancellation token.
///
Task PutMin64WithHttpMessagesAsync(long intBody, Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken));
+ ///
+ /// Get datetime encoded as Unix time value
+ ///
+ ///
+ /// The headers that will be added to request.
+ ///
+ ///
+ /// The cancellation token.
+ ///
+ Task> GetUnixTimeWithHttpMessagesAsync(Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken));
+ ///
+ /// Put datetime encoded as Unix time
+ ///
+ ///
+ ///
+ ///
+ /// The headers that will be added to request.
+ ///
+ ///
+ /// The cancellation token.
+ ///
+ Task PutUnixTimeDateWithHttpMessagesAsync(DateTime intBody, Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken));
+ ///
+ /// Get invalid Unix time value
+ ///
+ ///
+ /// The headers that will be added to request.
+ ///
+ ///
+ /// The cancellation token.
+ ///
+ Task> GetInvalidUnixTimeWithHttpMessagesAsync(Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken));
+ ///
+ /// Get null Unix time value
+ ///
+ ///
+ /// The headers that will be added to request.
+ ///
+ ///
+ /// The cancellation token.
+ ///
+ Task> GetNullUnixTimeWithHttpMessagesAsync(Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken));
}
}
diff --git a/AutoRest/Generators/CSharp/CSharp.Tests/Expected/AcceptanceTests/BodyInteger/IntModel.cs b/AutoRest/Generators/CSharp/CSharp.Tests/Expected/AcceptanceTests/BodyInteger/IntModel.cs
index feb0d3013f..9c9b57ebbb 100644
--- a/AutoRest/Generators/CSharp/CSharp.Tests/Expected/AcceptanceTests/BodyInteger/IntModel.cs
+++ b/AutoRest/Generators/CSharp/CSharp.Tests/Expected/AcceptanceTests/BodyInteger/IntModel.cs
@@ -1202,5 +1202,472 @@ public IntModel(AutoRestIntegerTestService client)
return _result;
}
+ ///
+ /// Get datetime encoded as Unix time value
+ ///
+ ///
+ /// Headers that will be added to request.
+ ///
+ ///
+ /// The cancellation token.
+ ///
+ ///
+ /// A response object containing the response body and response headers.
+ ///
+ public async Task> GetUnixTimeWithHttpMessagesAsync(Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken))
+ {
+ // Tracing
+ bool _shouldTrace = ServiceClientTracing.IsEnabled;
+ string _invocationId = null;
+ if (_shouldTrace)
+ {
+ _invocationId = ServiceClientTracing.NextInvocationId.ToString();
+ Dictionary tracingParameters = new Dictionary();
+ tracingParameters.Add("cancellationToken", cancellationToken);
+ ServiceClientTracing.Enter(_invocationId, this, "GetUnixTime", tracingParameters);
+ }
+ // Construct URL
+ var _baseUrl = this.Client.BaseUri.AbsoluteUri;
+ var _url = new Uri(new Uri(_baseUrl + (_baseUrl.EndsWith("/") ? "" : "/")), "int/unixtime").ToString();
+ // Create HTTP transport objects
+ HttpRequestMessage _httpRequest = new HttpRequestMessage();
+ HttpResponseMessage _httpResponse = null;
+ _httpRequest.Method = new HttpMethod("GET");
+ _httpRequest.RequestUri = new Uri(_url);
+ // Set Headers
+ if (customHeaders != null)
+ {
+ foreach(var _header in customHeaders)
+ {
+ if (_httpRequest.Headers.Contains(_header.Key))
+ {
+ _httpRequest.Headers.Remove(_header.Key);
+ }
+ _httpRequest.Headers.TryAddWithoutValidation(_header.Key, _header.Value);
+ }
+ }
+
+ // Serialize Request
+ string _requestContent = null;
+ // Send Request
+ if (_shouldTrace)
+ {
+ ServiceClientTracing.SendRequest(_invocationId, _httpRequest);
+ }
+ cancellationToken.ThrowIfCancellationRequested();
+ _httpResponse = await this.Client.HttpClient.SendAsync(_httpRequest, cancellationToken).ConfigureAwait(false);
+ if (_shouldTrace)
+ {
+ ServiceClientTracing.ReceiveResponse(_invocationId, _httpResponse);
+ }
+ HttpStatusCode _statusCode = _httpResponse.StatusCode;
+ cancellationToken.ThrowIfCancellationRequested();
+ string _responseContent = null;
+ if ((int)_statusCode != 200)
+ {
+ var ex = new ErrorException(string.Format("Operation returned an invalid status code '{0}'", _statusCode));
+ try
+ {
+ _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false);
+ Error _errorBody = SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings);
+ if (_errorBody != null)
+ {
+ ex.Body = _errorBody;
+ }
+ }
+ catch (JsonException)
+ {
+ // Ignore the exception
+ }
+ ex.Request = new HttpRequestMessageWrapper(_httpRequest, _requestContent);
+ ex.Response = new HttpResponseMessageWrapper(_httpResponse, _responseContent);
+ if (_shouldTrace)
+ {
+ ServiceClientTracing.Error(_invocationId, ex);
+ }
+ _httpRequest.Dispose();
+ if (_httpResponse != null)
+ {
+ _httpResponse.Dispose();
+ }
+ throw ex;
+ }
+ // Create Result
+ var _result = new HttpOperationResponse();
+ _result.Request = _httpRequest;
+ _result.Response = _httpResponse;
+ // Deserialize Response
+ if ((int)_statusCode == 200)
+ {
+ _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false);
+ try
+ {
+ _result.Body = SafeJsonConvert.DeserializeObject(_responseContent, new UnixTimeJsonConverter());
+ }
+ catch (JsonException ex)
+ {
+ _httpRequest.Dispose();
+ if (_httpResponse != null)
+ {
+ _httpResponse.Dispose();
+ }
+ throw new SerializationException("Unable to deserialize the response.", _responseContent, ex);
+ }
+ }
+ if (_shouldTrace)
+ {
+ ServiceClientTracing.Exit(_invocationId, _result);
+ }
+ return _result;
+ }
+
+ ///
+ /// Put datetime encoded as Unix time
+ ///
+ ///
+ ///
+ ///
+ /// Headers that will be added to request.
+ ///
+ ///
+ /// The cancellation token.
+ ///
+ ///
+ /// A response object containing the response body and response headers.
+ ///
+ public async Task PutUnixTimeDateWithHttpMessagesAsync(DateTime intBody, Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken))
+ {
+ // Tracing
+ bool _shouldTrace = ServiceClientTracing.IsEnabled;
+ string _invocationId = null;
+ if (_shouldTrace)
+ {
+ _invocationId = ServiceClientTracing.NextInvocationId.ToString();
+ Dictionary tracingParameters = new Dictionary();
+ tracingParameters.Add("intBody", intBody);
+ tracingParameters.Add("cancellationToken", cancellationToken);
+ ServiceClientTracing.Enter(_invocationId, this, "PutUnixTimeDate", tracingParameters);
+ }
+ // Construct URL
+ var _baseUrl = this.Client.BaseUri.AbsoluteUri;
+ var _url = new Uri(new Uri(_baseUrl + (_baseUrl.EndsWith("/") ? "" : "/")), "int/unixtime").ToString();
+ // Create HTTP transport objects
+ HttpRequestMessage _httpRequest = new HttpRequestMessage();
+ HttpResponseMessage _httpResponse = null;
+ _httpRequest.Method = new HttpMethod("PUT");
+ _httpRequest.RequestUri = new Uri(_url);
+ // Set Headers
+ if (customHeaders != null)
+ {
+ foreach(var _header in customHeaders)
+ {
+ if (_httpRequest.Headers.Contains(_header.Key))
+ {
+ _httpRequest.Headers.Remove(_header.Key);
+ }
+ _httpRequest.Headers.TryAddWithoutValidation(_header.Key, _header.Value);
+ }
+ }
+
+ // Serialize Request
+ string _requestContent = null;
+ if(intBody != null)
+ {
+ _requestContent = SafeJsonConvert.SerializeObject(intBody, new UnixTimeJsonConverter());
+ _httpRequest.Content = new StringContent(_requestContent, Encoding.UTF8);
+ _httpRequest.Content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json; charset=utf-8");
+ }
+ // Send Request
+ if (_shouldTrace)
+ {
+ ServiceClientTracing.SendRequest(_invocationId, _httpRequest);
+ }
+ cancellationToken.ThrowIfCancellationRequested();
+ _httpResponse = await this.Client.HttpClient.SendAsync(_httpRequest, cancellationToken).ConfigureAwait(false);
+ if (_shouldTrace)
+ {
+ ServiceClientTracing.ReceiveResponse(_invocationId, _httpResponse);
+ }
+ HttpStatusCode _statusCode = _httpResponse.StatusCode;
+ cancellationToken.ThrowIfCancellationRequested();
+ string _responseContent = null;
+ if ((int)_statusCode != 200)
+ {
+ var ex = new ErrorException(string.Format("Operation returned an invalid status code '{0}'", _statusCode));
+ try
+ {
+ _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false);
+ Error _errorBody = SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings);
+ if (_errorBody != null)
+ {
+ ex.Body = _errorBody;
+ }
+ }
+ catch (JsonException)
+ {
+ // Ignore the exception
+ }
+ ex.Request = new HttpRequestMessageWrapper(_httpRequest, _requestContent);
+ ex.Response = new HttpResponseMessageWrapper(_httpResponse, _responseContent);
+ if (_shouldTrace)
+ {
+ ServiceClientTracing.Error(_invocationId, ex);
+ }
+ _httpRequest.Dispose();
+ if (_httpResponse != null)
+ {
+ _httpResponse.Dispose();
+ }
+ throw ex;
+ }
+ // Create Result
+ var _result = new HttpOperationResponse();
+ _result.Request = _httpRequest;
+ _result.Response = _httpResponse;
+ if (_shouldTrace)
+ {
+ ServiceClientTracing.Exit(_invocationId, _result);
+ }
+ return _result;
+ }
+
+ ///
+ /// Get invalid Unix time value
+ ///
+ ///
+ /// Headers that will be added to request.
+ ///
+ ///
+ /// The cancellation token.
+ ///
+ ///
+ /// A response object containing the response body and response headers.
+ ///
+ public async Task> GetInvalidUnixTimeWithHttpMessagesAsync(Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken))
+ {
+ // Tracing
+ bool _shouldTrace = ServiceClientTracing.IsEnabled;
+ string _invocationId = null;
+ if (_shouldTrace)
+ {
+ _invocationId = ServiceClientTracing.NextInvocationId.ToString();
+ Dictionary tracingParameters = new Dictionary();
+ tracingParameters.Add("cancellationToken", cancellationToken);
+ ServiceClientTracing.Enter(_invocationId, this, "GetInvalidUnixTime", tracingParameters);
+ }
+ // Construct URL
+ var _baseUrl = this.Client.BaseUri.AbsoluteUri;
+ var _url = new Uri(new Uri(_baseUrl + (_baseUrl.EndsWith("/") ? "" : "/")), "int/invalidunixtime").ToString();
+ // Create HTTP transport objects
+ HttpRequestMessage _httpRequest = new HttpRequestMessage();
+ HttpResponseMessage _httpResponse = null;
+ _httpRequest.Method = new HttpMethod("GET");
+ _httpRequest.RequestUri = new Uri(_url);
+ // Set Headers
+ if (customHeaders != null)
+ {
+ foreach(var _header in customHeaders)
+ {
+ if (_httpRequest.Headers.Contains(_header.Key))
+ {
+ _httpRequest.Headers.Remove(_header.Key);
+ }
+ _httpRequest.Headers.TryAddWithoutValidation(_header.Key, _header.Value);
+ }
+ }
+
+ // Serialize Request
+ string _requestContent = null;
+ // Send Request
+ if (_shouldTrace)
+ {
+ ServiceClientTracing.SendRequest(_invocationId, _httpRequest);
+ }
+ cancellationToken.ThrowIfCancellationRequested();
+ _httpResponse = await this.Client.HttpClient.SendAsync(_httpRequest, cancellationToken).ConfigureAwait(false);
+ if (_shouldTrace)
+ {
+ ServiceClientTracing.ReceiveResponse(_invocationId, _httpResponse);
+ }
+ HttpStatusCode _statusCode = _httpResponse.StatusCode;
+ cancellationToken.ThrowIfCancellationRequested();
+ string _responseContent = null;
+ if ((int)_statusCode != 200)
+ {
+ var ex = new ErrorException(string.Format("Operation returned an invalid status code '{0}'", _statusCode));
+ try
+ {
+ _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false);
+ Error _errorBody = SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings);
+ if (_errorBody != null)
+ {
+ ex.Body = _errorBody;
+ }
+ }
+ catch (JsonException)
+ {
+ // Ignore the exception
+ }
+ ex.Request = new HttpRequestMessageWrapper(_httpRequest, _requestContent);
+ ex.Response = new HttpResponseMessageWrapper(_httpResponse, _responseContent);
+ if (_shouldTrace)
+ {
+ ServiceClientTracing.Error(_invocationId, ex);
+ }
+ _httpRequest.Dispose();
+ if (_httpResponse != null)
+ {
+ _httpResponse.Dispose();
+ }
+ throw ex;
+ }
+ // Create Result
+ var _result = new HttpOperationResponse();
+ _result.Request = _httpRequest;
+ _result.Response = _httpResponse;
+ // Deserialize Response
+ if ((int)_statusCode == 200)
+ {
+ _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false);
+ try
+ {
+ _result.Body = SafeJsonConvert.DeserializeObject(_responseContent, new UnixTimeJsonConverter());
+ }
+ catch (JsonException ex)
+ {
+ _httpRequest.Dispose();
+ if (_httpResponse != null)
+ {
+ _httpResponse.Dispose();
+ }
+ throw new SerializationException("Unable to deserialize the response.", _responseContent, ex);
+ }
+ }
+ if (_shouldTrace)
+ {
+ ServiceClientTracing.Exit(_invocationId, _result);
+ }
+ return _result;
+ }
+
+ ///
+ /// Get null Unix time value
+ ///
+ ///
+ /// Headers that will be added to request.
+ ///
+ ///
+ /// The cancellation token.
+ ///
+ ///
+ /// A response object containing the response body and response headers.
+ ///
+ public async Task> GetNullUnixTimeWithHttpMessagesAsync(Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken))
+ {
+ // Tracing
+ bool _shouldTrace = ServiceClientTracing.IsEnabled;
+ string _invocationId = null;
+ if (_shouldTrace)
+ {
+ _invocationId = ServiceClientTracing.NextInvocationId.ToString();
+ Dictionary tracingParameters = new Dictionary();
+ tracingParameters.Add("cancellationToken", cancellationToken);
+ ServiceClientTracing.Enter(_invocationId, this, "GetNullUnixTime", tracingParameters);
+ }
+ // Construct URL
+ var _baseUrl = this.Client.BaseUri.AbsoluteUri;
+ var _url = new Uri(new Uri(_baseUrl + (_baseUrl.EndsWith("/") ? "" : "/")), "int/nullunixtime").ToString();
+ // Create HTTP transport objects
+ HttpRequestMessage _httpRequest = new HttpRequestMessage();
+ HttpResponseMessage _httpResponse = null;
+ _httpRequest.Method = new HttpMethod("GET");
+ _httpRequest.RequestUri = new Uri(_url);
+ // Set Headers
+ if (customHeaders != null)
+ {
+ foreach(var _header in customHeaders)
+ {
+ if (_httpRequest.Headers.Contains(_header.Key))
+ {
+ _httpRequest.Headers.Remove(_header.Key);
+ }
+ _httpRequest.Headers.TryAddWithoutValidation(_header.Key, _header.Value);
+ }
+ }
+
+ // Serialize Request
+ string _requestContent = null;
+ // Send Request
+ if (_shouldTrace)
+ {
+ ServiceClientTracing.SendRequest(_invocationId, _httpRequest);
+ }
+ cancellationToken.ThrowIfCancellationRequested();
+ _httpResponse = await this.Client.HttpClient.SendAsync(_httpRequest, cancellationToken).ConfigureAwait(false);
+ if (_shouldTrace)
+ {
+ ServiceClientTracing.ReceiveResponse(_invocationId, _httpResponse);
+ }
+ HttpStatusCode _statusCode = _httpResponse.StatusCode;
+ cancellationToken.ThrowIfCancellationRequested();
+ string _responseContent = null;
+ if ((int)_statusCode != 200)
+ {
+ var ex = new ErrorException(string.Format("Operation returned an invalid status code '{0}'", _statusCode));
+ try
+ {
+ _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false);
+ Error _errorBody = SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings);
+ if (_errorBody != null)
+ {
+ ex.Body = _errorBody;
+ }
+ }
+ catch (JsonException)
+ {
+ // Ignore the exception
+ }
+ ex.Request = new HttpRequestMessageWrapper(_httpRequest, _requestContent);
+ ex.Response = new HttpResponseMessageWrapper(_httpResponse, _responseContent);
+ if (_shouldTrace)
+ {
+ ServiceClientTracing.Error(_invocationId, ex);
+ }
+ _httpRequest.Dispose();
+ if (_httpResponse != null)
+ {
+ _httpResponse.Dispose();
+ }
+ throw ex;
+ }
+ // Create Result
+ var _result = new HttpOperationResponse();
+ _result.Request = _httpRequest;
+ _result.Response = _httpResponse;
+ // Deserialize Response
+ if ((int)_statusCode == 200)
+ {
+ _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false);
+ try
+ {
+ _result.Body = SafeJsonConvert.DeserializeObject(_responseContent, new UnixTimeJsonConverter());
+ }
+ catch (JsonException ex)
+ {
+ _httpRequest.Dispose();
+ if (_httpResponse != null)
+ {
+ _httpResponse.Dispose();
+ }
+ throw new SerializationException("Unable to deserialize the response.", _responseContent, ex);
+ }
+ }
+ if (_shouldTrace)
+ {
+ ServiceClientTracing.Exit(_invocationId, _result);
+ }
+ return _result;
+ }
+
}
}
diff --git a/AutoRest/Generators/CSharp/CSharp.Tests/Expected/AcceptanceTests/BodyInteger/IntModelExtensions.cs b/AutoRest/Generators/CSharp/CSharp.Tests/Expected/AcceptanceTests/BodyInteger/IntModelExtensions.cs
index 0c57e20b0a..c0bc0812eb 100644
--- a/AutoRest/Generators/CSharp/CSharp.Tests/Expected/AcceptanceTests/BodyInteger/IntModelExtensions.cs
+++ b/AutoRest/Generators/CSharp/CSharp.Tests/Expected/AcceptanceTests/BodyInteger/IntModelExtensions.cs
@@ -305,5 +305,118 @@ public static void PutMin64(this IIntModel operations, long intBody)
await operations.PutMin64WithHttpMessagesAsync(intBody, null, cancellationToken).ConfigureAwait(false);
}
+ ///
+ /// Get datetime encoded as Unix time value
+ ///
+ ///
+ /// The operations group for this extension method.
+ ///
+ public static DateTime? GetUnixTime(this IIntModel operations)
+ {
+ return Task.Factory.StartNew(s => ((IIntModel)s).GetUnixTimeAsync(), operations, CancellationToken.None, TaskCreationOptions.None, TaskScheduler.Default).Unwrap().GetAwaiter().GetResult();
+ }
+
+ ///
+ /// Get datetime encoded as Unix time value
+ ///
+ ///
+ /// The operations group for this extension method.
+ ///
+ ///
+ /// The cancellation token.
+ ///
+ public static async Task GetUnixTimeAsync(this IIntModel operations, CancellationToken cancellationToken = default(CancellationToken))
+ {
+ using (var _result = await operations.GetUnixTimeWithHttpMessagesAsync(null, cancellationToken).ConfigureAwait(false))
+ {
+ return _result.Body;
+ }
+ }
+
+ ///
+ /// Put datetime encoded as Unix time
+ ///
+ ///
+ /// The operations group for this extension method.
+ ///
+ ///
+ ///
+ public static void PutUnixTimeDate(this IIntModel operations, DateTime intBody)
+ {
+ Task.Factory.StartNew(s => ((IIntModel)s).PutUnixTimeDateAsync(intBody), operations, CancellationToken.None, TaskCreationOptions.None, TaskScheduler.Default).Unwrap().GetAwaiter().GetResult();
+ }
+
+ ///
+ /// Put datetime encoded as Unix time
+ ///
+ ///
+ /// The operations group for this extension method.
+ ///
+ ///
+ ///
+ ///
+ /// The cancellation token.
+ ///
+ public static async Task PutUnixTimeDateAsync(this IIntModel operations, DateTime intBody, CancellationToken cancellationToken = default(CancellationToken))
+ {
+ await operations.PutUnixTimeDateWithHttpMessagesAsync(intBody, null, cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// Get invalid Unix time value
+ ///
+ ///
+ /// The operations group for this extension method.
+ ///
+ public static DateTime? GetInvalidUnixTime(this IIntModel operations)
+ {
+ return Task.Factory.StartNew(s => ((IIntModel)s).GetInvalidUnixTimeAsync(), operations, CancellationToken.None, TaskCreationOptions.None, TaskScheduler.Default).Unwrap().GetAwaiter().GetResult();
+ }
+
+ ///
+ /// Get invalid Unix time value
+ ///
+ ///
+ /// The operations group for this extension method.
+ ///
+ ///
+ /// The cancellation token.
+ ///
+ public static async Task GetInvalidUnixTimeAsync(this IIntModel operations, CancellationToken cancellationToken = default(CancellationToken))
+ {
+ using (var _result = await operations.GetInvalidUnixTimeWithHttpMessagesAsync(null, cancellationToken).ConfigureAwait(false))
+ {
+ return _result.Body;
+ }
+ }
+
+ ///
+ /// Get null Unix time value
+ ///
+ ///
+ /// The operations group for this extension method.
+ ///
+ public static DateTime? GetNullUnixTime(this IIntModel operations)
+ {
+ return Task.Factory.StartNew(s => ((IIntModel)s).GetNullUnixTimeAsync(), operations, CancellationToken.None, TaskCreationOptions.None, TaskScheduler.Default).Unwrap().GetAwaiter().GetResult();
+ }
+
+ ///
+ /// Get null Unix time value
+ ///
+ ///
+ /// The operations group for this extension method.
+ ///
+ ///
+ /// The cancellation token.
+ ///
+ public static async Task GetNullUnixTimeAsync(this IIntModel operations, CancellationToken cancellationToken = default(CancellationToken))
+ {
+ using (var _result = await operations.GetNullUnixTimeWithHttpMessagesAsync(null, cancellationToken).ConfigureAwait(false))
+ {
+ return _result.Body;
+ }
+ }
+
}
}
diff --git a/AutoRest/Generators/CSharp/CSharp.Tests/Expected/AcceptanceTests/CompositeBoolIntClient/IIntModel.cs b/AutoRest/Generators/CSharp/CSharp.Tests/Expected/AcceptanceTests/CompositeBoolIntClient/IIntModel.cs
index 4917e35522..d0b5184786 100644
--- a/AutoRest/Generators/CSharp/CSharp.Tests/Expected/AcceptanceTests/CompositeBoolIntClient/IIntModel.cs
+++ b/AutoRest/Generators/CSharp/CSharp.Tests/Expected/AcceptanceTests/CompositeBoolIntClient/IIntModel.cs
@@ -129,5 +129,47 @@ public partial interface IIntModel
/// The cancellation token.
///
Task PutMin64WithHttpMessagesAsync(long intBody, Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken));
+ ///
+ /// Get datetime encoded as Unix time value
+ ///
+ ///
+ /// The headers that will be added to request.
+ ///
+ ///
+ /// The cancellation token.
+ ///
+ Task> GetUnixTimeWithHttpMessagesAsync(Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken));
+ ///
+ /// Put datetime encoded as Unix time
+ ///
+ ///
+ ///
+ ///
+ /// The headers that will be added to request.
+ ///
+ ///
+ /// The cancellation token.
+ ///
+ Task PutUnixTimeDateWithHttpMessagesAsync(DateTime intBody, Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken));
+ ///
+ /// Get invalid Unix time value
+ ///
+ ///
+ /// The headers that will be added to request.
+ ///
+ ///
+ /// The cancellation token.
+ ///
+ Task> GetInvalidUnixTimeWithHttpMessagesAsync(Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken));
+ ///
+ /// Get null Unix time value
+ ///
+ ///
+ /// The headers that will be added to request.
+ ///
+ ///
+ /// The cancellation token.
+ ///
+ Task> GetNullUnixTimeWithHttpMessagesAsync(Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken));
}
}
diff --git a/AutoRest/Generators/CSharp/CSharp.Tests/Expected/AcceptanceTests/CompositeBoolIntClient/IntModel.cs b/AutoRest/Generators/CSharp/CSharp.Tests/Expected/AcceptanceTests/CompositeBoolIntClient/IntModel.cs
index 1ed42f86ca..2047fd8608 100644
--- a/AutoRest/Generators/CSharp/CSharp.Tests/Expected/AcceptanceTests/CompositeBoolIntClient/IntModel.cs
+++ b/AutoRest/Generators/CSharp/CSharp.Tests/Expected/AcceptanceTests/CompositeBoolIntClient/IntModel.cs
@@ -1202,5 +1202,472 @@ public IntModel(CompositeBoolInt client)
return _result;
}
+ ///
+ /// Get datetime encoded as Unix time value
+ ///
+ ///
+ /// Headers that will be added to request.
+ ///
+ ///
+ /// The cancellation token.
+ ///
+ ///
+ /// A response object containing the response body and response headers.
+ ///
+ public async Task> GetUnixTimeWithHttpMessagesAsync(Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken))
+ {
+ // Tracing
+ bool _shouldTrace = ServiceClientTracing.IsEnabled;
+ string _invocationId = null;
+ if (_shouldTrace)
+ {
+ _invocationId = ServiceClientTracing.NextInvocationId.ToString();
+ Dictionary tracingParameters = new Dictionary();
+ tracingParameters.Add("cancellationToken", cancellationToken);
+ ServiceClientTracing.Enter(_invocationId, this, "GetUnixTime", tracingParameters);
+ }
+ // Construct URL
+ var _baseUrl = this.Client.BaseUri.AbsoluteUri;
+ var _url = new Uri(new Uri(_baseUrl + (_baseUrl.EndsWith("/") ? "" : "/")), "int/unixtime").ToString();
+ // Create HTTP transport objects
+ HttpRequestMessage _httpRequest = new HttpRequestMessage();
+ HttpResponseMessage _httpResponse = null;
+ _httpRequest.Method = new HttpMethod("GET");
+ _httpRequest.RequestUri = new Uri(_url);
+ // Set Headers
+ if (customHeaders != null)
+ {
+ foreach(var _header in customHeaders)
+ {
+ if (_httpRequest.Headers.Contains(_header.Key))
+ {
+ _httpRequest.Headers.Remove(_header.Key);
+ }
+ _httpRequest.Headers.TryAddWithoutValidation(_header.Key, _header.Value);
+ }
+ }
+
+ // Serialize Request
+ string _requestContent = null;
+ // Send Request
+ if (_shouldTrace)
+ {
+ ServiceClientTracing.SendRequest(_invocationId, _httpRequest);
+ }
+ cancellationToken.ThrowIfCancellationRequested();
+ _httpResponse = await this.Client.HttpClient.SendAsync(_httpRequest, cancellationToken).ConfigureAwait(false);
+ if (_shouldTrace)
+ {
+ ServiceClientTracing.ReceiveResponse(_invocationId, _httpResponse);
+ }
+ HttpStatusCode _statusCode = _httpResponse.StatusCode;
+ cancellationToken.ThrowIfCancellationRequested();
+ string _responseContent = null;
+ if ((int)_statusCode != 200)
+ {
+ var ex = new ErrorException(string.Format("Operation returned an invalid status code '{0}'", _statusCode));
+ try
+ {
+ _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false);
+ Error _errorBody = SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings);
+ if (_errorBody != null)
+ {
+ ex.Body = _errorBody;
+ }
+ }
+ catch (JsonException)
+ {
+ // Ignore the exception
+ }
+ ex.Request = new HttpRequestMessageWrapper(_httpRequest, _requestContent);
+ ex.Response = new HttpResponseMessageWrapper(_httpResponse, _responseContent);
+ if (_shouldTrace)
+ {
+ ServiceClientTracing.Error(_invocationId, ex);
+ }
+ _httpRequest.Dispose();
+ if (_httpResponse != null)
+ {
+ _httpResponse.Dispose();
+ }
+ throw ex;
+ }
+ // Create Result
+ var _result = new HttpOperationResponse();
+ _result.Request = _httpRequest;
+ _result.Response = _httpResponse;
+ // Deserialize Response
+ if ((int)_statusCode == 200)
+ {
+ _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false);
+ try
+ {
+ _result.Body = SafeJsonConvert.DeserializeObject(_responseContent, new UnixTimeJsonConverter());
+ }
+ catch (JsonException ex)
+ {
+ _httpRequest.Dispose();
+ if (_httpResponse != null)
+ {
+ _httpResponse.Dispose();
+ }
+ throw new SerializationException("Unable to deserialize the response.", _responseContent, ex);
+ }
+ }
+ if (_shouldTrace)
+ {
+ ServiceClientTracing.Exit(_invocationId, _result);
+ }
+ return _result;
+ }
+
+ ///
+ /// Put datetime encoded as Unix time
+ ///
+ ///
+ ///
+ ///
+ /// Headers that will be added to request.
+ ///
+ ///
+ /// The cancellation token.
+ ///
+ ///
+ /// A response object containing the response body and response headers.
+ ///
+ public async Task PutUnixTimeDateWithHttpMessagesAsync(DateTime intBody, Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken))
+ {
+ // Tracing
+ bool _shouldTrace = ServiceClientTracing.IsEnabled;
+ string _invocationId = null;
+ if (_shouldTrace)
+ {
+ _invocationId = ServiceClientTracing.NextInvocationId.ToString();
+ Dictionary tracingParameters = new Dictionary();
+ tracingParameters.Add("intBody", intBody);
+ tracingParameters.Add("cancellationToken", cancellationToken);
+ ServiceClientTracing.Enter(_invocationId, this, "PutUnixTimeDate", tracingParameters);
+ }
+ // Construct URL
+ var _baseUrl = this.Client.BaseUri.AbsoluteUri;
+ var _url = new Uri(new Uri(_baseUrl + (_baseUrl.EndsWith("/") ? "" : "/")), "int/unixtime").ToString();
+ // Create HTTP transport objects
+ HttpRequestMessage _httpRequest = new HttpRequestMessage();
+ HttpResponseMessage _httpResponse = null;
+ _httpRequest.Method = new HttpMethod("PUT");
+ _httpRequest.RequestUri = new Uri(_url);
+ // Set Headers
+ if (customHeaders != null)
+ {
+ foreach(var _header in customHeaders)
+ {
+ if (_httpRequest.Headers.Contains(_header.Key))
+ {
+ _httpRequest.Headers.Remove(_header.Key);
+ }
+ _httpRequest.Headers.TryAddWithoutValidation(_header.Key, _header.Value);
+ }
+ }
+
+ // Serialize Request
+ string _requestContent = null;
+ if(intBody != null)
+ {
+ _requestContent = SafeJsonConvert.SerializeObject(intBody, new UnixTimeJsonConverter());
+ _httpRequest.Content = new StringContent(_requestContent, Encoding.UTF8);
+ _httpRequest.Content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json; charset=utf-8");
+ }
+ // Send Request
+ if (_shouldTrace)
+ {
+ ServiceClientTracing.SendRequest(_invocationId, _httpRequest);
+ }
+ cancellationToken.ThrowIfCancellationRequested();
+ _httpResponse = await this.Client.HttpClient.SendAsync(_httpRequest, cancellationToken).ConfigureAwait(false);
+ if (_shouldTrace)
+ {
+ ServiceClientTracing.ReceiveResponse(_invocationId, _httpResponse);
+ }
+ HttpStatusCode _statusCode = _httpResponse.StatusCode;
+ cancellationToken.ThrowIfCancellationRequested();
+ string _responseContent = null;
+ if ((int)_statusCode != 200)
+ {
+ var ex = new ErrorException(string.Format("Operation returned an invalid status code '{0}'", _statusCode));
+ try
+ {
+ _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false);
+ Error _errorBody = SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings);
+ if (_errorBody != null)
+ {
+ ex.Body = _errorBody;
+ }
+ }
+ catch (JsonException)
+ {
+ // Ignore the exception
+ }
+ ex.Request = new HttpRequestMessageWrapper(_httpRequest, _requestContent);
+ ex.Response = new HttpResponseMessageWrapper(_httpResponse, _responseContent);
+ if (_shouldTrace)
+ {
+ ServiceClientTracing.Error(_invocationId, ex);
+ }
+ _httpRequest.Dispose();
+ if (_httpResponse != null)
+ {
+ _httpResponse.Dispose();
+ }
+ throw ex;
+ }
+ // Create Result
+ var _result = new HttpOperationResponse();
+ _result.Request = _httpRequest;
+ _result.Response = _httpResponse;
+ if (_shouldTrace)
+ {
+ ServiceClientTracing.Exit(_invocationId, _result);
+ }
+ return _result;
+ }
+
+ ///
+ /// Get invalid Unix time value
+ ///
+ ///
+ /// Headers that will be added to request.
+ ///
+ ///
+ /// The cancellation token.
+ ///
+ ///
+ /// A response object containing the response body and response headers.
+ ///
+ public async Task> GetInvalidUnixTimeWithHttpMessagesAsync(Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken))
+ {
+ // Tracing
+ bool _shouldTrace = ServiceClientTracing.IsEnabled;
+ string _invocationId = null;
+ if (_shouldTrace)
+ {
+ _invocationId = ServiceClientTracing.NextInvocationId.ToString();
+ Dictionary tracingParameters = new Dictionary();
+ tracingParameters.Add("cancellationToken", cancellationToken);
+ ServiceClientTracing.Enter(_invocationId, this, "GetInvalidUnixTime", tracingParameters);
+ }
+ // Construct URL
+ var _baseUrl = this.Client.BaseUri.AbsoluteUri;
+ var _url = new Uri(new Uri(_baseUrl + (_baseUrl.EndsWith("/") ? "" : "/")), "int/invalidunixtime").ToString();
+ // Create HTTP transport objects
+ HttpRequestMessage _httpRequest = new HttpRequestMessage();
+ HttpResponseMessage _httpResponse = null;
+ _httpRequest.Method = new HttpMethod("GET");
+ _httpRequest.RequestUri = new Uri(_url);
+ // Set Headers
+ if (customHeaders != null)
+ {
+ foreach(var _header in customHeaders)
+ {
+ if (_httpRequest.Headers.Contains(_header.Key))
+ {
+ _httpRequest.Headers.Remove(_header.Key);
+ }
+ _httpRequest.Headers.TryAddWithoutValidation(_header.Key, _header.Value);
+ }
+ }
+
+ // Serialize Request
+ string _requestContent = null;
+ // Send Request
+ if (_shouldTrace)
+ {
+ ServiceClientTracing.SendRequest(_invocationId, _httpRequest);
+ }
+ cancellationToken.ThrowIfCancellationRequested();
+ _httpResponse = await this.Client.HttpClient.SendAsync(_httpRequest, cancellationToken).ConfigureAwait(false);
+ if (_shouldTrace)
+ {
+ ServiceClientTracing.ReceiveResponse(_invocationId, _httpResponse);
+ }
+ HttpStatusCode _statusCode = _httpResponse.StatusCode;
+ cancellationToken.ThrowIfCancellationRequested();
+ string _responseContent = null;
+ if ((int)_statusCode != 200)
+ {
+ var ex = new ErrorException(string.Format("Operation returned an invalid status code '{0}'", _statusCode));
+ try
+ {
+ _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false);
+ Error _errorBody = SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings);
+ if (_errorBody != null)
+ {
+ ex.Body = _errorBody;
+ }
+ }
+ catch (JsonException)
+ {
+ // Ignore the exception
+ }
+ ex.Request = new HttpRequestMessageWrapper(_httpRequest, _requestContent);
+ ex.Response = new HttpResponseMessageWrapper(_httpResponse, _responseContent);
+ if (_shouldTrace)
+ {
+ ServiceClientTracing.Error(_invocationId, ex);
+ }
+ _httpRequest.Dispose();
+ if (_httpResponse != null)
+ {
+ _httpResponse.Dispose();
+ }
+ throw ex;
+ }
+ // Create Result
+ var _result = new HttpOperationResponse();
+ _result.Request = _httpRequest;
+ _result.Response = _httpResponse;
+ // Deserialize Response
+ if ((int)_statusCode == 200)
+ {
+ _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false);
+ try
+ {
+ _result.Body = SafeJsonConvert.DeserializeObject(_responseContent, new UnixTimeJsonConverter());
+ }
+ catch (JsonException ex)
+ {
+ _httpRequest.Dispose();
+ if (_httpResponse != null)
+ {
+ _httpResponse.Dispose();
+ }
+ throw new SerializationException("Unable to deserialize the response.", _responseContent, ex);
+ }
+ }
+ if (_shouldTrace)
+ {
+ ServiceClientTracing.Exit(_invocationId, _result);
+ }
+ return _result;
+ }
+
+ ///
+ /// Get null Unix time value
+ ///
+ ///
+ /// Headers that will be added to request.
+ ///
+ ///
+ /// The cancellation token.
+ ///
+ ///
+ /// A response object containing the response body and response headers.
+ ///
+ public async Task> GetNullUnixTimeWithHttpMessagesAsync(Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken))
+ {
+ // Tracing
+ bool _shouldTrace = ServiceClientTracing.IsEnabled;
+ string _invocationId = null;
+ if (_shouldTrace)
+ {
+ _invocationId = ServiceClientTracing.NextInvocationId.ToString();
+ Dictionary tracingParameters = new Dictionary();
+ tracingParameters.Add("cancellationToken", cancellationToken);
+ ServiceClientTracing.Enter(_invocationId, this, "GetNullUnixTime", tracingParameters);
+ }
+ // Construct URL
+ var _baseUrl = this.Client.BaseUri.AbsoluteUri;
+ var _url = new Uri(new Uri(_baseUrl + (_baseUrl.EndsWith("/") ? "" : "/")), "int/nullunixtime").ToString();
+ // Create HTTP transport objects
+ HttpRequestMessage _httpRequest = new HttpRequestMessage();
+ HttpResponseMessage _httpResponse = null;
+ _httpRequest.Method = new HttpMethod("GET");
+ _httpRequest.RequestUri = new Uri(_url);
+ // Set Headers
+ if (customHeaders != null)
+ {
+ foreach(var _header in customHeaders)
+ {
+ if (_httpRequest.Headers.Contains(_header.Key))
+ {
+ _httpRequest.Headers.Remove(_header.Key);
+ }
+ _httpRequest.Headers.TryAddWithoutValidation(_header.Key, _header.Value);
+ }
+ }
+
+ // Serialize Request
+ string _requestContent = null;
+ // Send Request
+ if (_shouldTrace)
+ {
+ ServiceClientTracing.SendRequest(_invocationId, _httpRequest);
+ }
+ cancellationToken.ThrowIfCancellationRequested();
+ _httpResponse = await this.Client.HttpClient.SendAsync(_httpRequest, cancellationToken).ConfigureAwait(false);
+ if (_shouldTrace)
+ {
+ ServiceClientTracing.ReceiveResponse(_invocationId, _httpResponse);
+ }
+ HttpStatusCode _statusCode = _httpResponse.StatusCode;
+ cancellationToken.ThrowIfCancellationRequested();
+ string _responseContent = null;
+ if ((int)_statusCode != 200)
+ {
+ var ex = new ErrorException(string.Format("Operation returned an invalid status code '{0}'", _statusCode));
+ try
+ {
+ _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false);
+ Error _errorBody = SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings);
+ if (_errorBody != null)
+ {
+ ex.Body = _errorBody;
+ }
+ }
+ catch (JsonException)
+ {
+ // Ignore the exception
+ }
+ ex.Request = new HttpRequestMessageWrapper(_httpRequest, _requestContent);
+ ex.Response = new HttpResponseMessageWrapper(_httpResponse, _responseContent);
+ if (_shouldTrace)
+ {
+ ServiceClientTracing.Error(_invocationId, ex);
+ }
+ _httpRequest.Dispose();
+ if (_httpResponse != null)
+ {
+ _httpResponse.Dispose();
+ }
+ throw ex;
+ }
+ // Create Result
+ var _result = new HttpOperationResponse();
+ _result.Request = _httpRequest;
+ _result.Response = _httpResponse;
+ // Deserialize Response
+ if ((int)_statusCode == 200)
+ {
+ _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false);
+ try
+ {
+ _result.Body = SafeJsonConvert.DeserializeObject(_responseContent, new UnixTimeJsonConverter());
+ }
+ catch (JsonException ex)
+ {
+ _httpRequest.Dispose();
+ if (_httpResponse != null)
+ {
+ _httpResponse.Dispose();
+ }
+ throw new SerializationException("Unable to deserialize the response.", _responseContent, ex);
+ }
+ }
+ if (_shouldTrace)
+ {
+ ServiceClientTracing.Exit(_invocationId, _result);
+ }
+ return _result;
+ }
+
}
}
diff --git a/AutoRest/Generators/CSharp/CSharp.Tests/Expected/AcceptanceTests/CompositeBoolIntClient/IntModelExtensions.cs b/AutoRest/Generators/CSharp/CSharp.Tests/Expected/AcceptanceTests/CompositeBoolIntClient/IntModelExtensions.cs
index a203d3cee3..009277ea50 100644
--- a/AutoRest/Generators/CSharp/CSharp.Tests/Expected/AcceptanceTests/CompositeBoolIntClient/IntModelExtensions.cs
+++ b/AutoRest/Generators/CSharp/CSharp.Tests/Expected/AcceptanceTests/CompositeBoolIntClient/IntModelExtensions.cs
@@ -305,5 +305,118 @@ public static void PutMin64(this IIntModel operations, long intBody)
await operations.PutMin64WithHttpMessagesAsync(intBody, null, cancellationToken).ConfigureAwait(false);
}
+ ///
+ /// Get datetime encoded as Unix time value
+ ///
+ ///
+ /// The operations group for this extension method.
+ ///
+ public static DateTime? GetUnixTime(this IIntModel operations)
+ {
+ return Task.Factory.StartNew(s => ((IIntModel)s).GetUnixTimeAsync(), operations, CancellationToken.None, TaskCreationOptions.None, TaskScheduler.Default).Unwrap().GetAwaiter().GetResult();
+ }
+
+ ///
+ /// Get datetime encoded as Unix time value
+ ///
+ ///
+ /// The operations group for this extension method.
+ ///
+ ///
+ /// The cancellation token.
+ ///
+ public static async Task GetUnixTimeAsync(this IIntModel operations, CancellationToken cancellationToken = default(CancellationToken))
+ {
+ using (var _result = await operations.GetUnixTimeWithHttpMessagesAsync(null, cancellationToken).ConfigureAwait(false))
+ {
+ return _result.Body;
+ }
+ }
+
+ ///
+ /// Put datetime encoded as Unix time
+ ///
+ ///
+ /// The operations group for this extension method.
+ ///
+ ///
+ ///
+ public static void PutUnixTimeDate(this IIntModel operations, DateTime intBody)
+ {
+ Task.Factory.StartNew(s => ((IIntModel)s).PutUnixTimeDateAsync(intBody), operations, CancellationToken.None, TaskCreationOptions.None, TaskScheduler.Default).Unwrap().GetAwaiter().GetResult();
+ }
+
+ ///
+ /// Put datetime encoded as Unix time
+ ///
+ ///
+ /// The operations group for this extension method.
+ ///
+ ///
+ ///
+ ///
+ /// The cancellation token.
+ ///
+ public static async Task PutUnixTimeDateAsync(this IIntModel operations, DateTime intBody, CancellationToken cancellationToken = default(CancellationToken))
+ {
+ await operations.PutUnixTimeDateWithHttpMessagesAsync(intBody, null, cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// Get invalid Unix time value
+ ///
+ ///
+ /// The operations group for this extension method.
+ ///
+ public static DateTime? GetInvalidUnixTime(this IIntModel operations)
+ {
+ return Task.Factory.StartNew(s => ((IIntModel)s).GetInvalidUnixTimeAsync(), operations, CancellationToken.None, TaskCreationOptions.None, TaskScheduler.Default).Unwrap().GetAwaiter().GetResult();
+ }
+
+ ///
+ /// Get invalid Unix time value
+ ///
+ ///
+ /// The operations group for this extension method.
+ ///
+ ///
+ /// The cancellation token.
+ ///
+ public static async Task GetInvalidUnixTimeAsync(this IIntModel operations, CancellationToken cancellationToken = default(CancellationToken))
+ {
+ using (var _result = await operations.GetInvalidUnixTimeWithHttpMessagesAsync(null, cancellationToken).ConfigureAwait(false))
+ {
+ return _result.Body;
+ }
+ }
+
+ ///
+ /// Get null Unix time value
+ ///
+ ///
+ /// The operations group for this extension method.
+ ///
+ public static DateTime? GetNullUnixTime(this IIntModel operations)
+ {
+ return Task.Factory.StartNew(s => ((IIntModel)s).GetNullUnixTimeAsync(), operations, CancellationToken.None, TaskCreationOptions.None, TaskScheduler.Default).Unwrap().GetAwaiter().GetResult();
+ }
+
+ ///
+ /// Get null Unix time value
+ ///
+ ///
+ /// The operations group for this extension method.
+ ///
+ ///
+ /// The cancellation token.
+ ///
+ public static async Task GetNullUnixTimeAsync(this IIntModel operations, CancellationToken cancellationToken = default(CancellationToken))
+ {
+ using (var _result = await operations.GetNullUnixTimeWithHttpMessagesAsync(null, cancellationToken).ConfigureAwait(false))
+ {
+ return _result.Body;
+ }
+ }
+
}
}
diff --git a/AutoRest/Generators/CSharp/CSharp.Tests/Expected/AcceptanceTests/Url/IPaths.cs b/AutoRest/Generators/CSharp/CSharp.Tests/Expected/AcceptanceTests/Url/IPaths.cs
index ce60b9a5c2..d8f9e2c761 100644
--- a/AutoRest/Generators/CSharp/CSharp.Tests/Expected/AcceptanceTests/Url/IPaths.cs
+++ b/AutoRest/Generators/CSharp/CSharp.Tests/Expected/AcceptanceTests/Url/IPaths.cs
@@ -305,5 +305,18 @@ public partial interface IPaths
/// The cancellation token.
///
Task ArrayCsvInPathWithHttpMessagesAsync(IList arrayPath, Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken));
+ ///
+ /// Get the date 2016-04-13 encoded value as '1460505600' (Unix time)
+ ///
+ ///
+ /// Unix time encoded value
+ ///
+ ///
+ /// The headers that will be added to request.
+ ///
+ ///
+ /// The cancellation token.
+ ///
+ Task UnixTimeUrlWithHttpMessagesAsync(DateTime unixTimeUrlPath, Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken));
}
}
diff --git a/AutoRest/Generators/CSharp/CSharp.Tests/Expected/AcceptanceTests/Url/Paths.cs b/AutoRest/Generators/CSharp/CSharp.Tests/Expected/AcceptanceTests/Url/Paths.cs
index d880804521..3892f728ba 100644
--- a/AutoRest/Generators/CSharp/CSharp.Tests/Expected/AcceptanceTests/Url/Paths.cs
+++ b/AutoRest/Generators/CSharp/CSharp.Tests/Expected/AcceptanceTests/Url/Paths.cs
@@ -2692,5 +2692,111 @@ public Paths(AutoRestUrlTestService client)
return _result;
}
+ ///
+ /// Get the date 2016-04-13 encoded value as '1460505600' (Unix time)
+ ///
+ ///
+ /// Unix time encoded value
+ ///
+ ///
+ /// Headers that will be added to request.
+ ///
+ ///
+ /// The cancellation token.
+ ///
+ ///
+ /// A response object containing the response body and response headers.
+ ///
+ public async Task UnixTimeUrlWithHttpMessagesAsync(DateTime unixTimeUrlPath, Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken))
+ {
+ // Tracing
+ bool _shouldTrace = ServiceClientTracing.IsEnabled;
+ string _invocationId = null;
+ if (_shouldTrace)
+ {
+ _invocationId = ServiceClientTracing.NextInvocationId.ToString();
+ Dictionary tracingParameters = new Dictionary();
+ tracingParameters.Add("unixTimeUrlPath", unixTimeUrlPath);
+ tracingParameters.Add("cancellationToken", cancellationToken);
+ ServiceClientTracing.Enter(_invocationId, this, "UnixTimeUrl", tracingParameters);
+ }
+ // Construct URL
+ var _baseUrl = this.Client.BaseUri.AbsoluteUri;
+ var _url = new Uri(new Uri(_baseUrl + (_baseUrl.EndsWith("/") ? "" : "/")), "paths/int/1460505600/{unixTimeUrlPath}").ToString();
+ _url = _url.Replace("{unixTimeUrlPath}", Uri.EscapeDataString(SafeJsonConvert.SerializeObject(unixTimeUrlPath, new UnixTimeJsonConverter()).Trim('"')));
+ // Create HTTP transport objects
+ HttpRequestMessage _httpRequest = new HttpRequestMessage();
+ HttpResponseMessage _httpResponse = null;
+ _httpRequest.Method = new HttpMethod("GET");
+ _httpRequest.RequestUri = new Uri(_url);
+ // Set Headers
+ if (customHeaders != null)
+ {
+ foreach(var _header in customHeaders)
+ {
+ if (_httpRequest.Headers.Contains(_header.Key))
+ {
+ _httpRequest.Headers.Remove(_header.Key);
+ }
+ _httpRequest.Headers.TryAddWithoutValidation(_header.Key, _header.Value);
+ }
+ }
+
+ // Serialize Request
+ string _requestContent = null;
+ // Send Request
+ if (_shouldTrace)
+ {
+ ServiceClientTracing.SendRequest(_invocationId, _httpRequest);
+ }
+ cancellationToken.ThrowIfCancellationRequested();
+ _httpResponse = await this.Client.HttpClient.SendAsync(_httpRequest, cancellationToken).ConfigureAwait(false);
+ if (_shouldTrace)
+ {
+ ServiceClientTracing.ReceiveResponse(_invocationId, _httpResponse);
+ }
+ HttpStatusCode _statusCode = _httpResponse.StatusCode;
+ cancellationToken.ThrowIfCancellationRequested();
+ string _responseContent = null;
+ if ((int)_statusCode != 200)
+ {
+ var ex = new ErrorException(string.Format("Operation returned an invalid status code '{0}'", _statusCode));
+ try
+ {
+ _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false);
+ Error _errorBody = SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings);
+ if (_errorBody != null)
+ {
+ ex.Body = _errorBody;
+ }
+ }
+ catch (JsonException)
+ {
+ // Ignore the exception
+ }
+ ex.Request = new HttpRequestMessageWrapper(_httpRequest, _requestContent);
+ ex.Response = new HttpResponseMessageWrapper(_httpResponse, _responseContent);
+ if (_shouldTrace)
+ {
+ ServiceClientTracing.Error(_invocationId, ex);
+ }
+ _httpRequest.Dispose();
+ if (_httpResponse != null)
+ {
+ _httpResponse.Dispose();
+ }
+ throw ex;
+ }
+ // Create Result
+ var _result = new HttpOperationResponse();
+ _result.Request = _httpRequest;
+ _result.Response = _httpResponse;
+ if (_shouldTrace)
+ {
+ ServiceClientTracing.Exit(_invocationId, _result);
+ }
+ return _result;
+ }
+
}
}
diff --git a/AutoRest/Generators/CSharp/CSharp.Tests/Expected/AcceptanceTests/Url/PathsExtensions.cs b/AutoRest/Generators/CSharp/CSharp.Tests/Expected/AcceptanceTests/Url/PathsExtensions.cs
index 65ea07ea61..b4e8d2ce26 100644
--- a/AutoRest/Generators/CSharp/CSharp.Tests/Expected/AcceptanceTests/Url/PathsExtensions.cs
+++ b/AutoRest/Generators/CSharp/CSharp.Tests/Expected/AcceptanceTests/Url/PathsExtensions.cs
@@ -712,5 +712,36 @@ public static void ArrayCsvInPath(this IPaths operations, IList arrayPat
await operations.ArrayCsvInPathWithHttpMessagesAsync(arrayPath, null, cancellationToken).ConfigureAwait(false);
}
+ ///
+ /// Get the date 2016-04-13 encoded value as '1460505600' (Unix time)
+ ///
+ ///
+ /// The operations group for this extension method.
+ ///
+ ///
+ /// Unix time encoded value
+ ///
+ public static void UnixTimeUrl(this IPaths operations, DateTime unixTimeUrlPath)
+ {
+ Task.Factory.StartNew(s => ((IPaths)s).UnixTimeUrlAsync(unixTimeUrlPath), operations, CancellationToken.None, TaskCreationOptions.None, TaskScheduler.Default).Unwrap().GetAwaiter().GetResult();
+ }
+
+ ///
+ /// Get the date 2016-04-13 encoded value as '1460505600' (Unix time)
+ ///
+ ///
+ /// The operations group for this extension method.
+ ///
+ ///
+ /// Unix time encoded value
+ ///
+ ///
+ /// The cancellation token.
+ ///
+ public static async Task UnixTimeUrlAsync(this IPaths operations, DateTime unixTimeUrlPath, CancellationToken cancellationToken = default(CancellationToken))
+ {
+ await operations.UnixTimeUrlWithHttpMessagesAsync(unixTimeUrlPath, null, cancellationToken).ConfigureAwait(false);
+ }
+
}
}
diff --git a/AutoRest/Generators/CSharp/CSharp/CSharpCodeNamer.cs b/AutoRest/Generators/CSharp/CSharp/CSharpCodeNamer.cs
index d9562cf4ca..3504b01cb5 100644
--- a/AutoRest/Generators/CSharp/CSharp/CSharpCodeNamer.cs
+++ b/AutoRest/Generators/CSharp/CSharp/CSharpCodeNamer.cs
@@ -297,6 +297,10 @@ protected virtual IType NormalizePrimaryType(PrimaryType primaryType)
{
primaryType.Name = "ServiceClientCredentials";
}
+ else if (primaryType.Type == KnownPrimaryType.UnixTime)
+ {
+ primaryType.Name = "DateTime";
+ }
else if (primaryType.Type == KnownPrimaryType.Uuid)
{
primaryType.Name = "Guid";
@@ -401,7 +405,8 @@ public override string EscapeDefaultValue(string defaultValue, IType type)
primaryType.Type == KnownPrimaryType.DateTimeRfc1123 ||
primaryType.Type == KnownPrimaryType.TimeSpan ||
primaryType.Type == KnownPrimaryType.ByteArray ||
- primaryType.Type == KnownPrimaryType.Base64Url)
+ primaryType.Type == KnownPrimaryType.Base64Url ||
+ primaryType.Type == KnownPrimaryType.UnixTime)
{
return "SafeJsonConvert.DeserializeObject<" + primaryType.Name.TrimEnd('?') +
diff --git a/AutoRest/Generators/CSharp/CSharp/ClientModelExtensions.cs b/AutoRest/Generators/CSharp/CSharp/ClientModelExtensions.cs
index ded2055e68..ae4d9f1115 100644
--- a/AutoRest/Generators/CSharp/CSharp/ClientModelExtensions.cs
+++ b/AutoRest/Generators/CSharp/CSharp/ClientModelExtensions.cs
@@ -225,6 +225,10 @@ public static string ToString(this IType type, string clientReference, string re
{
serializationSettings = "new Base64UrlJsonConverter()";
}
+ else if (primaryType.Type == KnownPrimaryType.UnixTime)
+ {
+ serializationSettings = "new UnixTimeJsonConverter()";
+ }
}
return string.Format(CultureInfo.InvariantCulture,
@@ -268,6 +272,7 @@ public static bool IsValueType(this IType type)
|| primaryType.Type == KnownPrimaryType.Long
|| primaryType.Type == KnownPrimaryType.TimeSpan
|| primaryType.Type == KnownPrimaryType.DateTimeRfc1123
+ || primaryType.Type == KnownPrimaryType.UnixTime
|| primaryType.Type == KnownPrimaryType.Uuid));
}
diff --git a/AutoRest/Generators/CSharp/CSharp/TemplateModels/MethodTemplateModel.cs b/AutoRest/Generators/CSharp/CSharp/TemplateModels/MethodTemplateModel.cs
index cc44708181..22d1ca5461 100644
--- a/AutoRest/Generators/CSharp/CSharp/TemplateModels/MethodTemplateModel.cs
+++ b/AutoRest/Generators/CSharp/CSharp/TemplateModels/MethodTemplateModel.cs
@@ -325,32 +325,22 @@ public string ClientReference
///
public string GetSerializationSettingsReference(IType serializationType)
{
- SequenceType sequenceType = serializationType as SequenceType;
- DictionaryType dictionaryType = serializationType as DictionaryType;
- if (serializationType.IsPrimaryType(KnownPrimaryType.Date) ||
- (sequenceType != null && sequenceType.ElementType is PrimaryType
- && ((PrimaryType)sequenceType.ElementType).Type == KnownPrimaryType.Date) ||
- (dictionaryType != null && dictionaryType.ValueType is PrimaryType
- && ((PrimaryType)dictionaryType.ValueType).Type == KnownPrimaryType.Date))
+ if (serializationType.IsOrContainsPrimaryType(KnownPrimaryType.Date))
{
return "new DateJsonConverter()";
}
- else if (serializationType.IsPrimaryType(KnownPrimaryType.DateTimeRfc1123) ||
- (sequenceType != null && sequenceType.ElementType is PrimaryType
- && ((PrimaryType)sequenceType.ElementType).Type == KnownPrimaryType.DateTimeRfc1123) ||
- (dictionaryType != null && dictionaryType.ValueType is PrimaryType
- && ((PrimaryType)dictionaryType.ValueType).Type == KnownPrimaryType.DateTimeRfc1123))
+ else if (serializationType.IsOrContainsPrimaryType(KnownPrimaryType.DateTimeRfc1123))
{
return "new DateTimeRfc1123JsonConverter()";
}
- else if (serializationType.IsPrimaryType(KnownPrimaryType.Base64Url) ||
- (sequenceType != null && sequenceType.ElementType is PrimaryType
- && ((PrimaryType)sequenceType.ElementType).Type == KnownPrimaryType.Base64Url) ||
- (dictionaryType != null && dictionaryType.ValueType is PrimaryType
- && ((PrimaryType)dictionaryType.ValueType).Type == KnownPrimaryType.Base64Url))
+ else if (serializationType.IsOrContainsPrimaryType(KnownPrimaryType.Base64Url))
{
return "new Base64UrlJsonConverter()";
}
+ else if (serializationType.IsOrContainsPrimaryType(KnownPrimaryType.UnixTime))
+ {
+ return "new UnixTimeJsonConverter()";
+ }
return ClientReference + ".SerializationSettings";
}
@@ -361,25 +351,18 @@ public string GetSerializationSettingsReference(IType serializationType)
///
public string GetDeserializationSettingsReference(IType deserializationType)
{
- SequenceType sequenceType = deserializationType as SequenceType;
- DictionaryType dictionaryType = deserializationType as DictionaryType;
- if (deserializationType.IsPrimaryType(KnownPrimaryType.Date) ||
- (sequenceType != null && sequenceType.ElementType is PrimaryType
- && ((PrimaryType)sequenceType.ElementType).Type == KnownPrimaryType.Date) ||
- (dictionaryType != null && dictionaryType.ValueType is PrimaryType
- && ((PrimaryType)dictionaryType.ValueType).Type == KnownPrimaryType.Date))
+ if (deserializationType.IsOrContainsPrimaryType(KnownPrimaryType.Date))
{
return "new DateJsonConverter()";
}
- if (deserializationType.IsPrimaryType(KnownPrimaryType.Base64Url) ||
- (sequenceType != null && sequenceType.ElementType is PrimaryType
- && ((PrimaryType)sequenceType.ElementType).Type == KnownPrimaryType.Base64Url) ||
- (dictionaryType != null && dictionaryType.ValueType is PrimaryType
- && ((PrimaryType)dictionaryType.ValueType).Type == KnownPrimaryType.Base64Url))
+ else if (deserializationType.IsOrContainsPrimaryType(KnownPrimaryType.Base64Url))
{
return "new Base64UrlJsonConverter()";
}
-
+ else if (deserializationType.IsOrContainsPrimaryType(KnownPrimaryType.UnixTime))
+ {
+ return "new UnixTimeJsonConverter()";
+ }
return ClientReference + ".DeserializationSettings";
}
diff --git a/AutoRest/Generators/CSharp/CSharp/Templates/ModelTemplate.cshtml b/AutoRest/Generators/CSharp/CSharp/Templates/ModelTemplate.cshtml
index 2bcf9676f0..942e67ef80 100644
--- a/AutoRest/Generators/CSharp/CSharp/Templates/ModelTemplate.cshtml
+++ b/AutoRest/Generators/CSharp/CSharp/Templates/ModelTemplate.cshtml
@@ -123,6 +123,10 @@ namespace @(Settings.Namespace).Models
{
@:[JsonConverter(typeof(Base64UrlJsonConverter))]
}
+ if (property.Type.IsPrimaryType(KnownPrimaryType.UnixTime))
+ {
+ @:[JsonConverter(typeof(UnixTimeJsonConverter))]
+ }
@:[JsonProperty(PropertyName = "@property.SerializedName")]
@:public @property.Type.Name @property.Name { get; @(property.IsReadOnly ? "private " : "")set; }
@EmptyLine
@@ -145,6 +149,10 @@ namespace @(Settings.Namespace).Models
{
@:[JsonConverter(typeof(Base64UrlJsonConverter))]
}
+ if (property.Type.IsPrimaryType(KnownPrimaryType.UnixTime))
+ {
+ @:[JsonConverter(typeof(UnixTimeJsonConverter))]
+ }
@:[JsonProperty(PropertyName = "@property.SerializedName")]
@:public static @property.Type.Name @property.Name { get; private set; }
@EmptyLine
diff --git a/AutoRest/Generators/Java/Java/TypeModels/PrimaryTypeModel.cs b/AutoRest/Generators/Java/Java/TypeModels/PrimaryTypeModel.cs
index 2d5a2fad78..d6990c79ff 100644
--- a/AutoRest/Generators/Java/Java/TypeModels/PrimaryTypeModel.cs
+++ b/AutoRest/Generators/Java/Java/TypeModels/PrimaryTypeModel.cs
@@ -202,6 +202,10 @@ private void Initialize(PrimaryType primaryType)
Name = "Period";
_imports.Add("org.joda.time.Period");
}
+ else if (primaryType.Type == KnownPrimaryType.UnixTime)
+ {
+ Name = "long";
+ }
else if (primaryType.Type == KnownPrimaryType.Uuid)
{
Name = "UUID";
diff --git a/AutoRest/Generators/NodeJS/NodeJS/NodeJsCodeNamer.cs b/AutoRest/Generators/NodeJS/NodeJS/NodeJsCodeNamer.cs
index 53ac858681..d2f43a402f 100644
--- a/AutoRest/Generators/NodeJS/NodeJS/NodeJsCodeNamer.cs
+++ b/AutoRest/Generators/NodeJS/NodeJS/NodeJsCodeNamer.cs
@@ -393,6 +393,10 @@ private static IType NormalizePrimaryType(PrimaryType primaryType)
{
primaryType.Name = "moment.duration";
}
+ else if (primaryType.Type == KnownPrimaryType.UnixTime)
+ {
+ primaryType.Name = "Number";
+ }
else if (primaryType.Type == KnownPrimaryType.Uuid)
{
primaryType.Name = "Uuid";
diff --git a/AutoRest/Generators/Python/Python/PythonCodeNamer.cs b/AutoRest/Generators/Python/Python/PythonCodeNamer.cs
index 4aebfb6378..11ae0801ac 100644
--- a/AutoRest/Generators/Python/Python/PythonCodeNamer.cs
+++ b/AutoRest/Generators/Python/Python/PythonCodeNamer.cs
@@ -376,6 +376,10 @@ private static IType NormalizePrimaryType(PrimaryType primaryType)
{
primaryType.Name = "Decimal";
}
+ else if (primaryType.Type == KnownPrimaryType.UnixTime)
+ {
+ primaryType.Name = "long";
+ }
else if (primaryType.Type == KnownPrimaryType.Object) // Revisit here
{
primaryType.Name = "object";
diff --git a/AutoRest/Generators/Ruby/Ruby/RubyCodeNamer.cs b/AutoRest/Generators/Ruby/Ruby/RubyCodeNamer.cs
index bcb90309c6..c40423ee1b 100644
--- a/AutoRest/Generators/Ruby/Ruby/RubyCodeNamer.cs
+++ b/AutoRest/Generators/Ruby/Ruby/RubyCodeNamer.cs
@@ -372,6 +372,10 @@ private IType NormalizePrimaryType(PrimaryType primaryType)
{
primaryType.Name = "Duration";
}
+ else if (primaryType.Type == KnownPrimaryType.UnixTime)
+ {
+ primaryType.Name = "Bignum";
+ }
else if (primaryType.Type == KnownPrimaryType.Object)
{
primaryType.Name = "Object";
diff --git a/AutoRest/Modelers/Swagger/Model/SwaggerObject.cs b/AutoRest/Modelers/Swagger/Model/SwaggerObject.cs
index 2ca86ef10d..02bfb0d23b 100644
--- a/AutoRest/Modelers/Swagger/Model/SwaggerObject.cs
+++ b/AutoRest/Modelers/Swagger/Model/SwaggerObject.cs
@@ -132,6 +132,10 @@ public PrimaryType ToType()
{
return new PrimaryType(KnownPrimaryType.Long);
}
+ if (string.Equals("unixtime", Format, StringComparison.OrdinalIgnoreCase))
+ {
+ return new PrimaryType(KnownPrimaryType.UnixTime);
+ }
return new PrimaryType(KnownPrimaryType.Int);
case DataType.Boolean:
return new PrimaryType(KnownPrimaryType.Boolean);
diff --git a/AutoRest/TestServer/server/app.js b/AutoRest/TestServer/server/app.js
index 8bb3b105ba..9453e73965 100644
--- a/AutoRest/TestServer/server/app.js
+++ b/AutoRest/TestServer/server/app.js
@@ -195,15 +195,6 @@ var coverage = {
"getStringWithLeadingAndTrailingWhitespace" : 0,
"putStringWithLeadingAndTrailingWhitespace" : 0,
"getStringNotProvided": 0,
- /* TODO: only C# and node.js support the base64url format currently. Exclude these tests from code coverage until it is implemented in other languages */
- "getStringBase64Encoded": 1,
- "getStringBase64UrlEncoded": 1,
- "putStringBase64UrlEncoded": 1,
- "getStringNullBase64UrlEncoding": 1,
- "getArrayBase64Url": 1,
- "getDictionaryBase64Url": 1,
- "UrlPathsStringBase64Url": 1,
- "UrlPathsArrayCSVInPath": 1,
"getEnumNotExpandable": 0,
"putEnumNotExpandable":0,
"putComplexBasicValid": 0,
@@ -438,7 +429,22 @@ var coverage = {
'putModelFlattenResourceCollection': 0,
'putModelFlattenCustomBase': 0,
'postModelFlattenCustomParameter': 0,
- 'putModelFlattenCustomGroupedParameter': 0
+ 'putModelFlattenCustomGroupedParameter': 0,
+ /* TODO: only C# and node.js support the base64url format currently. Exclude these tests from code coverage until it is implemented in other languages */
+ "getStringBase64Encoded": 1,
+ "getStringBase64UrlEncoded": 1,
+ "putStringBase64UrlEncoded": 1,
+ "getStringNullBase64UrlEncoding": 1,
+ "getArrayBase64Url": 1,
+ "getDictionaryBase64Url": 1,
+ "UrlPathsStringBase64Url": 1,
+ "UrlPathsArrayCSVInPath": 1,
+ /* TODO: only C# supports the unixtime format currently. Exclude these tests from code coverage until it is implemented in other languages */
+ "getUnixTime": 1,
+ "getInvalidUnixTime": 1,
+ "getNullUnixTime": 1,
+ "putUnixTime": 1,
+ "UrlPathsIntUnixTime": 1
};
// view engine setup
diff --git a/AutoRest/TestServer/server/routes/int.js b/AutoRest/TestServer/server/routes/int.js
index 2299732ca5..f4acbd7104 100644
--- a/AutoRest/TestServer/server/routes/int.js
+++ b/AutoRest/TestServer/server/routes/int.js
@@ -65,10 +65,27 @@ var integer = function(coverage) {
} else if (req.params.scenario === 'underflowint64') {
coverage['getLongUnderflow']++;
res.status(200).end('-9223372036854775910');
+ } else if (req.params.scenario === 'unixtime') {
+ coverage['getUnixTime']++;
+ res.status(200).end('1460505600');
+ } else if (req.params.scenario === 'invalidunixtime') {
+ coverage['getInvalidUnixTime']++;
+ res.status(200).end('123jkl');
+ } else if (req.params.scenario === 'nullunixtime') {
+ coverage['getNullUnixTime']++;
+ res.status(200).end();
} else {
res.status(400).send('Request path must contain true or false');
}
-
+ });
+
+ router.put('/unixtime', function(req, res, next) {
+ if (req.body != 1460505600) {
+ utils.send400(res, next, "Did not like the value provided for unixtime in the req " + util.inspect(req.body));
+ } else {
+ coverage['putUnixTime']++;
+ res.status(200).end();
+ }
});
}
diff --git a/AutoRest/TestServer/server/routes/paths.js b/AutoRest/TestServer/server/routes/paths.js
index ba1b8e99df..04b5002453 100644
--- a/AutoRest/TestServer/server/routes/paths.js
+++ b/AutoRest/TestServer/server/routes/paths.js
@@ -23,6 +23,7 @@ var scenarioMap = {
"2012-01-01T01:01:01Z": "Valid",
"green color" : "Valid",
"bG9yZW0" : "Base64Url",
+ "1460505600": "UnixTime",
"ArrayPath1,begin!*'();:@ &=+$,/?#[]end,,": "CSVInPath"
};
diff --git a/AutoRest/TestServer/swagger/body-integer.json b/AutoRest/TestServer/swagger/body-integer.json
index 00b73a2c27..5f321e2981 100644
--- a/AutoRest/TestServer/swagger/body-integer.json
+++ b/AutoRest/TestServer/swagger/body-integer.json
@@ -251,6 +251,95 @@
}
}
}
+ },
+ "/int/unixtime": {
+ "get": {
+ "operationId": "int_getUnixTime",
+ "description": "Get datetime encoded as Unix time value",
+ "responses": {
+ "200": {
+ "description": "The date value encoded as Unix time",
+ "schema": {
+ "type": "integer",
+ "format": "unixtime"
+ }
+ },
+ "default": {
+ "description": "Unexpected error",
+ "schema": {
+ "$ref": "#/definitions/Error"
+ }
+ }
+ }
+ },
+ "put": {
+ "operationId": "int_putUnixTimeDate",
+ "description": "Put datetime encoded as Unix time",
+ "parameters": [
+ {
+ "name": "intBody",
+ "in": "body",
+ "schema": {
+ "type": "integer",
+ "format": "unixtime"
+ },
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The datetime value encoded as Unix time"
+ },
+ "default": {
+ "description": "Unexpected error",
+ "schema": {
+ "$ref": "#/definitions/Error"
+ }
+ }
+ }
+ }
+ },
+ "/int/invalidunixtime": {
+ "get": {
+ "operationId": "int_getInvalidUnixTime",
+ "description": "Get invalid Unix time value",
+ "responses": {
+ "200": {
+ "description": "The invalid Unix time value",
+ "schema": {
+ "type": "integer",
+ "format": "unixtime"
+ }
+ },
+ "default": {
+ "description": "Unexpected error",
+ "schema": {
+ "$ref": "#/definitions/Error"
+ }
+ }
+ }
+ }
+ },
+ "/int/nullunixtime": {
+ "get": {
+ "operationId": "int_getNullUnixTime",
+ "description": "Get null Unix time value",
+ "responses": {
+ "200": {
+ "description": "The null Unix time value",
+ "schema": {
+ "type": "integer",
+ "format": "unixtime"
+ }
+ },
+ "default": {
+ "description": "Unexpected error",
+ "schema": {
+ "$ref": "#/definitions/Error"
+ }
+ }
+ }
+ }
}
},
"definitions": {
diff --git a/AutoRest/TestServer/swagger/url.json b/AutoRest/TestServer/swagger/url.json
index 4bf4530d17..670ff00f9b 100644
--- a/AutoRest/TestServer/swagger/url.json
+++ b/AutoRest/TestServer/swagger/url.json
@@ -773,6 +773,36 @@
}
}
},
+ "/paths/int/1460505600/{unixTimeUrlPath}": {
+ "get": {
+ "operationId": "paths_unixTimeUrl",
+ "description": "Get the date 2016-04-13 encoded value as '1460505600' (Unix time)",
+ "tags": [
+ "Path Operations"
+ ],
+ "parameters": [
+ {
+ "name": "unixTimeUrlPath",
+ "in": "path",
+ "description": "Unix time encoded value",
+ "type": "integer",
+ "format": "unixtime",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully Received date 2016-04-13 encoded value as '1460505600' (Unix time)"
+ },
+ "default": {
+ "description": "Unexpected error",
+ "schema": {
+ "$ref": "#/definitions/Error"
+ }
+ }
+ }
+ }
+ },
"/queries/bool/true": {
"get": {
"operationId": "queries_getBooleanTrue",
diff --git a/ClientRuntimes/CSharp/Microsoft.Rest.ClientRuntime/Serialization/UnixTimeJsonConverter.cs b/ClientRuntimes/CSharp/Microsoft.Rest.ClientRuntime/Serialization/UnixTimeJsonConverter.cs
new file mode 100644
index 0000000000..fd345541a6
--- /dev/null
+++ b/ClientRuntimes/CSharp/Microsoft.Rest.ClientRuntime/Serialization/UnixTimeJsonConverter.cs
@@ -0,0 +1,77 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License. See License.txt in the project root for license information.
+
+using System;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Microsoft.Rest.Serialization
+{
+ public class UnixTimeJsonConverter : JsonConverter
+ {
+ public static readonly DateTime EpochDate = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
+
+ ///
+ /// Converts a byte array to a Base64Url encoded string
+ ///
+ /// The byte array to convert
+ /// The Base64Url encoded form of the input
+ private static long? ToUnixTime(DateTime dateTime)
+ {
+ return (long?)dateTime.Subtract(EpochDate).TotalSeconds;
+ }
+
+ ///
+ /// Converts a Base64Url encoded string to a byte array
+ ///
+ /// The Base64Url encoded string
+ /// The byte array represented by the enconded string
+ private static DateTime? FromUnixTime(long? seconds)
+ {
+ if (seconds.HasValue)
+ {
+ return EpochDate.AddSeconds(seconds.Value);
+ }
+ return null;
+ }
+
+ public override bool CanConvert(Type objectType)
+ {
+ if (objectType == typeof(DateTime?) || objectType == typeof(DateTime))
+ return true;
+
+ return false;
+ }
+
+ public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
+ {
+ if (objectType != typeof(DateTime?))
+ {
+ return serializer.Deserialize(reader, objectType);
+ }
+ else
+ {
+ var value = serializer.Deserialize(reader);
+
+ if (value.HasValue)
+ {
+ return FromUnixTime(value);
+ }
+ }
+
+ return null;
+ }
+
+ public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
+ {
+ if (value.GetType() != typeof(DateTime))
+ {
+ JToken.FromObject(value).WriteTo(writer);
+ }
+ else
+ {
+ JToken.FromObject(ToUnixTime((DateTime)value)).WriteTo(writer);
+ }
+ }
+ }
+}
\ No newline at end of file