using System.Diagnostics.CodeAnalysis; using AIStudio.Settings.DataModel; using Lua; namespace AIStudio.Tools.PluginSystem; /// /// Describes the data sources which configuration plugins provide. /// /// /// The settings keep every data source in a list of IDataSource, and a data source of a configuration /// plugin is a record struct rather than a ConfigurationBaseObject. That is why data sources are read /// in a way of their own. /// public sealed class DataSourceConfigurationObjectDescriptor : PluginConfigurationObjectDescriptor { /// public override PluginConfigurationObjectType Type => PluginConfigurationObjectType.DATA_SOURCE; /// public override string LuaTableName => "DATA_SOURCES"; /// public override bool TryParse(LuaTable mainTable, Guid configPluginId, List configObjects, bool dryRun, string pluginPath) => PluginConfigurationObject.TryParseDataSources(this, mainTable, configPluginId, configObjects, dryRun); /// public override bool TryParseSnippet(LuaTable table, [NotNullWhen(true)] out IConfigurationObject? configObject) { var isValid = DataSourceERI_V1.TryParseConfiguration(1, table, Guid.Empty, dryRun: true, out var dataSource); configObject = isValid ? dataSource : null; return isValid; } /// /// /// The secret of a data source is not necessarily an API key, e.g., it is a password, so it is /// deleted as a secret. /// public override Task CleanLeftOverAsync(IList availablePlugins, IReadOnlySet deployedEnterpriseConfigPluginIds, IReadOnlySet notStartedConfigPluginIds, IList configObjectList) => PluginConfigurationObject.CleanLeftOverConfigurationObjects(this.Type, x => x.DataSources, availablePlugins, deployedEnterpriseConfigPluginIds, notStartedConfigPluginIds, configObjectList, SecretStoreType.DATA_SOURCE, deleteSecret: true); /// public override int RemovePluginObjects(Data settings) => settings.DataSources.RemoveAll(dataSource => dataSource.IsEnterpriseConfiguration); }