Skip to content

Commit

Permalink
add new method WithType to add types to a OneOf
Browse files Browse the repository at this point in the history
- also added the README to the solution
  • Loading branch information
Pxtl committed Feb 17, 2024
1 parent cfe1c4d commit 384da24
Show file tree
Hide file tree
Showing 68 changed files with 516 additions and 264 deletions.
15 changes: 11 additions & 4 deletions Generator/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,9 @@
using System.Collections.Generic;

var sourceRoot = GetFullPath(Combine(GetDirectoryName(GetExecutingAssembly().Location)!, @"..\..\..\.."));
const int extendedSizeLimit = 10;

for (var i = 1; i < 10; i++) {
for (var i = 1; i < extendedSizeLimit; i++) {
var output = GetContent(true, i);
var outpath = Combine(sourceRoot, $"OneOf\\OneOfT{i - 1}.generated.cs");
File.WriteAllText(outpath, output);
Expand All @@ -18,7 +19,7 @@
File.WriteAllText(outpath2, output2);
}

for (var i = 10; i < 33; i++) {
for (var i = extendedSizeLimit; i < 33; i++) {
var output3 = GetContent(true, i);
var outpath3 = Combine(sourceRoot, $"OneOf.Extended\\OneOfT{i - 1}.generated.cs");
File.WriteAllText(outpath3, output3);
Expand Down Expand Up @@ -49,13 +50,13 @@ namespace OneOf
readonly int _index;
{IfStruct( // constructor
$@"OneOf(int index, {RangeJoined(", ", j => $"T{j} value{j} = default")})
$@"internal OneOf(int index, {RangeJoined(", ", j => $"T{j} value{j} = default")})
{{
_index = index;
{RangeJoined(@"
", j => $"_value{j} = value{j};")}
}}",
$@"protected OneOfBase(OneOf<{genericArg}> input)
$@"protected internal OneOfBase(OneOf<{genericArg}> input)
{{
_index = input.Index;
switch (_index)
Expand All @@ -77,6 +78,12 @@ namespace OneOf
public int Index => _index;
{((i < extendedSizeLimit - 1) ?
// can go up to the limit before extended because OneOfT8 cannot see OneOfT9
$@"public OneOf<{genericArg}, TNew> WithType<TNew>() =>
new OneOf<{genericArg}, TNew>(_index, {RangeJoined(", ", j => $"_value{j}")}, default);
":"")}
{RangeJoined(@"
", j=> $"public bool IsT{j} => _index == {j};")}
Expand Down
8 changes: 5 additions & 3 deletions OneOf.Extended/OneOfBaseT10.generated.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ public class OneOfBase<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> : IOneOf
readonly T10 _value10;
readonly int _index;

protected OneOfBase(OneOf<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> input)
protected internal OneOfBase(OneOf<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> input)
{
_index = input.Index;
switch (_index)
Expand Down Expand Up @@ -57,6 +57,8 @@ protected OneOfBase(OneOf<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> input)

public int Index => _index;



public bool IsT0 => _index == 0;
public bool IsT1 => _index == 1;
public bool IsT2 => _index == 2;
Expand Down Expand Up @@ -458,7 +460,7 @@ public bool TryPickT10(out T10 value, out OneOf<T0, T1, T2, T3, T4, T5, T6, T7,
_ => throw new InvalidOperationException()
};
return this.IsT10;
}
}

bool Equals(OneOfBase<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> other) =>
_index == other._index &&
Expand Down Expand Up @@ -531,4 +533,4 @@ public override int GetHashCode()
}
}
}
}
}
8 changes: 5 additions & 3 deletions OneOf.Extended/OneOfBaseT11.generated.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ public class OneOfBase<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> : IOneO
readonly T11 _value11;
readonly int _index;

protected OneOfBase(OneOf<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> input)
protected internal OneOfBase(OneOf<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> input)
{
_index = input.Index;
switch (_index)
Expand Down Expand Up @@ -60,6 +60,8 @@ protected OneOfBase(OneOf<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> inpu

public int Index => _index;



public bool IsT0 => _index == 0;
public bool IsT1 => _index == 1;
public bool IsT2 => _index == 2;
Expand Down Expand Up @@ -508,7 +510,7 @@ public bool TryPickT11(out T11 value, out OneOf<T0, T1, T2, T3, T4, T5, T6, T7,
_ => throw new InvalidOperationException()
};
return this.IsT11;
}
}

bool Equals(OneOfBase<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> other) =>
_index == other._index &&
Expand Down Expand Up @@ -584,4 +586,4 @@ public override int GetHashCode()
}
}
}
}
}
8 changes: 5 additions & 3 deletions OneOf.Extended/OneOfBaseT12.generated.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ public class OneOfBase<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> :
readonly T12 _value12;
readonly int _index;

protected OneOfBase(OneOf<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> input)
protected internal OneOfBase(OneOf<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> input)
{
_index = input.Index;
switch (_index)
Expand Down Expand Up @@ -63,6 +63,8 @@ protected OneOfBase(OneOf<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>

public int Index => _index;



public bool IsT0 => _index == 0;
public bool IsT1 => _index == 1;
public bool IsT2 => _index == 2;
Expand Down Expand Up @@ -560,7 +562,7 @@ public bool TryPickT12(out T12 value, out OneOf<T0, T1, T2, T3, T4, T5, T6, T7,
_ => throw new InvalidOperationException()
};
return this.IsT12;
}
}

bool Equals(OneOfBase<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> other) =>
_index == other._index &&
Expand Down Expand Up @@ -639,4 +641,4 @@ public override int GetHashCode()
}
}
}
}
}
8 changes: 5 additions & 3 deletions OneOf.Extended/OneOfBaseT13.generated.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ public class OneOfBase<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T1
readonly T13 _value13;
readonly int _index;

