package jalse.entities.annotations;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import jalse.attributes.AttributeContainer;
import jalse.attributes.AttributeType;
import jalse.entities.Entity;
import jalse.entities.functions.SetAttributeFunction;
import jalse.entities.methods.SetAttributeMethod;
/**
* An {@link Entity} type annotation for:
* <ul>
* <li>{@link AttributeContainer#setOptAttribute(String, AttributeType, Object)}</li>
* <li>{@link AttributeContainer#setAttribute(String, AttributeType, Object)}</li>
* <li>{@link AttributeContainer#removeOptAttribute(String, AttributeType)}</li>
* <li>{@link AttributeContainer#removeAttribute(String, AttributeType)}</li>
* </ul>
*
* See {@link SetAttributeFunction} for acceptable method signatures.
*
* @author Elliot Ford
*
* @see SetAttributeMethod
*
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface SetAttribute {
/**
* Default name ({@code ""}).
*/
public static final String DEFAULT_NAME = "";
/**
* Attribute type name.
*
* @return Name.
*
* @see SetAttribute#DEFAULT_NAME
*/
String name() default DEFAULT_NAME;
}