align with go json unmarshal (#1397)
This commit is contained in:
@@ -99,7 +99,7 @@ namespace k8s.Models
|
|||||||
|
|
||||||
protected bool Equals(ResourceQuantity other)
|
protected bool Equals(ResourceQuantity other)
|
||||||
{
|
{
|
||||||
return Format == other?.Format && _unitlessValue.Equals(other._unitlessValue);
|
return _unitlessValue.Equals(other?._unitlessValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override bool Equals(object obj)
|
public override bool Equals(object obj)
|
||||||
|
|||||||
@@ -2,9 +2,23 @@ namespace k8s.Models
|
|||||||
{
|
{
|
||||||
internal sealed class ResourceQuantityJsonConverter : JsonConverter<ResourceQuantity>
|
internal sealed class ResourceQuantityJsonConverter : JsonConverter<ResourceQuantity>
|
||||||
{
|
{
|
||||||
|
// https://github.com/kubernetes/apimachinery/blob/4b14f804a0babdcc58e695d72f77ad29f536511e/pkg/api/resource/quantity.go#L683
|
||||||
public override ResourceQuantity Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
|
public override ResourceQuantity Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
|
||||||
{
|
{
|
||||||
return new ResourceQuantity(reader.GetString());
|
switch (reader.TokenType)
|
||||||
|
{
|
||||||
|
case JsonTokenType.Null:
|
||||||
|
return new ResourceQuantity(null);
|
||||||
|
case JsonTokenType.Number:
|
||||||
|
if (reader.TryGetDouble(out var val))
|
||||||
|
{
|
||||||
|
return new ResourceQuantity(Convert.ToString(val));
|
||||||
|
}
|
||||||
|
|
||||||
|
return reader.GetDecimal();
|
||||||
|
default:
|
||||||
|
return new ResourceQuantity(reader.GetString());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Write(Utf8JsonWriter writer, ResourceQuantity value, JsonSerializerOptions options)
|
public override void Write(Utf8JsonWriter writer, ResourceQuantity value, JsonSerializerOptions options)
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
using k8s.Models;
|
using k8s.Models;
|
||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
using static k8s.Models.ResourceQuantity.SuffixFormat;
|
using static k8s.Models.ResourceQuantity.SuffixFormat;
|
||||||
|
|
||||||
@@ -200,7 +201,7 @@ namespace k8s.Tests
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Serialize()
|
public void SerializeJson()
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
ResourceQuantity quantity = 12000;
|
ResourceQuantity quantity = 12000;
|
||||||
@@ -209,10 +210,25 @@ namespace k8s.Tests
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void DeserializeYaml()
|
public void DeserializeJson()
|
||||||
{
|
{
|
||||||
var value = KubernetesYaml.Deserialize<ResourceQuantity>("\"1\"");
|
// str
|
||||||
Assert.Equal(new ResourceQuantity(1, 0, DecimalSI), value);
|
{
|
||||||
|
var value = KubernetesJson.Deserialize<Dictionary<string, ResourceQuantity>>(@"{""cpu"": ""1.1""}");
|
||||||
|
Assert.Equal(new ResourceQuantity(11, -1, DecimalSI), value["cpu"]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// int
|
||||||
|
{
|
||||||
|
var value = KubernetesJson.Deserialize<Dictionary<string, ResourceQuantity>>(@"{""cpu"": 1}");
|
||||||
|
Assert.Equal(new ResourceQuantity(1, 0, DecimalSI), value["cpu"]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// double
|
||||||
|
{
|
||||||
|
var value = KubernetesJson.Deserialize<Dictionary<string, ResourceQuantity>>(@"{""cpu"": 1.1}");
|
||||||
|
Assert.Equal(new ResourceQuantity(11, -1, DecimalSI), value["cpu"]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
@@ -221,5 +237,27 @@ namespace k8s.Tests
|
|||||||
var value = KubernetesYaml.Serialize(new ResourceQuantity(1, -1, DecimalSI));
|
var value = KubernetesYaml.Serialize(new ResourceQuantity(1, -1, DecimalSI));
|
||||||
Assert.Equal("100m", value);
|
Assert.Equal("100m", value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void DeserializeYaml()
|
||||||
|
{
|
||||||
|
// str
|
||||||
|
{
|
||||||
|
var value = KubernetesYaml.Deserialize<ResourceQuantity>("\"1\"");
|
||||||
|
Assert.Equal(new ResourceQuantity(1, 0, DecimalSI), value);
|
||||||
|
}
|
||||||
|
|
||||||
|
// int
|
||||||
|
{
|
||||||
|
var value = KubernetesYaml.Deserialize<ResourceQuantity>("1");
|
||||||
|
Assert.Equal(new ResourceQuantity(1, 0, DecimalSI), value);
|
||||||
|
}
|
||||||
|
|
||||||
|
// double
|
||||||
|
{
|
||||||
|
var value = KubernetesYaml.Deserialize<ResourceQuantity>("1.1");
|
||||||
|
Assert.Equal(new ResourceQuantity(11, -1, DecimalSI), value);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user