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


#include <asn_application.h>

/* Including external dependencies */
#include <BOOLEAN.h>
#include <NativeInteger.h>
#include <NativeReal.h>
#include <BIT_STRING.h>
#include <OCTET_STRING.h>
#include <PrintableString.h>
#include <constr_CHOICE.h>

#ifdef __cplusplus
extern "C" {
#endif

/* Dependencies */
typedef enum RANParameter_Value_PR {
	RANParameter_Value_PR_NOTHING,	/* No components present */
	RANParameter_Value_PR_valueBoolean,
	RANParameter_Value_PR_valueInt,
	RANParameter_Value_PR_valueReal,
	RANParameter_Value_PR_valueBitS,
	RANParameter_Value_PR_valueOctS,
	RANParameter_Value_PR_valuePrintableString
	/* Extensions may appear below */
	
} RANParameter_Value_PR;

/* RANParameter-Value */
typedef struct RANParameter_Value {
	RANParameter_Value_PR present;
	union RANParameter_Value_u {
		BOOLEAN_t	 valueBoolean;
		long	 valueInt;
		double	 valueReal;
		BIT_STRING_t	 valueBitS;
		OCTET_STRING_t	 valueOctS;
		PrintableString_t	 valuePrintableString;
		/*
		 * This type is extensible,
		 * possible extensions are below.
		 */
	} choice;
	
	/* Context for parsing across buffer boundaries */
	asn_struct_ctx_t _asn_ctx;
} RANParameter_Value_t;

/* Implementation */
extern asn_TYPE_descriptor_t asn_DEF_RANParameter_Value;
extern asn_CHOICE_specifics_t asn_SPC_RANParameter_Value_specs_1;
extern asn_TYPE_member_t asn_MBR_RANParameter_Value_1[6];
extern asn_per_constraints_t asn_PER_type_RANParameter_Value_constr_1;

#ifdef __cplusplus
}
#endif

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