Skip to content
Merged
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
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="BenchmarkDotNet" Version="0.15.2" />
<PackageReference Include="BenchmarkDotNet" Version="0.15.6" />
</ItemGroup>

<ItemGroup>
Expand Down
2 changes: 1 addition & 1 deletion demo/Primify.Demo/Primify.Demo.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

<ItemGroup>
<PackageReference Include="LiteDB" Version="5.0.21" />
<PackageReference Include="primify" Version="1.4.22" />
<PackageReference Include="primify" Version="1.4.23" />
</ItemGroup>

</Project>
16 changes: 7 additions & 9 deletions src/Primify.Generators/PrimifyGenerator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,7 @@ ImmutableArray<TypeDeclarationWithDiagnostics> typeDeclarations
var toStringOverride = GenerateToStringOverride();
var liteDbInitializer = GenerateLiteDbInitializer(wrapperName, wrapperArgument);
var implicitCasting = GenerateImplicitCasting(wrapperName, wrapperArgument);
var explicitCasting = GenerateExplicitCasting(wrapperName, wrapperArgument);
var implicitExplicitCasting = GenerateImplicitExplicitCasting(wrapperName, wrapperArgument);

// Build up the source code
var code = $$"""
Expand Down Expand Up @@ -226,7 +226,7 @@ namespace {{namespaceName}};

{{implicitCasting}}

{{explicitCasting}}
{{implicitExplicitCasting}}

{{toStringOverride}}

Expand Down Expand Up @@ -317,10 +317,10 @@ private static string GenerateToStringOverride() =>
public override string ToString() => Value.ToString();
""";

private static string GenerateExplicitCasting(string name, string argument) =>
private static string GenerateImplicitExplicitCasting(string name, string argument) =>
$"""
public static explicit operator {name}({argument} value) => From(value);
public static explicit operator {argument}({name} value) => value.Value;
public static implicit operator {name}({argument} value) => From(value);
public static implicit operator {argument}({name} value) => value.Value;
""";

private static string GenerateImplicitCasting(string name, string argument)
Expand Down Expand Up @@ -376,11 +376,9 @@ private static string GenerateImplicitCasting(string name, string argument)

return $"""
// Casting for BSON
public static implicit operator LiteDB.BsonValue({name} value) =>
{toBson};
public static implicit operator LiteDB.BsonValue({name} value) => {toBson};

public static implicit operator {name}(LiteDB.BsonValue value)
{fromBsonImplementation}
public static implicit operator {name}(LiteDB.BsonValue value) {fromBsonImplementation}
""";
}

Expand Down
13 changes: 13 additions & 0 deletions src/Primify/.idea/.idea.Primify.dir/.idea/.gitignore

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions src/Primify/.idea/.idea.Primify.dir/.idea/indexLayout.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 7 additions & 0 deletions src/Primify/.idea/.idea.Primify.dir/.idea/vcs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions src/Primify/Primify.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,14 @@
<PropertyGroup>
<TargetFramework>net9.0</TargetFramework>
<PackageId>Primify</PackageId>
<Version>1.4.23</Version>
<Version>1.5.0</Version>
<IsPackable>true</IsPackable>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="LiteDB" Version="5.0.21"/>
<PackageReference Include="Newtonsoft.Json" Version="13.0.3"/>
<PackageReference Include="Newtonsoft.Json" Version="13.0.4" />
<PackageReference Include="Newtonsoft.Json.Bson" Version="1.0.3"/>
</ItemGroup>

Expand Down
97 changes: 65 additions & 32 deletions tests/Primify.Tests/Class1Tests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,37 @@ public void Class1_CreatesType_WhenFromIsCalled()
Assert.Equal(expectedValue, result.Value);
}

[Fact]
public void Class1_SuccessfullyConverts_WhenSetImplicitly()
{
// Arrange
int expectedValue = 1001;

// Act
Class1 result = expectedValue;
testOutputHelper.WriteLine(result.ToString());

// Assert
Assert.Equal(expectedValue, result.Value);
Assert.Equal(expectedValue, result.Value);
}

[Fact]
public void Class1_SuccessfullyConverts_WhenDereferencedImplicitly()
{
// Arrange
int expectedValue = 1001;
var input = Class1.From(expectedValue);

// Act
int result = input;
testOutputHelper.WriteLine(result.ToString());

// Assert
Assert.Equal(expectedValue, result);
Assert.Equal(expectedValue, result);
}

