@@ -192,27 +192,35 @@ public static string[] CompileParameters(this IEnumerable<CommandParameter> para
192192 /// <param name="parserResult">The parsing result of the parser.</param>
193193 /// <typeparam name="T">The type to parse.</typeparam>
194194 /// <returns>true if the parser was found, otherwise false</returns>
195- public static bool TryParse < T > ( CommandContext context , string value , out CommandParameterParserResult parserResult )
195+ public static bool TryParse < T > ( this CommandContext context , string value , out CommandParameterParserResult parserResult )
196196 {
197+ if ( context is null )
198+ throw new ArgumentNullException ( nameof ( context ) ) ;
199+
200+ if ( string . IsNullOrEmpty ( value ) )
201+ throw new ArgumentNullException ( nameof ( value ) ) ;
202+
197203 if ( ! TryGetParser ( typeof ( T ) , out var parser ) )
198204 {
199- parserResult = default ;
200- return false ;
205+ parserResult = new ( false , null , $ "Missing parser for type '{ typeof ( T ) . Name } '", null , null ) ;
201206 }
207+ else
208+ {
209+ var token = StringToken . Instance . NewToken < StringToken > ( ) ;
210+ var tokens = ListPool < ICommandToken > . Shared . Rent ( ) ;
202211
203- var token = StringToken . Instance . NewToken < StringToken > ( ) ;
204- var tokens = ListPool < ICommandToken > . Shared . Rent ( ) ;
205-
206- tokens . Add ( token ) ;
212+ tokens . Add ( token ) ;
207213
208- token . Value = value ;
214+ token . Value = value ;
209215
210- parserResult = parser . Parse ( tokens , token , 0 , context , NullParameter ) ;
211-
212- token . ReturnToken ( ) ;
213-
214- ListPool < ICommandToken > . Shared . Return ( tokens ) ;
215- return true ;
216+ parserResult = parser . Parse ( tokens , token , 0 , context , NullParameter ) ;
217+
218+ token . ReturnToken ( ) ;
219+
220+ ListPool < ICommandToken > . Shared . Return ( tokens ) ;
221+ }
222+
223+ return parserResult . Success ;
216224 }
217225
218226 /// <summary>
@@ -243,68 +251,42 @@ public static CommandParameterParserResult ParseParameters(CommandContext contex
243251 if ( index < context . Tokens . Count )
244252 {
245253 var parameterToken = context . Tokens [ index ] ;
246-
247- var parserFound = false ;
248- var parserResult = default ( CommandParameterParserResult ) ;
249-
250- var defaultParserResult = default ( CommandParameterParserResult ) ;
254+ var parserResult = new CommandParameterParserResult ( false , null , null , null , null ! ) ;
251255
252256 foreach ( var pair in parameter . Parsers )
253257 {
254258 if ( ! pair . Key . AcceptsToken ( parameterToken ) )
255259 continue ;
256260
257- var parameterResult = pair . Key . Parse ( context . Tokens , parameterToken , index , context , parameter ) ;
258-
259- if ( ! parameterResult . Success )
260- {
261- if ( pair . Key == parameter . Type . Parser )
262- defaultParserResult = parameterResult ;
263-
264- parserResult = parameterResult ;
265- continue ;
266- }
267- else
268- {
269- parserFound = true ;
270- parserResult = parameterResult ;
261+ parserResult = pair . Key . Parse ( context . Tokens , parameterToken , index , context , parameter ) ;
271262
263+ if ( parserResult . Success )
272264 break ;
273- }
274265 }
275266
276- if ( parserFound )
267+ if ( parserResult . Success )
277268 {
278- if ( parserResult . Success )
279- {
280- string ? argumentError = null ;
269+ string ? argumentError = null ;
281270
282- foreach ( var restriction in parameter . Restrictions )
271+ foreach ( var restriction in parameter . Restrictions )
272+ {
273+ if ( ! restriction . IsValid ( parserResult . Value ! , context , parameter , out var error ) )
283274 {
284- if ( ! restriction . IsValid ( parserResult . Value ! , context , parameter , out var error ) )
285- {
286- argumentError = error ;
287- break ;
288- }
275+ argumentError = error ;
276+ break ;
289277 }
278+ }
290279
291- if ( argumentError != null )
292- {
293- parserResults . Add ( new ( false , null , argumentError , parameter , null ! ) ) ;
280+ if ( argumentError != null )
281+ {
282+ parserResults . Add ( new ( false , null , argumentError , parameter , null ! ) ) ;
294283
295- index ++ ;
296- return ;
297- }
284+ index ++ ;
285+ return ;
298286 }
299-
300- parserResults . Add ( parserResult ) ;
301- index ++ ;
302- }
303- else
304- {
305- parserResults . Add ( defaultParserResult ) ;
306- index ++ ;
307287 }
288+
289+ parserResults . Add ( parserResult ) ;
308290 }
309291 else
310292 {
0 commit comments