aboutsummaryrefslogtreecommitdiff
path: root/lib/VNLib.Plugins.Extensions.Loading/src/ConfigurationExtensions.cs
diff options
context:
space:
mode:
authorLibravatar vnugent <public@vaughnnugent.com>2023-06-12 19:15:50 -0400
committerLibravatar vnugent <public@vaughnnugent.com>2023-06-12 19:15:50 -0400
commit043d378a157069c78863d2b9695de2884fb81ad1 (patch)
tree98faf976d05fdef54686f2d1aaca41d2ddf92bfa /lib/VNLib.Plugins.Extensions.Loading/src/ConfigurationExtensions.cs
parent728cb3000f5d5977dbb51c258f6cda3cdff63ceb (diff)
Auto type init, async/lazy loading
Diffstat (limited to 'lib/VNLib.Plugins.Extensions.Loading/src/ConfigurationExtensions.cs')
-rw-r--r--lib/VNLib.Plugins.Extensions.Loading/src/ConfigurationExtensions.cs40
1 files changed, 40 insertions, 0 deletions
diff --git a/lib/VNLib.Plugins.Extensions.Loading/src/ConfigurationExtensions.cs b/lib/VNLib.Plugins.Extensions.Loading/src/ConfigurationExtensions.cs
index 190c153..fbe8d48 100644
--- a/lib/VNLib.Plugins.Extensions.Loading/src/ConfigurationExtensions.cs
+++ b/lib/VNLib.Plugins.Extensions.Loading/src/ConfigurationExtensions.cs
@@ -23,11 +23,14 @@
*/
using System;
+using System.IO;
using System.Text.Json;
using System.Reflection;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
+using VNLib.Utils.Extensions;
+
namespace VNLib.Plugins.Extensions.Loading
{
/// <summary>
@@ -66,6 +69,9 @@ namespace VNLib.Plugins.Extensions.Loading
{
public const string S3_CONFIG = "s3_config";
public const string S3_SECRET_KEY = "s3_secret";
+ public const string PLUGIN_ASSET_KEY = "assets";
+ public const string PLUGINS_HOST_KEY = "plugins";
+ public const string PLUGIN_PATH_KEY = "path";
/// <summary>
/// Retrieves a top level configuration dictionary of elements for the specified type.
@@ -356,5 +362,39 @@ namespace VNLib.Plugins.Extensions.Loading
IConfigScope? s3conf = plugin.TryGetConfig(S3_CONFIG);
return s3conf?.Deserialze<S3Config>();
}
+
+ /// <summary>
+ /// Trys to get the optional assets directory from the plugin configuration
+ /// </summary>
+ /// <param name="plugin"></param>
+ /// <returns>The absolute path to the assets directory if defined, null otherwise</returns>
+ public static string? GetAssetsPath(this PluginBase plugin)
+ {
+ //Get global plugin config element
+ IConfigScope config = plugin.GetConfig(PLUGINS_HOST_KEY);
+
+ //Try to get the assets path if its defined
+ string? assetsPath = config.GetPropString(PLUGIN_ASSET_KEY);
+
+ //Try to get the full path for the assets if we can
+ return assetsPath != null ? Path.GetFullPath(assetsPath) : null;
+ }
+
+ /// <summary>
+ /// Gets the absolute path to the plugins directory as defined in the host configuration
+ /// </summary>
+ /// <param name="plugin"></param>
+ /// <returns>The absolute path to the directory containing all plugins</returns>
+ public static string GetPluginsPath(this PluginBase plugin)
+ {
+ //Get global plugin config element
+ IConfigScope config = plugin.GetConfig(PLUGINS_HOST_KEY);
+
+ //Get the plugins path or throw because it should ALWAYS be defined if this method is called
+ string pluginsPath = config[PLUGIN_PATH_KEY].GetString()!;
+
+ //Get absolute path
+ return Path.GetFullPath(pluginsPath);
+ }
}
}