/*
 * 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	_RANParameter_Testing_Item_Choice_Structure_H_
#define	_RANParameter_Testing_Item_Choice_Structure_H_


#include <asn_application.h>

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

#ifdef __cplusplus
extern "C" {
#endif

/* Forward declarations */
struct RANParameter_Testing_STRUCTURE;

/* RANParameter-Testing-Item-Choice-Structure */
typedef struct RANParameter_Testing_Item_Choice_Structure {
	struct RANParameter_Testing_STRUCTURE	*ranParameter_Structure;
	/*
	 * This type is extensible,
	 * possible extensions are below.
	 */
	
	/* Context for parsing across buffer boundaries */
	asn_struct_ctx_t _asn_ctx;
} RANParameter_Testing_Item_Choice_Structure_t;

/* Implementation */
extern asn_TYPE_descriptor_t asn_DEF_RANParameter_Testing_Item_Choice_Structure;
extern asn_SEQUENCE_specifics_t asn_SPC_RANParameter_Testing_Item_Choice_Structure_specs_1;
extern asn_TYPE_member_t asn_MBR_RANParameter_Testing_Item_Choice_Structure_1[1];

#ifdef __cplusplus
}
#endif

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