using System; using System.Collections.Generic; using Artemis.Core.Annotations; using Artemis.Core.Models.Profile.DataBindings; using Artemis.Core.Models.Profile.DataBindings.Modifiers; using Artemis.Core.Plugins; using Newtonsoft.Json; namespace Artemis.Core.Services.Interfaces { public interface IDataBindingService : IArtemisService { /// /// Gets a read-only collection of all registered modifier types /// IReadOnlyCollection RegisteredDataBindingModifierTypes { get; } /// /// Registers a new modifier type for use in data bindings /// /// The PluginInfo of the plugin this modifier type belongs to /// The modifier type to register void RegisterModifierType([NotNull] PluginInfo pluginInfo, [NotNull] DataBindingModifierType dataBindingModifierType); /// /// Removes a modifier type so it is no longer available for use in data bindings /// /// The modifier type to remove void RemoveModifierType([NotNull] DataBindingModifierType dataBindingModifierType); /// /// Returns all the data binding modifier types compatible with the provided type /// List GetCompatibleModifierTypes(Type type); /// /// Gets a modifier type by its plugin GUID and type name /// /// The modifier type's plugin GUID /// The type name of the modifier type /// DataBindingModifierType GetModifierType(Guid modifierTypePluginGuid, string modifierType); /// /// Logs a modifier deserialization failure /// /// The modifier that failed to deserialize /// The JSON exception that occurred void LogModifierDeserializationFailure(DataBindingModifier dataBindingModifier, JsonSerializationException exception); } }