/* * Copyright (c) 2023 Vaughn Nugent * * Library: VNLib * Package: VNLib.Plugins.Essentials.ServiceStack * File: PluginExtensions.cs * * PluginExtensions.cs is part of VNLib.Plugins.Essentials.ServiceStack which is part of the larger * VNLib collection of libraries and utilities. * * VNLib.Plugins.Essentials.ServiceStack is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 2 of the * License, or (at your option) any later version. * * VNLib.Plugins.Essentials.ServiceStack is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see https://www.gnu.org/licenses/. */ using System.Linq; using System.Collections.Generic; using VNLib.Utils.Logging; using VNLib.Plugins.Runtime; namespace VNLib.Plugins.Essentials.ServiceStack { /// /// Internal and service stack specific extensions for plugins /// public static class PluginExtensions { /// /// Gets the endpoints exposed by the plugin /// /// /// The enumeration of web endpoints internal static IEnumerable GetEndpoints(this IPlugin plugin) => ((IWebPlugin)plugin).GetEndpoints(); /// /// Gets only plugins that implement interface /// /// /// internal static IEnumerable GetOnlyWebPlugins(this PluginController controller) => controller.Plugins.Where(static p => p.Plugin is IWebPlugin); /// /// Loads all plugins that implement interface into the /// service stack /// /// /// A log provider for writing loading logs to public static void LoadPlugins(this HttpServiceStack stack, ILogProvider logProvider) => (stack.PluginManager as PluginManager)!.LoadPlugins(logProvider); internal static PluginLoadEventListener GetListener(this ServiceDomain domain) => new(domain); } }