// File: Codec.idl
// PortableInterceptor submission.

#ifndef _Codec_IDL_
#define _Codec_IDL_

#include <orb.idl>
#include <interop.idl>

#pragma prefix "omg.org"

module IOP 
{

    local interface Codec
    {
        exception InvalidTypeForEncoding 
        {};
        
        exception FormatMismatch 
        {};
        
        exception TypeMismatch 
        {};

        CORBA::OctetSeq encode ( in any data )
            raises ( InvalidTypeForEncoding );

        any decode ( in CORBA::OctetSeq data )
            raises ( FormatMismatch );

        CORBA::OctetSeq encode_value ( in any data )
            raises ( InvalidTypeForEncoding );

        any decode_value ( in CORBA::OctetSeq data, in CORBA::TypeCode tc )
            raises ( FormatMismatch, TypeMismatch );
    };

    typedef short EncodingFormat;
    const EncodingFormat ENCODING_CDR_ENCAPS = 0;

    struct Encoding
    {
        EncodingFormat format;
        octet major_version;
        octet minor_version;
    };

    local interface CodecFactory
    {
        exception UnknownEncoding 
        {};

        Codec create_codec ( in Encoding enc )
            raises ( UnknownEncoding );
    };
};

#endif // _Codec_IDL_
