package xapi.annotation.model;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* Annotation specifying that a field or class requires serializing from Model
* to String, in order to send to the server.
*
* This can be applied to interfaces, classes, methods or fields, though using
* field-level concrete classes breaks compatibility;
* you should stick to interfaces + methods, and avoid classes + fields.
*
* Applying this to the class makes every field in the model serializable on
* the client, and you will have to use {@link ClientToServer#enabled()} = false
* to strictly disable any fields.
*
* This makes it easy to add client-only fields that can be used on the server,
* provided your interface is in a shared lib. If you need to hide client-only
* fields, manually call .setProperty(String, Object) on your models.
*
* @author "James X. Nelson (james@wetheinter.net)"
*
*/
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({}) // Must be placed inside a @Serializable annotation
public @interface ServerToClient {
SerializationStrategy serializer() default SerializationStrategy.ProtoStream;
boolean enabled() default true;
boolean encrypted() default false;
}