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


#include <asn_application.h>

/* Including external dependencies */
#include "RANParameter-ID.h"
#include "RANParameter-ValueType.h"
#include <constr_SEQUENCE.h>

#ifdef __cplusplus
extern "C" {
#endif

/* RIC-PolicyAction-RANParameter-Item */
typedef struct RIC_PolicyAction_RANParameter_Item {
	RANParameter_ID_t	 ranParameter_ID;
	RANParameter_ValueType_t	 ranParameter_valueType;
	/*
	 * This type is extensible,
	 * possible extensions are below.
	 */
	
	/* Context for parsing across buffer boundaries */
	asn_struct_ctx_t _asn_ctx;
} RIC_PolicyAction_RANParameter_Item_t;

/* Implementation */
extern asn_TYPE_descriptor_t asn_DEF_RIC_PolicyAction_RANParameter_Item;
extern asn_SEQUENCE_specifics_t asn_SPC_RIC_PolicyAction_RANParameter_Item_specs_1;
extern asn_TYPE_member_t asn_MBR_RIC_PolicyAction_RANParameter_Item_1[2];

#ifdef __cplusplus
}
#endif

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