module SGP32Definitions_Types {

import from SGP32Definitions all;
import from Native_Functions all;

external function dec_EsipaMessageFromIpaToEim(in octetstring stream) return EsipaMessageFromIpaToEim;
external function enc_EsipaMessageFromIpaToEim(in EsipaMessageFromIpaToEim msg) return octetstring;

external function dec_EsipaMessageFromEimToIpa(in octetstring stream) return EsipaMessageFromEimToIpa;
external function enc_EsipaMessageFromEimToIpa(in EsipaMessageFromEimToIpa msg) return octetstring;

external function dec_EuiccPackageResult(in octetstring stream) return EuiccPackageResult;
external function enc_EuiccPackageResult(in EuiccPackageResult msg) return octetstring;

external function dec_GetCertsResponse(in octetstring stream) return GetCertsResponse;
external function enc_GetCertsResponse(in GetCertsResponse msg) return octetstring;

external function dec_GetEimConfigurationDataResponse(in octetstring stream) return GetEimConfigurationDataResponse;
external function enc_GetEimConfigurationDataResponse(in GetEimConfigurationDataResponse msg) return octetstring;

external function dec_ProfileRollbackRequest(in octetstring stream) return ProfileRollbackRequest;
external function enc_ProfileRollbackRequest(in ProfileRollbackRequest msg) return octetstring;

external function dec_ProfileRollbackResponse(in octetstring stream) return ProfileRollbackResponse;
external function enc_ProfileRollbackResponse(in ProfileRollbackResponse msg) return octetstring;

}
