Skip to content

Commit

Permalink
feat(common): support null value for reference type collection elemen…
Browse files Browse the repository at this point in the history
…ts (#3163)

- update `SerializationBuilder` to set `ValueSerialization.IsNullable : true` for reference type collection elements
  - that will add null value handling in deserialization logic for collection elements of reference type
- generate null check in generated serialization/deserialization codes for:
  - nullable value type
  - list/dictionary types
  - some framework reference types
- optimize null value processing so that we don't generate null check codes
  - for custom model types, put null value processing logic into the deserialization method of each model
  - for string, use default serialization/deserialization methods which can handle null value
  - update `byte[]` serializatoin/deserialization methods so that they can handle null value, so that we don't generate null check codes externally
- fix 3 test cases previously do not accept null value in collections in response, now we align with other language implementaion on that

resolve #3159
  • Loading branch information
archerzz authored Mar 2, 2023
1 parent ec012c6 commit 936d073
Show file tree
Hide file tree
Showing 1,363 changed files with 6,085 additions and 256 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,10 @@ void IUtf8JsonSerializable.Write(Utf8JsonWriter writer)

internal static AlignPolicy DeserializeAlignPolicy(JsonElement element)
{
if (element.ValueKind == JsonValueKind.Null)
{
return null;
}
Optional<AlignMode?> alignMode = default;
Optional<FillNAMethod?> fillNAMethod = default;
Optional<float?> paddingValue = default;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@ public partial class AnomalyDetectionModel
{
internal static AnomalyDetectionModel DeserializeAnomalyDetectionModel(JsonElement element)
{
if (element.ValueKind == JsonValueKind.Null)
{
return null;
}
string modelId = default;
DateTimeOffset createdTime = default;
DateTimeOffset lastUpdatedTime = default;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,10 @@ public partial class AnomalyInterpretation
{
internal static AnomalyInterpretation DeserializeAnomalyInterpretation(JsonElement element)
{
if (element.ValueKind == JsonValueKind.Null)
{
return null;
}
Optional<string> variable = default;
Optional<float?> contributionScore = default;
Optional<CorrelationChanges> correlationChanges = default;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,10 @@ public partial class AnomalyState
{
internal static AnomalyState DeserializeAnomalyState(JsonElement element)
{
if (element.ValueKind == JsonValueKind.Null)
{
return null;
}
DateTimeOffset timestamp = default;
Optional<AnomalyValue> value = default;
Optional<IReadOnlyList<ErrorResponse>> errors = default;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@ public partial class AnomalyValue
{
internal static AnomalyValue DeserializeAnomalyValue(JsonElement element)
{
if (element.ValueKind == JsonValueKind.Null)
{
return null;
}
bool isAnomaly = default;
float severity = default;
float score = default;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@ public partial class CorrelationChanges
{
internal static CorrelationChanges DeserializeCorrelationChanges(JsonElement element)
{
if (element.ValueKind == JsonValueKind.Null)
{
return null;
}
Optional<IReadOnlyList<string>> changedVariables = default;
foreach (var property in element.EnumerateObject())
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,10 @@ void IUtf8JsonSerializable.Write(Utf8JsonWriter writer)

internal static DiagnosticsInfo DeserializeDiagnosticsInfo(JsonElement element)
{
if (element.ValueKind == JsonValueKind.Null)
{
return null;
}
Optional<ModelState> modelState = default;
Optional<IList<VariableState>> variableStates = default;
foreach (var property in element.EnumerateObject())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,10 @@ void IUtf8JsonSerializable.Write(Utf8JsonWriter writer)

internal static ErrorResponse DeserializeErrorResponse(JsonElement element)
{
if (element.ValueKind == JsonValueKind.Null)
{
return null;
}
string code = default;
string message = default;
foreach (var property in element.EnumerateObject())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,10 @@ void IUtf8JsonSerializable.Write(Utf8JsonWriter writer)

internal static ModelInfo DeserializeModelInfo(JsonElement element)
{
if (element.ValueKind == JsonValueKind.Null)
{
return null;
}
string dataSource = default;
Optional<DataSchema?> dataSchema = default;
DateTimeOffset startTime = default;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,10 @@ void IUtf8JsonSerializable.Write(Utf8JsonWriter writer)

internal static ModelState DeserializeModelState(JsonElement element)
{
if (element.ValueKind == JsonValueKind.Null)
{
return null;
}
Optional<IList<int>> epochIds = default;
Optional<IList<float>> trainLosses = default;
Optional<IList<float>> validationLosses = default;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,10 @@ void IUtf8JsonSerializable.Write(Utf8JsonWriter writer)

internal static MultivariateBatchDetectionOptions DeserializeMultivariateBatchDetectionOptions(JsonElement element)
{
if (element.ValueKind == JsonValueKind.Null)
{
return null;
}
string dataSource = default;
int topContributorCount = default;
DateTimeOffset startTime = default;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@ public partial class MultivariateBatchDetectionResultSummary
{
internal static MultivariateBatchDetectionResultSummary DeserializeMultivariateBatchDetectionResultSummary(JsonElement element)
{
if (element.ValueKind == JsonValueKind.Null)
{
return null;
}
MultivariateBatchDetectionStatus status = default;
Optional<IReadOnlyList<ErrorResponse>> errors = default;
Optional<IReadOnlyList<VariableState>> variableStates = default;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@ public partial class MultivariateDetectionResult
{
internal static MultivariateDetectionResult DeserializeMultivariateDetectionResult(JsonElement element)
{
if (element.ValueKind == JsonValueKind.Null)
{
return null;
}
string resultId = default;
MultivariateBatchDetectionResultSummary summary = default;
IReadOnlyList<AnomalyState> results = default;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@ public partial class MultivariateLastDetectionResult
{
internal static MultivariateLastDetectionResult DeserializeMultivariateLastDetectionResult(JsonElement element)
{
if (element.ValueKind == JsonValueKind.Null)
{
return null;
}
Optional<IReadOnlyList<VariableState>> variableStates = default;
Optional<IReadOnlyList<AnomalyState>> results = default;
foreach (var property in element.EnumerateObject())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@ public partial class UnivariateChangePointDetectionResult
{
internal static UnivariateChangePointDetectionResult DeserializeUnivariateChangePointDetectionResult(JsonElement element)
{
if (element.ValueKind == JsonValueKind.Null)
{
return null;
}
Optional<int?> period = default;
Optional<IReadOnlyList<bool>> isChangePoint = default;
Optional<IReadOnlyList<float>> confidenceScores = default;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@ public partial class UnivariateEntireDetectionResult
{
internal static UnivariateEntireDetectionResult DeserializeUnivariateEntireDetectionResult(JsonElement element)
{
if (element.ValueKind == JsonValueKind.Null)
{
return null;
}
int period = default;
IReadOnlyList<float> expectedValues = default;
IReadOnlyList<float> upperMargins = default;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,10 @@ public partial class UnivariateLastDetectionResult
{
internal static UnivariateLastDetectionResult DeserializeUnivariateLastDetectionResult(JsonElement element)
{
if (element.ValueKind == JsonValueKind.Null)
{
return null;
}
int period = default;
int suggestedWindow = default;
float expectedValue = default;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,10 @@ void IUtf8JsonSerializable.Write(Utf8JsonWriter writer)

internal static VariableState DeserializeVariableState(JsonElement element)
{
if (element.ValueKind == JsonValueKind.Null)
{
return null;
}
Optional<string> variable = default;
Optional<float?> filledNARatio = default;
Optional<int?> effectiveCount = default;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,10 @@ internal partial class Error
{
internal static Error DeserializeError(JsonElement element)
{
if (element.ValueKind == JsonValueKind.Null)
{
return null;
}
Optional<string> type = default;
Optional<string> title = default;
Optional<string> name = default;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,10 @@ public partial class Key
{
internal static Key DeserializeKey(JsonElement element)
{
if (element.ValueKind == JsonValueKind.Null)
{
return null;
}
Optional<string> name = default;
foreach (var property in element.EnumerateObject())
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,10 @@ internal partial class KeyListResult
{
internal static KeyListResult DeserializeKeyListResult(JsonElement element)
{
if (element.ValueKind == JsonValueKind.Null)
{
return null;
}
Optional<IReadOnlyList<Key>> items = default;
Optional<string> nextLink = default;
foreach (var property in element.EnumerateObject())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,10 @@ void IUtf8JsonSerializable.Write(Utf8JsonWriter writer)

internal static KeyValue DeserializeKeyValue(JsonElement element)
{
if (element.ValueKind == JsonValueKind.Null)
{
return null;
}
Optional<string> key = default;
Optional<string> label = default;
Optional<string> contentType = default;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,10 @@ internal partial class KeyValueListResult
{
internal static KeyValueListResult DeserializeKeyValueListResult(JsonElement element)
{
if (element.ValueKind == JsonValueKind.Null)
{
return null;
}
Optional<IReadOnlyList<KeyValue>> items = default;
Optional<string> nextLink = default;
foreach (var property in element.EnumerateObject())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,10 @@ public partial class Label
{
internal static Label DeserializeLabel(JsonElement element)
{
if (element.ValueKind == JsonValueKind.Null)
{
return null;
}
Optional<string> name = default;
foreach (var property in element.EnumerateObject())
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,10 @@ internal partial class LabelListResult
{
internal static LabelListResult DeserializeLabelListResult(JsonElement element)
{
if (element.ValueKind == JsonValueKind.Null)
{
return null;
}
Optional<IReadOnlyList<Label>> items = default;
Optional<string> nextLink = default;
foreach (var property in element.EnumerateObject())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,10 @@ public partial class AnalyzeOperationResult
{
internal static AnalyzeOperationResult DeserializeAnalyzeOperationResult(JsonElement element)
{
if (element.ValueKind == JsonValueKind.Null)
{
return null;
}
OperationStatus status = default;
DateTimeOffset createdDateTime = default;
DateTimeOffset lastUpdatedDateTime = default;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,10 @@ public partial class AnalyzeResult
{
internal static AnalyzeResult DeserializeAnalyzeResult(JsonElement element)
{
if (element.ValueKind == JsonValueKind.Null)
{
return null;
}
string version = default;
IReadOnlyList<ReadResult> readResults = default;
Optional<IReadOnlyList<PageResult>> pageResults = default;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,10 @@ void IUtf8JsonSerializable.Write(Utf8JsonWriter writer)

internal static CopyAuthorizationResult DeserializeCopyAuthorizationResult(JsonElement element)
{
if (element.ValueKind == JsonValueKind.Null)
{
return null;
}
string modelId = default;
string accessToken = default;
long expirationDateTimeTicks = default;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,10 @@ public partial class CopyOperationResult
{
internal static CopyOperationResult DeserializeCopyOperationResult(JsonElement element)
{
if (element.ValueKind == JsonValueKind.Null)
{
return null;
}
OperationStatus status = default;
DateTimeOffset createdDateTime = default;
DateTimeOffset lastUpdatedDateTime = default;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@ public partial class CopyResult
{
internal static CopyResult DeserializeCopyResult(JsonElement element)
{
if (element.ValueKind == JsonValueKind.Null)
{
return null;
}
Guid modelId = default;
Optional<IReadOnlyList<ErrorInformation>> errors = default;
foreach (var property in element.EnumerateObject())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,10 @@ public partial class DataTable
{
internal static DataTable DeserializeDataTable(JsonElement element)
{
if (element.ValueKind == JsonValueKind.Null)
{
return null;
}
int rows = default;
int columns = default;
IReadOnlyList<DataTableCell> cells = default;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,10 @@ public partial class DataTableCell
{
internal static DataTableCell DeserializeDataTableCell(JsonElement element)
{
if (element.ValueKind == JsonValueKind.Null)
{
return null;
}
int rowIndex = default;
int columnIndex = default;
Optional<int> rowSpan = default;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,10 @@ public partial class DocumentResult
{
internal static DocumentResult DeserializeDocumentResult(JsonElement element)
{
if (element.ValueKind == JsonValueKind.Null)
{
return null;
}
string docType = default;
IReadOnlyList<int> pageRange = default;
IReadOnlyDictionary<string, FieldValue> fields = default;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,10 @@ public partial class ErrorInformation
{
internal static ErrorInformation DeserializeErrorInformation(JsonElement element)
{
if (element.ValueKind == JsonValueKind.Null)
{
return null;
}
string code = default;
string message = default;
foreach (var property in element.EnumerateObject())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,10 @@ internal partial class ErrorResponse
{
internal static ErrorResponse DeserializeErrorResponse(JsonElement element)
{
if (element.ValueKind == JsonValueKind.Null)
{
return null;
}
ErrorInformation error = default;
foreach (var property in element.EnumerateObject())
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@ public partial class FieldValue
{
internal static FieldValue DeserializeFieldValue(JsonElement element)
{
if (element.ValueKind == JsonValueKind.Null)
{
return null;
}
FieldValueType type = default;
Optional<string> valueString = default;
Optional<DateTimeOffset> valueDate = default;
Expand Down
Loading

0 comments on commit 936d073

Please sign in to comment.