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

#ifndef	_RUA_PrivateIE_ID_H_
#define	_RUA_PrivateIE_ID_H_


#include <asn_application.h>

/* Including external dependencies */
#include <NativeInteger.h>
#include <OBJECT_IDENTIFIER.h>
#include <constr_CHOICE.h>

#ifdef __cplusplus
extern "C" {
#endif

/* Dependencies */
typedef enum RUA_PrivateIE_ID_PR {
	RUA_PrivateIE_ID_PR_NOTHING,	/* No components present */
	RUA_PrivateIE_ID_PR_local,
	RUA_PrivateIE_ID_PR_global
} RUA_PrivateIE_ID_PR;

/* RUA_PrivateIE-ID */
typedef struct RUA_PrivateIE_ID {
	RUA_PrivateIE_ID_PR present;
	union RUA_PrivateIE_ID_u {
		long	 local;
		OBJECT_IDENTIFIER_t	 global;
	} choice;
	
	/* Context for parsing across buffer boundaries */
	asn_struct_ctx_t _asn_ctx;
} RUA_PrivateIE_ID_t;

/* Implementation */
extern asn_TYPE_descriptor_t asn_DEF_RUA_PrivateIE_ID;

#ifdef __cplusplus
}
#endif

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