From 06d4cbb41a6a073b0a1d031ff8697c5f27adeddd Mon Sep 17 00:00:00 2001 From: glopesdev Date: Mon, 8 Jan 2024 09:10:36 +0000 Subject: [PATCH 1/3] Generate serializer library provenance --- Bonsai.Sgen/CSharpCodeDomTemplate.cs | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/Bonsai.Sgen/CSharpCodeDomTemplate.cs b/Bonsai.Sgen/CSharpCodeDomTemplate.cs index 73a2dc2..97c1006 100644 --- a/Bonsai.Sgen/CSharpCodeDomTemplate.cs +++ b/Bonsai.Sgen/CSharpCodeDomTemplate.cs @@ -8,6 +8,8 @@ namespace Bonsai.Sgen internal abstract class CSharpCodeDomTemplate : ITemplate { private static readonly AssemblyName GeneratorAssemblyName = Assembly.GetExecutingAssembly().GetName(); + private static readonly AssemblyName NewtonsoftJsonAssemblyName = typeof(Newtonsoft.Json.JsonConvert).Assembly.GetName(); + private static readonly AssemblyName YamlDotNetAssemblyName = typeof(YamlDotNet.Core.Parser).Assembly.GetName(); public CSharpCodeDomTemplate( CodeDomProvider provider, @@ -29,13 +31,32 @@ public CSharpCodeDomTemplate( public abstract void BuildType(CodeTypeDeclaration type); + private static string GetVersionString(AssemblyName assemblyName) + { + return $"{assemblyName.Name} v{assemblyName.Version}"; + } + + private string GetVersionString() + { + var serializerLibraries = new List(); + if (Settings.SerializerLibraries.HasFlag(SerializerLibraries.NewtonsoftJson)) + { + serializerLibraries.Add(GetVersionString(NewtonsoftJsonAssemblyName)); + } + if (Settings.SerializerLibraries.HasFlag(SerializerLibraries.YamlDotNet)) + { + serializerLibraries.Add(GetVersionString(YamlDotNetAssemblyName)); + } + return $"{GeneratorAssemblyName.Version} ({string.Join(", ", serializerLibraries)})"; + } + public string Render() { var type = new CodeTypeDeclaration(TypeName) { IsPartial = true }; type.CustomAttributes.Add(new CodeAttributeDeclaration( new CodeTypeReference(typeof(GeneratedCodeAttribute)), new CodeAttributeArgument(new CodePrimitiveExpression(GeneratorAssemblyName.Name)), - new CodeAttributeArgument(new CodePrimitiveExpression(GeneratorAssemblyName.Version?.ToString())))); + new CodeAttributeArgument(new CodePrimitiveExpression(GetVersionString())))); BuildType(type); using var writer = new StringWriter(); From 9c3879397a87a814831d93e31735363e847a2797 Mon Sep 17 00:00:00 2001 From: glopesdev Date: Mon, 8 Jan 2024 09:11:05 +0000 Subject: [PATCH 2/3] Assert JSON serializer library version --- Bonsai.Sgen/Bonsai.Sgen.csproj | 1 + 1 file changed, 1 insertion(+) diff --git a/Bonsai.Sgen/Bonsai.Sgen.csproj b/Bonsai.Sgen/Bonsai.Sgen.csproj index dfc4687..9e8ba58 100644 --- a/Bonsai.Sgen/Bonsai.Sgen.csproj +++ b/Bonsai.Sgen/Bonsai.Sgen.csproj @@ -10,6 +10,7 @@ + From 66585e8314d2f29078ed39693b0936b6f4018b67 Mon Sep 17 00:00:00 2001 From: glopesdev Date: Mon, 8 Jan 2024 09:14:15 +0000 Subject: [PATCH 3/3] Update README file --- README.md | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index c8e2971..e6e3b71 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,15 @@ -# sgen -Tool for automatically generating YML serialization classes from schema files +# Serializer Generator Tool + +Tool for automatically generating YAML / JSON serialization classes and constructor operators from schema files. ## Getting Started -1. Navigate to the [Bonsai.Sgen toolbox NuGet package](https://www.nuget.org/packages/Bonsai.Sgen/) -2. Click `NET CLI (Local)` and copy the two suggested commands. E.g.: +1. Navigate to the [Bonsai.Sgen NuGet tool package](https://www.nuget.org/packages/Bonsai.Sgen/) +2. Click `.NET CLI (Local)` and copy the two suggested commands. E.g.: ```cmd dotnet new tool-manifest # if you are setting up this repo - dotnet tool install --local Bonsai.Sgen --version 0.1.0 + dotnet tool install --local Bonsai.Sgen --version 0.2.0 ``` 3. To view the tool help reference documentation, run: @@ -17,25 +18,31 @@ Tool for automatically generating YML serialization classes from schema files dotnet bonsai.sgen --help ``` -4. To generate serialization classes from a schema file: +4. To generate YAML serialization classes from a schema file: + + ```cmd + dotnet bonsai.sgen --schema schema.json --serializer YamlDotNet + ``` + +5. To generate JSON serialization classes from a schema file: ```cmd - dotnet bonsai.sgen --schema schema.json + dotnet bonsai.sgen --schema schema.json --serializer NewtonsoftJson ``` -5. Copy the generated class file to your project `Extensions` folder. +6. Copy the generated class file to your project `Extensions` folder. -6. Add the necessary package references to your `Extensions.csproj` file. For instance: +7. Add the necessary package references to your `Extensions.csproj` file. For example: ```xml - + ``` -7. To restore the tool at any point, run: +8. To restore the tool at any point, run: ```cmd dotnet tool restore