package org.apereo.cas.authentication.principal;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import java.io.Serializable;
/**
* This is {@link ResponseBuilderLocator} which attempts to locate {@link ResponseBuilder}
* objects registered in the application context. This is an abstraction that is separated
* from the actual service and response API to remove issues with serialization and such.
* Services are no longer responsible for producing a response and their response builder
* will need to be located via this class. This frees up the service API quite a bit to
* inject all sorts of components into builders to accommodate for various use cases
* and not have to worry about whether a given field in a builder is serialization friendly.
*
* @author Misagh Moayyed
* @param <T> the type parameter
* @since 5.1.0
*/
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY)
public interface ResponseBuilderLocator<T extends WebApplicationService> extends Serializable {
/**
* Locate response builder appropriate for the given service.
*
* @param service the service
* @return the response builder
*/
ResponseBuilder<T> locate(T service);
}