/*
 * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
 * From ASN.1 module "E2SM-RC-IEs"
 * 	found in "e2sm-rc-nov2021.asn"
 * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
 */

#ifndef	_E2SM_RC_IndicationMessage_H_
#define	_E2SM_RC_IndicationMessage_H_


#include <asn_application.h>

/* Including external dependencies */
#include <constr_CHOICE.h>
#include <constr_SEQUENCE.h>

#ifdef __cplusplus
extern "C" {
#endif

/* Dependencies */
typedef enum E2SM_RC_IndicationMessage__ric_indicationMessage_formats_PR {
	E2SM_RC_IndicationMessage__ric_indicationMessage_formats_PR_NOTHING,	/* No components present */
	E2SM_RC_IndicationMessage__ric_indicationMessage_formats_PR_indicationMessage_Format1,
	E2SM_RC_IndicationMessage__ric_indicationMessage_formats_PR_indicationMessage_Format2,
	E2SM_RC_IndicationMessage__ric_indicationMessage_formats_PR_indicationMessage_Format3,
	E2SM_RC_IndicationMessage__ric_indicationMessage_formats_PR_indicationMessage_Format4,
	E2SM_RC_IndicationMessage__ric_indicationMessage_formats_PR_indicationMessage_Format5
	/* Extensions may appear below */
	
} E2SM_RC_IndicationMessage__ric_indicationMessage_formats_PR;

/* Forward declarations */
struct E2SM_RC_IndicationMessage_Format1;
struct E2SM_RC_IndicationMessage_Format2;
struct E2SM_RC_IndicationMessage_Format3;
struct E2SM_RC_IndicationMessage_Format4;
struct E2SM_RC_IndicationMessage_Format5;

/* E2SM-RC-IndicationMessage */
typedef struct E2SM_RC_IndicationMessage {
	struct E2SM_RC_IndicationMessage__ric_indicationMessage_formats {
		E2SM_RC_IndicationMessage__ric_indicationMessage_formats_PR present;
		union E2SM_RC_IndicationMessage__ric_indicationMessage_formats_u {
			struct E2SM_RC_IndicationMessage_Format1	*indicationMessage_Format1;
			struct E2SM_RC_IndicationMessage_Format2	*indicationMessage_Format2;
			struct E2SM_RC_IndicationMessage_Format3	*indicationMessage_Format3;
			struct E2SM_RC_IndicationMessage_Format4	*indicationMessage_Format4;
			struct E2SM_RC_IndicationMessage_Format5	*indicationMessage_Format5;
			/*
			 * This type is extensible,
			 * possible extensions are below.
			 */
		} choice;
		
		/* Context for parsing across buffer boundaries */
		asn_struct_ctx_t _asn_ctx;
	} ric_indicationMessage_formats;
	/*
	 * This type is extensible,
	 * possible extensions are below.
	 */
	
	/* Context for parsing across buffer boundaries */
	asn_struct_ctx_t _asn_ctx;
} E2SM_RC_IndicationMessage_t;

/* Implementation */
extern asn_TYPE_descriptor_t asn_DEF_E2SM_RC_IndicationMessage;

#ifdef __cplusplus
}
#endif

#endif	/* _E2SM_RC_IndicationMessage_H_ */
#include <asn_internal.h>