protected OneOfBase(OneOf<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> input)
protected internal OneOfBase(OneOf<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> input)
{
_index = input.Index;
switch (_index)
Expand Down Expand Up @@ -66,6 +66,8 @@ protected OneOfBase(OneOf<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,

public int Index => _index;



public bool IsT0 => _index == 0;
public bool IsT1 => _index == 1;
public bool IsT2 => _index == 2;
Expand Down Expand Up @@ -614,7 +616,7 @@ public bool TryPickT13(out T13 value, out OneOf<T0, T1, T2, T3, T4, T5, T6, T7,
_ => throw new InvalidOperationException()
};
return this.IsT13;
}
}

bool Equals(OneOfBase<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> other) =>
_index == other._index &&
Expand Down Expand Up @@ -696,4 +698,4 @@ public override int GetHashCode()
}
}
}
}
}
8 changes: 5 additions & 3 deletions OneOf.Extended/OneOfBaseT14.generated.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ public class OneOfBase<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T1
readonly T14 _value14;
readonly int _index;

protected OneOfBase(OneOf<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14> input)
protected internal OneOfBase(OneOf<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14> input)
{
_index = input.Index;
switch (_index)
Expand Down Expand Up @@ -69,6 +69,8 @@ protected OneOfBase(OneOf<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,

public int Index => _index;



public bool IsT0 => _index == 0;
public bool IsT1 => _index == 1;
public bool IsT2 => _index == 2;
Expand Down Expand Up @@ -670,7 +672,7 @@ public bool TryPickT14(out T14 value, out OneOf<T0, T1, T2, T3, T4, T5, T6, T7,
_ => throw new InvalidOperationException()
};
return this.IsT14;
}
}

bool Equals(OneOfBase<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14> other) =>
_index == other._index &&
Expand Down Expand Up @@ -755,4 +757,4 @@ public override int GetHashCode()
}
}
}
}
}
8 changes: 5 additions & 3 deletions OneOf.Extended/OneOfBaseT15.generated.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ public class OneOfBase<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T1
readonly T15 _value15;
readonly int _index;

protected OneOfBase(OneOf<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15> input)
protected internal OneOfBase(OneOf<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15> input)
{
_index = input.Index;
switch (_index)
Expand Down Expand Up @@ -72,6 +72,8 @@ protected OneOfBase(OneOf<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,

public int Index => _index;



public bool IsT0 => _index == 0;
public bool IsT1 => _index == 1;
public bool IsT2 => _index == 2;
Expand Down Expand Up @@ -728,7 +730,7 @@ public bool TryPickT15(out T15 value, out OneOf<T0, T1, T2, T3, T4, T5, T6, T7,
_ => throw new InvalidOperationException()
};
return this.IsT15;
}
}

