41 lines
1.2 KiB
C#
41 lines
1.2 KiB
C#
|
|
using System.ComponentModel;
|
||
|
|
using System.Globalization;
|
||
|
|
using System.Text.Json;
|
||
|
|
using System.Text.Json.Serialization;
|
||
|
|
|
||
|
|
namespace IdentityShroud.Core.Security;
|
||
|
|
|
||
|
|
[JsonConverter(typeof(KekIdJsonConverter))]
|
||
|
|
[TypeConverter(typeof(KekIdTypeConverter))]
|
||
|
|
public readonly record struct KekId
|
||
|
|
{
|
||
|
|
public Guid Id { get; }
|
||
|
|
|
||
|
|
public KekId(Guid id)
|
||
|
|
{
|
||
|
|
Id = id;
|
||
|
|
}
|
||
|
|
|
||
|
|
public static KekId NewId()
|
||
|
|
{
|
||
|
|
return new KekId(Guid.NewGuid());
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
public class KekIdJsonConverter : JsonConverter<KekId>
|
||
|
|
{
|
||
|
|
public override KekId Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
|
||
|
|
=> new KekId(reader.GetGuid());
|
||
|
|
|
||
|
|
public override void Write(Utf8JsonWriter writer, KekId value, JsonSerializerOptions options)
|
||
|
|
=> writer.WriteStringValue(value.Id);
|
||
|
|
}
|
||
|
|
|
||
|
|
public class KekIdTypeConverter : TypeConverter
|
||
|
|
{
|
||
|
|
public override bool CanConvertFrom(ITypeDescriptorContext? context, Type sourceType)
|
||
|
|
=> sourceType == typeof(string) || base.CanConvertFrom(context, sourceType);
|
||
|
|
|
||
|
|
public override object? ConvertFrom(ITypeDescriptorContext? context, CultureInfo? culture, object value)
|
||
|
|
=> value is string s ? new KekId(Guid.Parse(s)) : base.ConvertFrom(context, culture, value);
|
||
|
|
}
|