Meziantou.Framework.StronglyTypedId 1.0.16

Prefix Reserved
There is a newer version of this package available.
See the version list below for details.
dotnet add package Meziantou.Framework.StronglyTypedId --version 1.0.16                
NuGet\Install-Package Meziantou.Framework.StronglyTypedId -Version 1.0.16                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Meziantou.Framework.StronglyTypedId" Version="1.0.16">
  <PrivateAssets>all</PrivateAssets>
  <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Meziantou.Framework.StronglyTypedId --version 1.0.16                
#r "nuget: Meziantou.Framework.StronglyTypedId, 1.0.16"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install Meziantou.Framework.StronglyTypedId as a Cake Addin
#addin nuget:?package=Meziantou.Framework.StronglyTypedId&version=1.0.16

// Install Meziantou.Framework.StronglyTypedId as a Cake Tool
#tool nuget:?package=Meziantou.Framework.StronglyTypedId&version=1.0.16                

Meziantou.Framework.StronglyTypedId

The source generator generates ctor / properties / equality members / JSON converters

[StronglyTypedId(typeof(int))]
public partial struct ProjectId { }

StronglyTypedId generates the following code:

[System.ComponentModel.TypeConverterAttribute(typeof(ProjectIdTypeConverter))]
[System.Text.Json.Serialization.JsonConverterAttribute(typeof(ProjectIdJsonConverter))]
[Newtonsoft.Json.JsonConverterAttribute(typeof(ProjectIdNewtonsoftJsonConverter))]
[MongoDB.Bson.Serialization.Attributes.BsonSerializerAttribute(typeof(ProjectIdMongoDBBsonSerializer))]
public partial struct ProjectId : System.IEquatable<ProjectId>
{
    public int Value { get; }
    public string ValueAsString { get; }

    private ProjectId(int value);

    public static ProjectId FromInt32(int value);
    public static ProjectId Parse(string value);
    public static ProjectId Parse(ReadOnlySpan<char> value);
    public static bool TryParse(string value, out ProjectId result);
    public static bool TryParse(ReadOnlySpan<char> value, out ProjectId result);
    public override int GetHashCode();
    public override bool Equals(object? other);
    public bool Equals(ProjectId other);
    public static bool operator ==(ProjectId a, ProjectId b);
    public static bool operator !=(ProjectId a, ProjectId b);
    public override string ToString();

    private partial class CustomerIdTypeConverter : System.ComponentModel.TypeConverter
    {
        public override bool CanConvertFrom(System.ComponentModel.ITypeDescriptorContext context, System.Type sourceType);
        public override object? ConvertFrom(System.ComponentModel.ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value);
        public override bool CanConvertTo(System.ComponentModel.ITypeDescriptorContext context, System.Type destinationType);
        public override object ConvertTo(System.ComponentModel.ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, System.Type destinationType);
    }

    // Generated only when System.Text.Json is accessible
    private partial class CustomerIdJsonConverter : System.Text.Json.Serialization.JsonConverter<ProjectId>
    {
        public override void Write(System.Text.Json.Utf8JsonWriter writer, ProjectId value, System.Text.Json.JsonSerializerOptions options);
        public override ProjectId Read(ref System.Text.Json.Utf8JsonReader reader, System.Type typeToConvert, System.Text.Json.JsonSerializerOptions options);
    }

    // Generated only when Newtonsoft.Json is accessible
    private partial class CustomerIdNewtonsoftJsonConverter : Newtonsoft.Json.JsonConverter
    {
        public override bool CanRead { get; }
        public override bool CanWrite { get; }
        public override bool CanConvert(System.Type type);
        public override void WriteJson(Newtonsoft.Json.JsonWriter writer, object? value, Newtonsoft.Json.JsonSerializer serializer);
        public override object ReadJson(Newtonsoft.Json.JsonReader reader, System.Type objectType, object? existingValue, Newtonsoft.Json.JsonSerializer serializer);
    }

    // Generated only when MongoDB.Bson.Serialization.Serializers.SerializerBase is accessible
    private partial class ProjectIdMongoDBBsonSerializer : MongoDB.Bson.Serialization.Serializers.SerializerBase<Meziantou.Framework.StronglyTypedId.GeneratorTests.StronglyTypedIdTests.IdBoolean>
    {
        public override ProjectId Deserialize(MongoDB.Bson.Serialization.BsonDeserializationContext context, MongoDB.Bson.Serialization.BsonDeserializationArgs args);
        public override void Serialize(MongoDB.Bson.Serialization.BsonSerializationContext context, MongoDB.Bson.Serialization.BsonSerializationArgs args, ProjectId value);
    }
}

Configuration

You can configure the code generation using the [StronglyTypedIdAttribute] attribute:

[StronglyTypedId(idType: typeof(long),
                 generateSystemTextJsonConverter: true,
                 generateNewtonsoftJsonConverter: true,
                 generateSystemComponentModelTypeConverter: true,
                 generateMongoDBBsonSerialization: true,
                 addCodeGeneratedAttribute: true
                 )]
public partial struct ProjectId { }

Additional resources

There are no supported framework assets in this package.

Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on Meziantou.Framework.StronglyTypedId:

Package Downloads
Allegro.Extensions.Identifiers.Abstractions

Contains strongly typed identifiers abstractions.

GitHub repositories (1)

Showing the top 1 popular GitHub repositories that depend on Meziantou.Framework.StronglyTypedId:

Repository Stars
StefH/AnyOf
Use the AnyOf<TFirst, TSecond, ...> type to handle multiple defined types as input parameters or return values for methods.
Version Downloads Last updated
2.3.2 1,547 11/17/2024
2.3.1 2,838 10/10/2024
2.3.0 6,226 7/13/2024
2.2.0 5,174 3/21/2024
2.1.0 3,526 11/26/2023
2.0.0 559 11/19/2023
1.0.35 2,272 11/15/2023
1.0.34 4,352 9/5/2023
1.0.33 713 8/7/2023
1.0.32 6,334 3/26/2023
1.0.31 405 3/21/2023
1.0.30 258 3/20/2023
1.0.29 1,512 2/18/2023
1.0.28 6,741 1/3/2023
1.0.27 485 1/2/2023
1.0.26 331 1/2/2023
1.0.25 329 1/1/2023
1.0.24 346 12/27/2022
1.0.23 309 12/26/2022
1.0.22 2,692 8/10/2022
1.0.21 2,826 4/29/2022
1.0.20 529 4/23/2022
1.0.19 5,966 2/23/2022
1.0.18 470 2/12/2022
1.0.17 776 11/10/2021
1.0.16 491 11/8/2021
1.0.15 3,264 7/14/2021
1.0.14 394 6/30/2021
1.0.13 366 6/10/2021
1.0.12 868 5/14/2021
1.0.11 353 5/14/2021
1.0.10 407 4/25/2021
1.0.9 357 4/22/2021
1.0.8 1,930 2/17/2021
1.0.7 356 2/16/2021
1.0.6 370 2/16/2021
1.0.5 379 2/15/2021
1.0.4 405 2/8/2021
1.0.3 366 2/4/2021
1.0.2 358 2/4/2021
1.0.1 318 2/3/2021
1.0.0 381 2/1/2021