-
Notifications
You must be signed in to change notification settings - Fork 47
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
4 changed files
with
1,360 additions
and
0 deletions.
There are no files selected for viewing
361 changes: 361 additions & 0 deletions
361
...shots/snap-v3.1/GeneralTests.Validation_can_have_fully_qualified_return_type.verified.txt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,361 @@ | ||
// ------------------------------------------------------------------------------ | ||
// <auto-generated> | ||
// This code was generated by a source generator named Vogen (https://github.com/SteveDunn/Vogen) | ||
// | ||
// Changes to this file may cause incorrect behavior and will be lost if | ||
// the code is regenerated. | ||
// </auto-generated> | ||
// ------------------------------------------------------------------------------ | ||
|
||
// Suppress warnings about [Obsolete] member usage in generated code. | ||
#pragma warning disable CS0618 | ||
|
||
// Suppress warnings for 'Override methods on comparable types'. | ||
#pragma warning disable CA1036 | ||
|
||
// Suppress Error MA0097 : A class that implements IComparable<T> or IComparable should override comparison operators | ||
#pragma warning disable MA0097 | ||
|
||
// Suppress warning for 'The annotation for nullable reference types should only be used in code within a '#nullable' annotations context. Auto-generated code requires an explicit '#nullable' directive in source.' | ||
// The generator copies signatures from the BCL, e.g. for `TryParse`, and some of those have nullable annotations. | ||
#pragma warning disable CS8669 | ||
|
||
// Suppress warnings about CS1591: Missing XML comment for publicly visible type or member 'Type_or_Member' | ||
#pragma warning disable CS1591 | ||
|
||
using Vogen; | ||
|
||
namespace Whatever | ||
{ | ||
|
||
[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage] | ||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Vogen", "1.0.0.0")] | ||
[global::System.Text.Json.Serialization.JsonConverter(typeof(CustomerIdSystemTextJsonConverter))] | ||
[global::System.ComponentModel.TypeConverter(typeof(CustomerIdTypeConverter))] | ||
|
||
[global::System.Diagnostics.DebuggerTypeProxyAttribute(typeof(CustomerIdDebugView))] | ||
[global::System.Diagnostics.DebuggerDisplayAttribute("Underlying type: System.Int32, Value = { _value }")] | ||
public partial struct CustomerId : global::System.IEquatable<CustomerId>, global::System.IEquatable<System.Int32> , global::System.IComparable<CustomerId>, global::System.IComparable | ||
{ | ||
#if DEBUG | ||
private readonly global::System.Diagnostics.StackTrace _stackTrace = null; | ||
#endif | ||
|
||
private readonly global::System.Boolean _isInitialized; | ||
|
||
private readonly System.Int32 _value; | ||
|
||
/// <summary> | ||
/// Gets the underlying <see cref="System.Int32" /> value if set, otherwise a <see cref="ValueObjectValidationException" /> is thrown. | ||
/// </summary> | ||
public readonly System.Int32 Value | ||
{ | ||
[global::System.Diagnostics.DebuggerStepThroughAttribute] | ||
get | ||
{ | ||
EnsureInitialized(); | ||
return _value; | ||
} | ||
} | ||
|
||
[global::System.Diagnostics.DebuggerStepThroughAttribute] | ||
[global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)] | ||
public CustomerId() | ||
{ | ||
#if DEBUG | ||
_stackTrace = new global::System.Diagnostics.StackTrace(); | ||
#endif | ||
|
||
_isInitialized = false; | ||
_value = default; | ||
} | ||
|
||
[global::System.Diagnostics.DebuggerStepThroughAttribute] | ||
private CustomerId(System.Int32 value) | ||
{ | ||
_value = value; | ||
_isInitialized = true; | ||
} | ||
|
||
/// <summary> | ||
/// Builds an instance from the provided underlying type. | ||
/// </summary> | ||
/// <param name="value">The underlying type.</param> | ||
/// <returns>An instance of this type.</returns> | ||
public static CustomerId From(System.Int32 value) | ||
{ | ||
|
||
|
||
CustomerId instance = new CustomerId(value); | ||
|
||
var validation = CustomerId.validate(value); | ||
if (validation != Vogen.Validation.Ok) | ||
{ | ||
var ex = new global::Vogen.ValueObjectValidationException(validation.ErrorMessage); | ||
if (validation.Data != null) | ||
{ | ||
foreach (var kvp in validation.Data) | ||
{ | ||
ex.Data[kvp.Key] = kvp.Value; | ||
} | ||
} | ||
throw ex; | ||
} | ||
|
||
|
||
return instance; | ||
} | ||
|
||
public static explicit operator CustomerId(System.Int32 value) => From(value); | ||
public static explicit operator System.Int32(CustomerId value) => value.Value; | ||
|
||
// only called internally when something has been deserialized into | ||
// its primitive type. | ||
private static CustomerId Deserialize(System.Int32 value) | ||
{ | ||
|
||
|
||
var validation = CustomerId.validate(value); | ||
if (validation != Vogen.Validation.Ok) | ||
{ | ||
throw new global::Vogen.ValueObjectValidationException(validation.ErrorMessage); | ||
} | ||
|
||
|
||
return new CustomerId(value); | ||
} | ||
|
||
public readonly global::System.Boolean Equals(CustomerId other) | ||
{ | ||
// It's possible to create uninitialized instances via converters such as EfCore (HasDefaultValue), which call Equals. | ||
// We treat anything uninitialized as not equal to anything, even other uninitialized instances of this type. | ||
if(!_isInitialized || !other._isInitialized) return false; | ||
|
||
return global::System.Collections.Generic.EqualityComparer<System.Int32>.Default.Equals(Value, other.Value); | ||
} | ||
|
||
public readonly global::System.Boolean Equals(System.Int32 primitive) => Value.Equals(primitive); | ||
|
||
public readonly override global::System.Boolean Equals(global::System.Object obj) | ||
{ | ||
return obj is CustomerId && Equals((CustomerId) obj); | ||
} | ||
|
||
public static global::System.Boolean operator ==(CustomerId left, CustomerId right) => Equals(left, right); | ||
public static global::System.Boolean operator !=(CustomerId left, CustomerId right) => !(left == right); | ||
|
||
public static global::System.Boolean operator ==(CustomerId left, System.Int32 right) => Equals(left.Value, right); | ||
public static global::System.Boolean operator !=(CustomerId left, System.Int32 right) => !Equals(left.Value, right); | ||
|
||
public static global::System.Boolean operator ==(System.Int32 left, CustomerId right) => Equals(left, right.Value); | ||
public static global::System.Boolean operator !=(System.Int32 left, CustomerId right) => !Equals(left, right.Value); | ||
|
||
public int CompareTo(CustomerId other) => Value.CompareTo(other.Value); | ||
public int CompareTo(object other) { | ||
if(other == null) return 1; | ||
if(other is CustomerId x) return CompareTo(x); | ||
throw new global::System.ArgumentException("Cannot compare to object as it is not of type CustomerId", nameof(other)); | ||
} | ||
|
||
|
||
/// <inheritdoc cref="int.TryParse(System.ReadOnlySpan{char}, System.Globalization.NumberStyles, System.IFormatProvider?, out int)"/> | ||
/// <summary> | ||
/// </summary> | ||
/// <returns> | ||
/// The value created via the <see cref="From"/> method. | ||
/// </returns> | ||
/// <exception cref="ValueObjectValidationException">Thrown when the value can be parsed, but is not valid.</exception> | ||
public static global::System.Boolean TryParse(global::System.ReadOnlySpan<char> s, global::System.Globalization.NumberStyles style, global::System.IFormatProvider provider, | ||
#if NETCOREAPP3_0_OR_GREATER | ||
[global::System.Diagnostics.CodeAnalysis.NotNullWhen(true)] | ||
#endif | ||
out CustomerId result) { | ||
if(System.Int32.TryParse(s, style, provider, out var r)) { | ||
result = From(r); | ||
return true; | ||
} | ||
|
||
result = default; | ||
return false; | ||
} | ||
|
||
/// <inheritdoc cref="int.TryParse(System.ReadOnlySpan{char}, out int)"/> | ||
/// <summary> | ||
/// </summary> | ||
/// <returns> | ||
/// The value created via the <see cref="From"/> method. | ||
/// </returns> | ||
/// <exception cref="ValueObjectValidationException">Thrown when the value can be parsed, but is not valid.</exception> | ||
public static global::System.Boolean TryParse(global::System.ReadOnlySpan<char> s, | ||
#if NETCOREAPP3_0_OR_GREATER | ||
[global::System.Diagnostics.CodeAnalysis.NotNullWhen(true)] | ||
#endif | ||
out CustomerId result) { | ||
if(System.Int32.TryParse(s, out var r)) { | ||
result = From(r); | ||
return true; | ||
} | ||
|
||
result = default; | ||
return false; | ||
} | ||
|
||
/// <inheritdoc cref="int.TryParse(string?, System.Globalization.NumberStyles, System.IFormatProvider?, out int)"/> | ||
/// <summary> | ||
/// </summary> | ||
/// <returns> | ||
/// The value created via the <see cref="From"/> method. | ||
/// </returns> | ||
/// <exception cref="ValueObjectValidationException">Thrown when the value can be parsed, but is not valid.</exception> | ||
public static global::System.Boolean TryParse(string s, global::System.Globalization.NumberStyles style, global::System.IFormatProvider provider, | ||
#if NETCOREAPP3_0_OR_GREATER | ||
[global::System.Diagnostics.CodeAnalysis.NotNullWhen(true)] | ||
#endif | ||
out CustomerId result) { | ||
if(System.Int32.TryParse(s, style, provider, out var r)) { | ||
result = From(r); | ||
return true; | ||
} | ||
|
||
result = default; | ||
return false; | ||
} | ||
|
||
/// <inheritdoc cref="int.TryParse(string?, out int)"/> | ||
/// <summary> | ||
/// </summary> | ||
/// <returns> | ||
/// The value created via the <see cref="From"/> method. | ||
/// </returns> | ||
/// <exception cref="ValueObjectValidationException">Thrown when the value can be parsed, but is not valid.</exception> | ||
public static global::System.Boolean TryParse(string s, | ||
#if NETCOREAPP3_0_OR_GREATER | ||
[global::System.Diagnostics.CodeAnalysis.NotNullWhen(true)] | ||
#endif | ||
out CustomerId result) { | ||
if(System.Int32.TryParse(s, out var r)) { | ||
result = From(r); | ||
return true; | ||
} | ||
|
||
result = default; | ||
return false; | ||
} | ||
|
||
|
||
public readonly override global::System.Int32 GetHashCode() => global::System.Collections.Generic.EqualityComparer<System.Int32>.Default.GetHashCode(_value); | ||
|
||
/// <summary>Returns the string representation of the underlying type</summary> | ||
/// <inheritdoc cref="System.Int32.ToString()" /> | ||
public readonly override global::System.String ToString() =>_isInitialized ? Value.ToString() : "[UNINITIALIZED]"; | ||
|
||
private readonly void EnsureInitialized() | ||
{ | ||
if (!_isInitialized) | ||
{ | ||
#if DEBUG | ||
global::System.String message = "Use of uninitialized Value Object at: " + _stackTrace ?? ""; | ||
#else | ||
global::System.String message = "Use of uninitialized Value Object."; | ||
#endif | ||
|
||
throw new global::Vogen.ValueObjectValidationException(message); | ||
} | ||
} | ||
|
||
|
||
|
||
|
||
class CustomerIdSystemTextJsonConverter : global::System.Text.Json.Serialization.JsonConverter<CustomerId> | ||
{ | ||
public override CustomerId Read(ref global::System.Text.Json.Utf8JsonReader reader, global::System.Type typeToConvert, global::System.Text.Json.JsonSerializerOptions options) | ||
{ | ||
return CustomerId.Deserialize(reader.GetInt32()); | ||
} | ||
|
||
public override void Write(System.Text.Json.Utf8JsonWriter writer, CustomerId value, global::System.Text.Json.JsonSerializerOptions options) | ||
{ | ||
writer.WriteNumberValue(value.Value); | ||
} | ||
|
||
#if NET6_0_OR_GREATER | ||
public override CustomerId ReadAsPropertyName(ref global::System.Text.Json.Utf8JsonReader reader, global::System.Type typeToConvert, global::System.Text.Json.JsonSerializerOptions options) | ||
{ | ||
return CustomerId.Deserialize(global::System.Int32.Parse(reader.GetString(), global::System.Globalization.NumberStyles.Any, global::System.Globalization.CultureInfo.InvariantCulture)); | ||
} | ||
|
||
public override void WriteAsPropertyName(System.Text.Json.Utf8JsonWriter writer, CustomerId value, global::System.Text.Json.JsonSerializerOptions options) | ||
{ | ||
writer.WritePropertyName(value.Value.ToString(global::System.Globalization.CultureInfo.InvariantCulture)); | ||
} | ||
#endif | ||
} | ||
|
||
|
||
class CustomerIdTypeConverter : global::System.ComponentModel.TypeConverter | ||
{ | ||
public override global::System.Boolean CanConvertFrom(global::System.ComponentModel.ITypeDescriptorContext context, global::System.Type sourceType) | ||
{ | ||
return sourceType == typeof(global::System.Int32) || sourceType == typeof(global::System.String) || base.CanConvertFrom(context, sourceType); | ||
} | ||
|
||
public override global::System.Object ConvertFrom(global::System.ComponentModel.ITypeDescriptorContext context, global::System.Globalization.CultureInfo culture, global::System.Object value) | ||
{ | ||
return value switch | ||
{ | ||
global::System.Int32 intValue => CustomerId.Deserialize(intValue), | ||
global::System.String stringValue when !global::System.String.IsNullOrEmpty(stringValue) && global::System.Int32.TryParse(stringValue, out var result) => CustomerId.Deserialize(result), | ||
_ => base.ConvertFrom(context, culture, value), | ||
}; | ||
} | ||
|
||
public override bool CanConvertTo(global::System.ComponentModel.ITypeDescriptorContext context, global::System.Type sourceType) | ||
{ | ||
return sourceType == typeof(global::System.Int32) || sourceType == typeof(global::System.String) || base.CanConvertTo(context, sourceType); | ||
} | ||
|
||
public override object ConvertTo(global::System.ComponentModel.ITypeDescriptorContext context, global::System.Globalization.CultureInfo culture, global::System.Object value, global::System.Type destinationType) | ||
{ | ||
if (value is CustomerId idValue) | ||
{ | ||
if (destinationType == typeof(global::System.Int32)) | ||
{ | ||
return idValue.Value; | ||
} | ||
|
||
if (destinationType == typeof(global::System.String)) | ||
{ | ||
return idValue.Value.ToString(); | ||
} | ||
} | ||
|
||
return base.ConvertTo(context, culture, value, destinationType); | ||
} | ||
} | ||
|
||
|
||
|
||
|
||
|
||
internal sealed class CustomerIdDebugView | ||
{ | ||
private readonly CustomerId _t; | ||
|
||
CustomerIdDebugView(CustomerId t) | ||
{ | ||
_t = t; | ||
} | ||
|
||
public global::System.Boolean IsInitialized => _t._isInitialized; | ||
public global::System.String UnderlyingType => "System.Int32"; | ||
public global::System.String Value => _t._isInitialized ? _t._value.ToString() : "[not initialized]" ; | ||
|
||
#if DEBUG | ||
public global::System.String CreatedWith => _t._stackTrace?.ToString() ?? "the From method"; | ||
#endif | ||
|
||
public global::System.String Conversions => @"Default"; | ||
} | ||
|
||
} | ||
} |
Oops, something went wrong.