/*
* Copyright (c) 2006 jDiameter.
* https://jdiameter.dev.java.net/
*
* License: GPL v3
*
* e-mail: erick.svenson@yahoo.com
*
*/
package org.jdiameter.client.api.annotation;
import org.jdiameter.api.Message;
import org.jdiameter.api.Request;
import org.jdiameter.api.Avp;
/**
* This interface provide methods for create diameter messages from your annotated domain object and
* create domain object from diameter message.
*/
public interface IRecoder {
/**
* Create Request message from specified annotated domain object
* @param yourDomainMessageObject annotated domain object
* @param additionalAvp additional avp
* @return message instance
* @throws RecoderException throw if object can not be encoded to diameter message
*/
public Message encodeToRequest(Object yourDomainMessageObject, Avp... additionalAvp) throws RecoderException;
/**
* Create Answer message from specified annotated domain object
* @param yourDomainMessageObject annotated domain object
* @param request request message
* @param resultCode result code of answer
* @return message answer instance
* @throws RecoderException throw if object can not be encoded to diameter message
*/
public Message encodeToAnswer(Object yourDomainMessageObject, Request request, long resultCode) throws RecoderException;
/**
* Create specified domain object by message and class of object
* @param message diameter message
* @param yourDomainMessageObject class of domain object
* @return instance of domain object
* @throws RecoderException throw if message can not be decoded to domain object
*/
public <T> T decode(Message message, java.lang.Class<T> yourDomainMessageObject) throws RecoderException;
}