/*
 * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
 * From ASN.1 module "HNBAP-IEs"
 * 	found in "../../asn1/hnbap/HNBAP-IEs.asn"
 * 	`asn1c -gen-PER`
 */

#ifndef	_ConfigurationInformation_H_
#define	_ConfigurationInformation_H_


#include <asn_application.h>

/* Including external dependencies */
#include "HNBConfigurationInformationProvided.h"
#include "HNBConfigurationInformationMissing.h"
#include <constr_CHOICE.h>

#ifdef __cplusplus
extern "C" {
#endif

/* Dependencies */
typedef enum ConfigurationInformation_PR {
	ConfigurationInformation_PR_NOTHING,	/* No components present */
	ConfigurationInformation_PR_provided,
	ConfigurationInformation_PR_missing,
	/* Extensions may appear below */
	
} ConfigurationInformation_PR;

/* ConfigurationInformation */
typedef struct ConfigurationInformation {
	ConfigurationInformation_PR present;
	union ConfigurationInformation_u {
		HNBConfigurationInformationProvided_t	 provided;
		HNBConfigurationInformationMissing_t	 missing;
		/*
		 * This type is extensible,
		 * possible extensions are below.
		 */
	} choice;
	
	/* Context for parsing across buffer boundaries */
	asn_struct_ctx_t _asn_ctx;
} ConfigurationInformation_t;

/* Implementation */
extern asn_TYPE_descriptor_t asn_DEF_ConfigurationInformation;

#ifdef __cplusplus
}
#endif

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