Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/SDK/Language/Unity.php
Original file line number Diff line number Diff line change
Expand Up @@ -669,7 +669,7 @@ public function getFiles(): array
public function getFilters(): array
{
return [
new TwigFilter('unityComment', function ($value) {
new TwigFilter('dotnetComment', function ($value) {
$value = explode("\n", $value);
foreach ($value as $key => $line) {
$value[$key] = " /// " . wordwrap($line, 75, "\n /// ");
Expand Down
Original file line number Diff line number Diff line change
@@ -1,44 +1 @@
using System;
using System.Collections.Generic;
using System.Text.Json;
using System.Text.Json.Serialization;

namespace {{ spec.title | caseUcfirst }}.Converters
{
public class ObjectToInferredTypesConverter : JsonConverter<object>
{
public override object Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
switch (reader.TokenType)
{
case JsonTokenType.True:
return true;
case JsonTokenType.False:
return false;
case JsonTokenType.Number:
if (reader.TryGetInt64(out long l))
{
return l;
}
return reader.GetDouble();
case JsonTokenType.String:
if (reader.TryGetDateTime(out DateTime datetime))
{
return datetime;
}
return reader.GetString()!;
case JsonTokenType.StartObject:
return JsonSerializer.Deserialize<Dictionary<string, object>>(ref reader, options)!;
case JsonTokenType.StartArray:
return JsonSerializer.Deserialize<object[]>(ref reader, options)!;
default:
return JsonDocument.ParseValue(ref reader).RootElement.Clone();
}
}

public override void Write(Utf8JsonWriter writer, object objectToWrite, JsonSerializerOptions options)
{
JsonSerializer.Serialize(writer, objectToWrite, objectToWrite.GetType(), options);
}
}
}
{% include 'dotnet/shared/Converters/ObjectToInferredTypesConverter.cs.twig' %}
40 changes: 1 addition & 39 deletions templates/dotnet/Package/Converters/ValueClassConverter.cs.twig
Original file line number Diff line number Diff line change
@@ -1,39 +1 @@
using System;
using System.Text.Json;
using System.Text.Json.Serialization;
using {{ spec.title | caseUcfirst }}.Enums;

namespace {{ spec.title | caseUcfirst }}.Converters
{
public class ValueClassConverter : JsonConverter<object>
{
public override bool CanConvert(Type objectType)
{
return typeof(IEnum).IsAssignableFrom(objectType);
}

public override object Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
var value = reader.GetString();
var constructor = typeToConvert.GetConstructor(new[] { typeof(string) });
var obj = constructor?.Invoke(new object[] { value! });

return Convert.ChangeType(obj, typeToConvert)!;
}

public override void Write(Utf8JsonWriter writer, object value, JsonSerializerOptions options)
{
var type = value.GetType();
var property = type.GetProperty(nameof(IEnum.Value));
var propertyValue = property?.GetValue(value);

if (propertyValue == null)
{
writer.WriteNullValue();
return;
}

writer.WriteStringValue(propertyValue.ToString());
}
}
}
{% include 'dotnet/shared/Converters/ValueClassConverter.cs.twig' %}
20 changes: 1 addition & 19 deletions templates/dotnet/Package/Enums/Enum.cs.twig
Original file line number Diff line number Diff line change
@@ -1,19 +1 @@
using System;

namespace {{ spec.title | caseUcfirst }}.Enums
{
public class {{ enum.name | caseUcfirst | overrideIdentifier }} : IEnum
{
public string Value { get; private set; }

public {{ enum.name | caseUcfirst | overrideIdentifier }}(string value)
{
Value = value;
}

{%~ for value in enum.enum %}
{%~ set key = enum.keys is empty ? value : enum.keys[loop.index0] %}
public static {{ enum.name | caseUcfirst | overrideIdentifier }} {{ key | caseEnumKey }} => new {{ enum.name | caseUcfirst | overrideIdentifier }}("{{ value }}");
{%~ endfor %}
}
}
{% include 'dotnet/shared/Enums/Enum.cs.twig' %}
10 changes: 1 addition & 9 deletions templates/dotnet/Package/Enums/IEnum.cs.twig
Original file line number Diff line number Diff line change
@@ -1,9 +1 @@
using System;

namespace {{ spec.title | caseUcfirst }}.Enums
{
public interface IEnum
{
public string Value { get; }
}
}
{% include 'dotnet/shared/Enums/IEnum.cs.twig' %}
28 changes: 1 addition & 27 deletions templates/dotnet/Package/Exception.cs.twig
Original file line number Diff line number Diff line change
@@ -1,27 +1 @@
using System;

namespace {{spec.title | caseUcfirst}}
{
public class {{spec.title | caseUcfirst}}Exception : Exception
{
public int? Code { get; set; }
public string? Type { get; set; } = null;
public string? Response { get; set; } = null;

public {{spec.title | caseUcfirst}}Exception(
string? message = null,
int? code = null,
string? type = null,
string? response = null) : base(message)
{
this.Code = code;
this.Type = type;
this.Response = response;
}
public {{spec.title | caseUcfirst}}Exception(string message, Exception inner)
: base(message, inner)
{
}
}
}

{% include 'dotnet/shared/Exception.cs.twig' %}
Loading