bool Equals(OneOfBase<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15> other) =>
_index == other._index &&
Expand Down Expand Up @@ -816,4 +818,4 @@ public override int GetHashCode()
}
}
}
}
}
8 changes: 5 additions & 3 deletions OneOf.Extended/OneOfBaseT16.generated.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ public class OneOfBase<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T1
readonly T16 _value16;
readonly int _index;

protected OneOfBase(OneOf<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16> input)
protected internal OneOfBase(OneOf<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16> input)
{
_index = input.Index;
switch (_index)
Expand Down Expand Up @@ -75,6 +75,8 @@ protected OneOfBase(OneOf<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,

public int Index => _index;



public bool IsT0 => _index == 0;
public bool IsT1 => _index == 1;
public bool IsT2 => _index == 2;
Expand Down Expand Up @@ -788,7 +790,7 @@ public bool TryPickT16(out T16 value, out OneOf<T0, T1, T2, T3, T4, T5, T6, T7,
_ => throw new InvalidOperationException()
};
return this.IsT16;
}
}

bool Equals(OneOfBase<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16> other) =>
_index == other._index &&
Expand Down Expand Up @@ -879,4 +881,4 @@ public override int GetHashCode()
}
}
}
}
}
8 changes: 5 additions & 3 deletions OneOf.Extended/OneOfBaseT17.generated.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ public class OneOfBase<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T1
readonly T17 _value17;
readonly int _index;

protected OneOfBase(OneOf<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17> input)
protected internal OneOfBase(OneOf<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17> input)
{
_index = input.Index;
switch (_index)
Expand Down Expand Up @@ -78,6 +78,8 @@ protected OneOfBase(OneOf<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,

public int Index => _index;



public bool IsT0 => _index == 0;
public bool IsT1 => _index == 1;
public bool IsT2 => _index == 2;
Expand Down Expand Up @@ -850,7 +852,7 @@ public bool TryPickT17(out T17 value, out OneOf<T0, T1, T2, T3, T4, T5, T6, T7,
_ => throw new InvalidOperationException()
};
return this.IsT17;
}
}

bool Equals(OneOfBase<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17> other) =>
_index == other._index &&
Expand Down Expand Up @@ -944,4 +946,4 @@ public override int GetHashCode()
}
}
}
}
}
8 changes: 5 additions & 3 deletions OneOf.Extended/OneOfBaseT18.generated.cs
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ public class OneOfBase<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T1
readonly T18 _value18;
readonly int _index;

protected OneOfBase(OneOf<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18> input)
protected internal OneOfBase(OneOf<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18> input)
{
_index = input.Index;
switch (_index)
Expand Down Expand Up @@ -81,6 +81,8 @@ protected OneOfBase(OneOf<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,

public int Index => _index;



public bool IsT0 => _index == 0;
public bool IsT1 => _index == 1;
public bool IsT2 => _index == 2;
Expand Down Expand Up @@ -914,7 +916,7 @@ public bool TryPickT18(out T18 value, out OneOf<T0, T1, T2, T3, T4, T5, T6, T7,
_ => throw new InvalidOperationException()
};
return this.IsT18;
}
}

bool Equals(OneOfBase<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18> other) =>
_index == other._index &&
Expand Down Expand Up @@ -1011,4 +1013,4 @@ public override int GetHashCode()
}
}
}
}
}
8 changes: 5 additions & 3 deletions OneOf.Extended/OneOfBaseT19.generated.cs
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ public class OneOfBase<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T1
readonly T19 _value19;
readonly int _index;

protected OneOfBase(OneOf<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19> input)
protected internal OneOfBase(OneOf<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19> input)
{
_index = input.Index;
switch (_index)
Expand Down Expand Up @@ -84,6 +84,8 @@ protected OneOfBase(OneOf<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,

public int Index => _index;



public bool IsT0 => _index == 0;
public bool IsT1 => _index == 1;
public bool IsT2 => _index == 2;
Expand Down Expand Up @@ -980,7 +982,7 @@ public bool TryPickT19(out T19 value, out OneOf<T0, T1, T2, T3, T4, T5, T6, T7,
_ => throw new InvalidOperationException()
};
return this.IsT19;
}
}

bool Equals(OneOfBase<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19> other) =>
_index == other._index &&
Expand Down Expand Up @@ -1080,4 +1082,4 @@ public override int GetHashCode()
}
}
}
}
}
Loading

0 comments on commit 384da24

Please sign in to comment.