@@ -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