Skip to content

Commit 19b2fc1

Browse files
Update SerExtensions.cs
1 parent 68d6a12 commit 19b2fc1

1 file changed

Lines changed: 46 additions & 41 deletions

File tree

Code/Extensions/SerExtensions.cs

Lines changed: 46 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -42,58 +42,63 @@ public static TryGet<TOut> TryCast<TOut>(this object value, string rawRep = "")
4242
return $"{valueRep}{value.FriendlyTypeName()} is not a {typeof(TOut).FriendlyTypeName()}";
4343
}
4444

45-
public static bool CanReturn<T>(this BaseToken token, [NotNullWhen(true)] out Func<TryGet<T>>? get) where T : Value
45+
extension(BaseToken token)
4646
{
47-
get = null!;
48-
if (token is not IValueToken valToken) return false;
49-
return valToken.CapableOf(out get);
50-
}
51-
52-
public static bool CanReturnReference<T>(this BaseToken token, [NotNullWhen(true)] out Func<TryGet<T>>? get)
53-
{
54-
get = null!;
55-
if (token is not IValueToken valToken) return false;
56-
if (!valToken.CapableOf<ReferenceValue>(out var refFunc)) return false;
57-
58-
get = delegate
47+
public bool CanReturn<T>([NotNullWhen(true)] out Func<TryGet<T>>? get) where T : Value
5948
{
60-
if (refFunc().HasErrored(out var error, out var refVal))
61-
{
62-
return error;
63-
}
49+
get = null!;
50+
if (token is not IValueToken valToken) return false;
51+
return valToken.CapableOf(out get);
52+
}
53+
54+
public bool CanReturnReference<T>([NotNullWhen(true)] out Func<TryGet<T>>? get)
55+
{
56+
get = null!;
57+
if (token is not IValueToken valToken) return false;
58+
if (!valToken.CapableOf<ReferenceValue>(out var refFunc)) return false;
6459

65-
if (ReferenceArgument<T>.TryParse(refVal).HasErrored(out error, out var value))
60+
get = delegate
6661
{
67-
return error;
68-
}
62+
if (refFunc().HasErrored(out var error, out var refVal))
63+
{
64+
return error;
65+
}
6966

70-
return value;
71-
};
72-
73-
return true;
74-
}
75-
76-
public static bool CapableOf<T>(this IValueToken valToken, [NotNullWhen(true)] out Func<TryGet<T>>? get) where T : Value
77-
{
78-
get = valToken.TryGet<T>;
67+
if (ReferenceArgument<T>.TryParse(refVal).HasErrored(out error, out var value))
68+
{
69+
return error;
70+
}
71+
72+
return value;
73+
};
7974

80-
// if unknown, its always assumed that it may return T
81-
if (!valToken.PossibleValues.AreKnown(out var knownReturnTypes)) return true;
75+
return true;
76+
}
8277

83-
// if any of known types is assignable to T, or T to type, then it may return T
84-
return knownReturnTypes.Any(type => typeof(T).IsAssignableFrom(type) || type.IsAssignableFrom(typeof(T)));
85-
}
86-
87-
public static TryGet<T> TryGet<T>(this BaseToken token) where T : Value
88-
{
89-
if (token is not IValueToken valToken) return $"Value '{token.RawRep}' cannot represent a {typeof(T).FriendlyTypeName()}";
78+
public TryGet<T> TryGet<T>() where T : Value
79+
{
80+
if (token is not IValueToken valToken) return $"Value '{token.RawRep}' cannot represent a {typeof(T).FriendlyTypeName()}";
9081

91-
return valToken.Value().SuccessTryCast<Value, T>();
82+
return valToken.Value().SuccessTryCast<Value, T>();
83+
}
9284
}
9385

94-
public static TryGet<T> TryGet<T>(this IValueToken valToken) where T : Value
86+
extension(IValueToken valToken)
9587
{
96-
return valToken.Value().SuccessTryCast<Value, T>();
88+
public bool CapableOf<T>([NotNullWhen(true)] out Func<TryGet<T>>? get) where T : Value
89+
{
90+
get = valToken.TryGet<T>;
91+
92+
// if unknown, its always assumed that it may return T
93+
if (!valToken.PossibleValues.AreKnown(out var knownReturnTypes)) return true;
94+
95+
// if any of known types is assignable to T, or T to type, then it may return T
96+
return knownReturnTypes.Any(type => typeof(T).IsAssignableFrom(type) || type.IsAssignableFrom(typeof(T)));
97+
}
98+
public TryGet<T> TryGet<T>() where T : Value
99+
{
100+
return valToken.Value().SuccessTryCast<Value, T>();
101+
}
97102
}
98103

99104
public static PlayerValue ToPlayerValue(this IEnumerable<Player> players)

0 commit comments

Comments
 (0)