public static ICliFunctionalityProvider AddCustomHandler( this ICliFunctionalityProvider functionalityProvider, Action handler, string tokenText) { if (handler == null) { throw new ArgumentNullException(nameof(handler)); } if (tokenText == null) { throw new ArgumentNullException(nameof(tokenText)); } var family = CheckArgumentsAndGetOrCreateFamily(functionalityProvider); var verbClass = GetVerbTextClass(tokenText); var commandNode = new ExactTextNode( tokenText, verbClass, true, (node, token, resultAccumulator) => { handler(); throw new CliCustomHandlerException(); }, family, $"Custom handler node for verb '{tokenText}'"); functionalityProvider.Node.EstablishLink(commandNode); return(functionalityProvider); }
public static ICliFunctionalityProvider AddHelp(this ICliFunctionalityProvider functionalityProvider) { if (functionalityProvider == null) { throw new ArgumentNullException(nameof(functionalityProvider)); } if (!functionalityProvider.SupportsHelp) { throw new ArgumentException( $"Functionality provider '{functionalityProvider.Name}' doesn't support help.", nameof(functionalityProvider)); } return(functionalityProvider.AddCustomHandler( () => functionalityProvider.Output.WriteLine(functionalityProvider.GetHelp()), "--help")); }
public static ICliFunctionalityProvider AddVersion(this ICliFunctionalityProvider functionalityProvider) { if (functionalityProvider == null) { throw new ArgumentNullException(nameof(functionalityProvider)); } if (functionalityProvider.Version == null) { throw new ArgumentException( $"Functionality provider '{functionalityProvider.Name}' doesn't support version.", nameof(functionalityProvider)); } return(functionalityProvider.AddCustomHandler( () => functionalityProvider.Output.WriteLine(functionalityProvider.Version), "--version")); }
private static INodeFamily CheckArgumentsAndGetOrCreateFamily( this ICliFunctionalityProvider functionality) { if (functionality == null) { throw new ArgumentNullException(nameof(functionality)); } if (functionality.Name == null) { throw new CliException("Cannot add custom handler to a nameless functionality."); } var familyName = $"Family for custom handler nodes for functionality '{functionality.Name}' of type '{functionality.GetType().FullName}'."; var links = functionality.Node.ResolveLinks() .Where(x => x.Family?.Name == familyName) .ToList(); var nodeFamily = links.Any() ? links.First().Family : new NodeFamily(familyName); return(nodeFamily); }