andrewlock / StronglyTypedId

A Rosyln-powered generator for strongly-typed IDs
MIT License
1.5k stars 78 forks source link

Sources not generated in prereleae #133

Closed amichajlukTisa closed 4 months ago

amichajlukTisa commented 4 months ago

I switched to prerelease version and now the compiled code looks like that:

v 1.0.0-beta07

using System.Runtime.InteropServices;

#nullable disable
namespace Common.Entities.Organizers
{
  [StructLayout(LayoutKind.Sequential, Size = 1)]
  public struct HappeningOrganizerId
  {
  }
}

Using the last release version the code was: v 0.2.1

using System;
using System.ComponentModel;
using System.Globalization;
using System.Text.Json;
using System.Text.Json.Serialization;

#nullable disable
namespace Common.Entities.Organizers
{
  [TypeConverter(typeof (HappeningOrganizerId.HappeningOrganizerIdTypeConverter))]
  [JsonConverter(typeof (HappeningOrganizerId.HappeningOrganizerIdSystemTextJsonConverter))]
  public readonly struct HappeningOrganizerId : 
    IComparable<HappeningOrganizerId>,
    IEquatable<HappeningOrganizerId>
  {
    public static readonly HappeningOrganizerId Empty = new HappeningOrganizerId(Guid.Empty);

    public Guid Value { get; }

    public HappeningOrganizerId(Guid value) => this.Value = value;

    public static HappeningOrganizerId New() => new HappeningOrganizerId(Guid.NewGuid());

    public bool Equals(HappeningOrganizerId other) => this.Value.Equals(other.Value);

    public int CompareTo(HappeningOrganizerId other) => this.Value.CompareTo(other.Value);

    public override bool Equals(object obj)
    {
      return obj != null && obj is HappeningOrganizerId other && this.Equals(other);
    }

    public override int GetHashCode() => this.Value.GetHashCode();

    public override string ToString() => this.Value.ToString();

    public static bool operator ==(HappeningOrganizerId a, HappeningOrganizerId b)
    {
      return a.CompareTo(b) == 0;
    }

    public static bool operator !=(HappeningOrganizerId a, HappeningOrganizerId b) => !(a == b);

    private class HappeningOrganizerIdTypeConverter : TypeConverter
    {
      public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
      {
        return sourceType == typeof (string) || base.CanConvertFrom(context, sourceType);
      }

      public override object ConvertFrom(
        ITypeDescriptorContext context,
        CultureInfo culture,
        object value)
      {
        string input = value as string;
        Guid result;
        return !string.IsNullOrEmpty(input) && Guid.TryParse(input, out result) ? (object) new HappeningOrganizerId(result) : base.ConvertFrom(context, culture, value);
      }
    }

    public class HappeningOrganizerIdSystemTextJsonConverter : JsonConverter<HappeningOrganizerId>
    {
      public override HappeningOrganizerId Read(
        ref Utf8JsonReader reader,
        Type typeToConvert,
        JsonSerializerOptions options)
      {
        return new HappeningOrganizerId(Guid.Parse(reader.GetString()));
      }

      public override void Write(
        Utf8JsonWriter writer,
        HappeningOrganizerId value,
        JsonSerializerOptions options)
      {
        writer.WriteStringValue(value.Value);
      }
    }
  }
}

Am I doing something wrong?

amichajlukTisa commented 4 months ago

I was referencing also *.Attributes package and it was causing the issue.