/*
 * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
 * From ASN.1 module "E2AP-PDU-Descriptions"
 * 	found in "Spec/e2_and_x2-combined-and-minimized.asn1"
 * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
 */

#ifndef	_RICSuccessfulOutcome_H_
#define	_RICSuccessfulOutcome_H_


#include "asn_application.h"

/* Including external dependencies */
#include "ProcedureCode.h"
#include "Criticality.h"
#include "ANY.h"
#include "asn_ioc.h"
#include "RICsubscriptionRequest.h"
#include "RICsubscriptionResponse.h"
#include "RICsubscriptionFailure.h"
#include "RICsubscriptionDeleteRequest.h"
#include "RICsubscriptionDeleteResponse.h"
#include "RICsubscriptionDeleteFailure.h"
#include "RICserviceUpdate.h"
#include "RICserviceUpdateAcknowledge.h"
#include "RICserviceUpdateFailure.h"
#include "RICcontrolRequest.h"
#include "RICcontrolAcknowledge.h"
#include "RICcontrolFailure.h"
#include "X2SetupRequest.h"
#include "X2SetupResponse.h"
#include "X2SetupFailure.h"
#include "ENDCX2SetupRequest.h"
#include "ENDCX2SetupResponse.h"
#include "ENDCX2SetupFailure.h"
#include "ResourceStatusRequest.h"
#include "ResourceStatusResponse.h"
#include "ResourceStatusFailure.h"
#include "ENBConfigurationUpdate.h"
#include "ENBConfigurationUpdateAcknowledge.h"
#include "ENBConfigurationUpdateFailure.h"
#include "ENDCConfigurationUpdate.h"
#include "ENDCConfigurationUpdateAcknowledge.h"
#include "ENDCConfigurationUpdateFailure.h"
#include "ResetRequest.h"
#include "ResetResponse.h"
#include "RICindication.h"
#include "RICserviceQuery.h"
#include "LoadInformation.h"
#include "GNBStatusIndication.h"
#include "ResourceStatusUpdate.h"
#include "ErrorIndication.h"
#include "OPEN_TYPE.h"
#include "constr_CHOICE.h"
#include "constr_SEQUENCE.h"

#ifdef __cplusplus
extern "C" {
#endif

/* Dependencies */
typedef enum RICSuccessfulOutcome__value_PR {
	RICSuccessfulOutcome__value_PR_NOTHING,	/* No components present */
	RICSuccessfulOutcome__value_PR_RICsubscriptionResponse,
	RICSuccessfulOutcome__value_PR_RICsubscriptionDeleteResponse,
	RICSuccessfulOutcome__value_PR_RICserviceUpdateAcknowledge,
	RICSuccessfulOutcome__value_PR_RICcontrolAcknowledge,
	RICSuccessfulOutcome__value_PR_X2SetupResponse,
	RICSuccessfulOutcome__value_PR_ENDCX2SetupResponse,
	RICSuccessfulOutcome__value_PR_ResourceStatusResponse,
	RICSuccessfulOutcome__value_PR_ENBConfigurationUpdateAcknowledge,
	RICSuccessfulOutcome__value_PR_ENDCConfigurationUpdateAcknowledge,
	RICSuccessfulOutcome__value_PR_ResetResponse
} RICSuccessfulOutcome__value_PR;

/* RICSuccessfulOutcome */
typedef struct RICSuccessfulOutcome {
	ProcedureCode_t	 procedureCode;
	Criticality_t	 criticality;
	struct RICSuccessfulOutcome__value {
		RICSuccessfulOutcome__value_PR present;
		union RICSuccessfulOutcome__value_u {
			RICsubscriptionResponse_t	 RICsubscriptionResponse;
			RICsubscriptionDeleteResponse_t	 RICsubscriptionDeleteResponse;
			RICserviceUpdateAcknowledge_t	 RICserviceUpdateAcknowledge;
			RICcontrolAcknowledge_t	 RICcontrolAcknowledge;
			X2SetupResponse_t	 X2SetupResponse;
			ENDCX2SetupResponse_t	 ENDCX2SetupResponse;
			ResourceStatusResponse_t	 ResourceStatusResponse;
			ENBConfigurationUpdateAcknowledge_t	 ENBConfigurationUpdateAcknowledge;
			ENDCConfigurationUpdateAcknowledge_t	 ENDCConfigurationUpdateAcknowledge;
			ResetResponse_t	 ResetResponse;
		} choice;
		
		/* Context for parsing across buffer boundaries */
		asn_struct_ctx_t _asn_ctx;
	} value;
	
	/* Context for parsing across buffer boundaries */
	asn_struct_ctx_t _asn_ctx;
} RICSuccessfulOutcome_t;

/* Implementation */
extern asn_TYPE_descriptor_t asn_DEF_RICSuccessfulOutcome;
extern asn_SEQUENCE_specifics_t asn_SPC_RICSuccessfulOutcome_specs_1;
extern asn_TYPE_member_t asn_MBR_RICSuccessfulOutcome_1[3];

#ifdef __cplusplus
}
#endif

#endif	/* _RICSuccessfulOutcome_H_ */
#include "asn_internal.h"
