/*
 * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
 * From ASN.1 module "RUA-IEs"
 * 	found in "../../asn1/rua/RUA-IEs.asn"
 */

#ifndef	_RUA_IntraDomainNasNodeSelector_H_
#define	_RUA_IntraDomainNasNodeSelector_H_


#include <asn_application.h>

/* Including external dependencies */
#include <osmocom/rua/RUA_Gsm-map-IDNNS.h>
#include <osmocom/rua/RUA_Ansi-41-IDNNS.h>
#include <constr_CHOICE.h>
#include <constr_SEQUENCE.h>
#include <BIT_STRING.h>

#ifdef __cplusplus
extern "C" {
#endif

/* Dependencies */
typedef enum version_PR {
	version_PR_NOTHING,	/* No components present */
	version_PR_release99,
	version_PR_later
} version_PR;
typedef enum cn_Type_PR {
	cn_Type_PR_NOTHING,	/* No components present */
	cn_Type_PR_gsm_Map_IDNNS,
	cn_Type_PR_ansi_41_IDNNS
} cn_Type_PR;

/* RUA_IntraDomainNasNodeSelector */
typedef struct RUA_IntraDomainNasNodeSelector {
	struct version {
		version_PR present;
		union RUA_IntraDomainNasNodeSelector__version_u {
			struct release99 {
				struct cn_Type {
					cn_Type_PR present;
					union RUA_IntraDomainNasNodeSelector__version__release99__cn_Type_u {
						RUA_Gsm_map_IDNNS_t	 gsm_Map_IDNNS;
						RUA_Ansi_41_IDNNS_t	 ansi_41_IDNNS;
					} choice;
					
					/* Context for parsing across buffer boundaries */
					asn_struct_ctx_t _asn_ctx;
				} cn_Type;
				
				/* Context for parsing across buffer boundaries */
				asn_struct_ctx_t _asn_ctx;
			} release99;
			struct later {
				BIT_STRING_t	 futurecoding;
				
				/* Context for parsing across buffer boundaries */
				asn_struct_ctx_t _asn_ctx;
			} later;
		} choice;
		
		/* Context for parsing across buffer boundaries */
		asn_struct_ctx_t _asn_ctx;
	} version;
	
	/* Context for parsing across buffer boundaries */
	asn_struct_ctx_t _asn_ctx;
} RUA_IntraDomainNasNodeSelector_t;

/* Implementation */
extern asn_TYPE_descriptor_t asn_DEF_RUA_IntraDomainNasNodeSelector;

#ifdef __cplusplus
}
#endif

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