// ReSharper disable UnusedMember.Global -- used dynamically through proxies using System; using System.Collections.Generic; using System.Reflection; using StardewModdingAPI.Utilities; namespace SMAPI.Tests.ModApiProvider.Framework { /// A mod-provided API which provides basic events, properties, and methods. public class SimpleApi : BaseApi { /********* ** Test interface *********/ /**** ** Events ****/ /// A simple event field. public event EventHandler? OnEventRaised; /// A simple event property with custom add/remove logic. public event EventHandler OnEventRaisedProperty { add => this.OnEventRaised += value; remove => this.OnEventRaised -= value; } /**** ** Properties ****/ /// A simple numeric property. public int NumberProperty { get; set; } /// A simple object property. public object? ObjectProperty { get; set; } /// A simple list property. public List? ListProperty { get; set; } /// A simple list property with an interface. public IList? ListPropertyWithInterface { get; set; } /// A property with nested generics. public IDictionary>? GenericsProperty { get; set; } /// A property using an enum available to both mods. public BindingFlags EnumProperty { get; set; } /// A read-only property. public int GetterProperty => 42; /**** ** Methods ****/ /// A simple method with no return value. public void GetNothing() { } /// A simple method which returns a number. public int GetInt(int value) { return value; } /// A simple method which returns an object. public object GetObject(object value) { return value; } /// A simple method which returns a list. public List GetList(string value) { return new() { value }; } /// A simple method which returns a list with an interface. public IList GetListWithInterface(string value) { return new List { value }; } /// A simple method which returns nested generics. public IDictionary> GetGenerics(string key, string value) { return new Dictionary> { [key] = new List { value } }; } /// A simple method which returns a lambda. public Func GetLambda(Func value) { return value; } /// A simple method which returns out parameters. public bool TryGetOutParameter(int inputNumber, out int outNumber, out string outString, out PerScreen outReference, out IDictionary> outComplexType) { outNumber = inputNumber; outString = inputNumber.ToString(); outReference = new PerScreen(() => inputNumber); outComplexType = new Dictionary> { [inputNumber] = new PerScreen(() => inputNumber) }; return true; } /********* ** Helper methods *********/ /// Raise the event. /// The value to pass to the event. public void RaiseEventField(int value) { this.OnEventRaised?.Invoke(null, value); } } }