Skip to content

Commit 72df047

Browse files
Stefan Schickarturcic
authored andcommitted
Implement custom deserializer
1 parent 972ce71 commit 72df047

File tree

5 files changed

+43
-1
lines changed

5 files changed

+43
-1
lines changed

src/GitVersion.Configuration/ConfigurationSerializer.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using GitVersion.VersionCalculation;
12
using YamlDotNet.Serialization;
23
using YamlDotNet.Serialization.NamingConventions;
34
using YamlDotNet.Serialization.TypeInspectors;
@@ -8,6 +9,7 @@ internal class ConfigurationSerializer : IConfigurationSerializer
89
{
910
private static IDeserializer Deserializer => new DeserializerBuilder()
1011
.WithNamingConvention(HyphenatedNamingConvention.Instance)
12+
.WithTypeConverter(VersionStrategiesConverter.Instance)
1113
.WithTypeInspector(inspector => new JsonPropertyNameInspector(inspector))
1214
.Build();
1315

src/GitVersion.Core/GitVersion.Core.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
<PackageReference Include="Polly" />
1616
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" />
1717
<PackageReference Include="Microsoft.Extensions.Options" />
18+
<PackageReference Include="YamlDotNet" />
1819
</ItemGroup>
1920

2021
<ItemGroup>

src/GitVersion.Core/PublicAPI.Shipped.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -707,6 +707,12 @@ GitVersion.VersionCalculation.VersionStrategies.None = 0 -> GitVersion.VersionCa
707707
GitVersion.VersionCalculation.VersionStrategies.TaggedCommit = 8 -> GitVersion.VersionCalculation.VersionStrategies
708708
GitVersion.VersionCalculation.VersionStrategies.TrackReleaseBranches = 16 -> GitVersion.VersionCalculation.VersionStrategies
709709
GitVersion.VersionCalculation.VersionStrategies.VersionInBranchName = 32 -> GitVersion.VersionCalculation.VersionStrategies
710+
GitVersion.VersionCalculation.VersionStrategiesConverter
711+
GitVersion.VersionCalculation.VersionStrategiesConverter.VersionStrategiesConverter() -> void
712+
static readonly GitVersion.VersionCalculation.VersionStrategiesConverter.Instance -> YamlDotNet.Serialization.IYamlTypeConverter!
713+
GitVersion.VersionCalculation.VersionStrategiesConverter.Accepts(System.Type type) -> bool
714+
GitVersion.VersionCalculation.VersionStrategiesConverter.ReadYaml(YamlDotNet.Core.IParser! parser, System.Type! type, YamlDotNet.Serialization.ObjectDeserializer! rootDeserializer) -> object?
715+
GitVersion.VersionCalculation.VersionStrategiesConverter.WriteYaml(YamlDotNet.Core.IEmitter! emitter, object? value, System.Type! type, YamlDotNet.Serialization.ObjectSerializer! serializer) -> void
710716
GitVersion.VersionCalculation.VersionStrategyModule
711717
GitVersion.VersionCalculation.VersionStrategyModule.RegisterTypes(Microsoft.Extensions.DependencyInjection.IServiceCollection! services) -> void
712718
GitVersion.VersionCalculation.VersionStrategyModule.VersionStrategyModule() -> void

src/GitVersion.Core/VersionCalculation/VersionStrategies.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
namespace GitVersion.VersionCalculation;
22

33
[Flags]
4-
[JsonConverter(typeof(JsonStringEnumConverter))]
54
public enum VersionStrategies
65
{
76
None = 0,
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
using YamlDotNet.Core;
2+
using YamlDotNet.Core.Events;
3+
using YamlDotNet.Serialization;
4+
using YamlDotNet.Serialization.NamingConventions;
5+
6+
namespace GitVersion.VersionCalculation;
7+
8+
public class VersionStrategiesConverter : IYamlTypeConverter
9+
{
10+
public static readonly IYamlTypeConverter Instance = new VersionStrategiesConverter();
11+
12+
public bool Accepts(Type type)
13+
{
14+
return type == typeof(VersionStrategies[]);
15+
}
16+
17+
public object? ReadYaml(IParser parser, Type type, ObjectDeserializer rootDeserializer)
18+
{
19+
string data = parser.Consume<Scalar>().Value;
20+
21+
var deserializer = new DeserializerBuilder()
22+
.WithNamingConvention(UnderscoredNamingConvention.Instance) // see height_in_inches in sample yml
23+
.Build();
24+
25+
VersionStrategies[] strategies = deserializer.Deserialize<VersionStrategies[]>(data);
26+
27+
return strategies;
28+
}
29+
30+
public void WriteYaml(IEmitter emitter, object? value, Type type, ObjectSerializer serializer)
31+
{
32+
// Convert from an object to text during serialization.
33+
}
34+
}

0 commit comments

Comments
 (0)