[Fact]
public void Class1_CreatesType_WhenExplicitlyCastToFromType()
{
Expand Down Expand Up @@ -74,16 +105,16 @@ public void Class1WithPredefinedProperty_IgnoresReadonly_WhenSerializedWithSyste

Assert.Equal(expectedValue, result.Value);

// System.Text.Json serialization
var json = JsonSerializer.Serialize(result);
testOutputHelper.WriteLine("\nSystem.Text.Json serialization:");
testOutputHelper.WriteLine(json);
// System.Text.Json serialization
var json = JsonSerializer.Serialize(result);
testOutputHelper.WriteLine("\nSystem.Text.Json serialization:");
testOutputHelper.WriteLine(json);

// System.Text.Json deserialization
var stjDeserialized = JsonSerializer.Deserialize<Class1WithPredefinedProperty>(json);
testOutputHelper.WriteLine("\nSystem.Text.Json deserialized value:");
testOutputHelper.WriteLine(stjDeserialized?.ToString() ?? "null");
Assert.Equal(expectedValue, stjDeserialized?.Value);
// System.Text.Json deserialization
var stjDeserialized = JsonSerializer.Deserialize<Class1WithPredefinedProperty>(json);
testOutputHelper.WriteLine("\nSystem.Text.Json deserialized value:");
testOutputHelper.WriteLine(stjDeserialized?.ToString() ?? "null");
Assert.Equal(expectedValue, stjDeserialized?.Value);
}

[Fact]
Expand All @@ -104,7 +135,8 @@ public void Class1WithPredefinedProperty_IgnoresReadonly_WhenSerializedNewtonsof
testOutputHelper.WriteLine(newtonsoftJson);

// Newtonsoft.Json deserialization
var njsDeserialized = Newtonsoft.Json.JsonConvert.DeserializeObject<Class1WithPredefinedProperty>(newtonsoftJson);
var njsDeserialized =
Newtonsoft.Json.JsonConvert.DeserializeObject<Class1WithPredefinedProperty>(newtonsoftJson);
testOutputHelper.WriteLine("\nNewtonsoft.Json deserialized value:");
testOutputHelper.WriteLine(njsDeserialized?.ToString() ?? "null");
Assert.Equal(expectedValue, njsDeserialized?.Value);
Expand All @@ -122,27 +154,28 @@ public void Class1WithPredefinedProperty_IgnoresReadonly_WhenSerializedNewtonsof

Assert.Equal(expectedValue, result.Value);

// BSON serialization
using var ms = new MemoryStream();
using (var writer = new Newtonsoft.Json.Bson.BsonDataWriter(ms))
{
var serializer = new Newtonsoft.Json.JsonSerializer();
serializer.Serialize(writer, result);
}
var bsonBytes = ms.ToArray();
var bsonBase64 = Convert.ToBase64String(bsonBytes);
testOutputHelper.WriteLine("\nBSON serialization (Base64):");
testOutputHelper.WriteLine(bsonBase64);

// BSON deserialization
using var ms2 = new MemoryStream(bsonBytes);
using (var reader = new Newtonsoft.Json.Bson.BsonDataReader(ms2))
{
var serializer = new Newtonsoft.Json.JsonSerializer();
var bsonDeserialized = serializer.Deserialize<Class1WithPredefinedProperty>(reader);
testOutputHelper.WriteLine("\nBSON deserialized value:");
testOutputHelper.WriteLine(bsonDeserialized?.ToString() ?? "null");
Assert.Equal(expectedValue, bsonDeserialized?.Value);
}
// BSON serialization
using var ms = new MemoryStream();
using (var writer = new Newtonsoft.Json.Bson.BsonDataWriter(ms))
{
var serializer = new Newtonsoft.Json.JsonSerializer();
serializer.Serialize(writer, result);
}

var bsonBytes = ms.ToArray();
var bsonBase64 = Convert.ToBase64String(bsonBytes);
testOutputHelper.WriteLine("\nBSON serialization (Base64):");
testOutputHelper.WriteLine(bsonBase64);

// BSON deserialization
using var ms2 = new MemoryStream(bsonBytes);
using (var reader = new Newtonsoft.Json.Bson.BsonDataReader(ms2))
{
var serializer = new Newtonsoft.Json.JsonSerializer();
var bsonDeserialized = serializer.Deserialize<Class1WithPredefinedProperty>(reader);
testOutputHelper.WriteLine("\nBSON deserialized value:");
testOutputHelper.WriteLine(bsonDeserialized?.ToString() ?? "null");
Assert.Equal(expectedValue, bsonDeserialized?.Value);
}
}
}
4 changes: 2 additions & 2 deletions tests/Primify.Tests/Primify.Tests.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,10 @@
<ItemGroup>
<PackageReference Include="LiteDB" Version="5.0.21"/>
<PackageReference Include="Microsoft.CodeAnalysis.CSharp.SourceGenerators.Testing.XUnit" Version="1.1.2"/>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.14.1"/>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.0.0" />
<PackageReference Include="Newtonsoft.Json.Bson" Version="1.0.3"/>
<PackageReference Include="xunit" Version="2.9.3"/>
<PackageReference Include="xunit.runner.visualstudio" Version="3.1.1">
<PackageReference Include="xunit.runner.visualstudio" Version="3.1.5">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
Expand Down
Loading