/*
 * Generated by asn1c-0.9.21 (http://lionet.info/asn1c)
 * From ASN.1 module "MMS"
 * 	found in "../mms-extended.asn"
 * 	`asn1c -fskeletons-copy`
 */

#ifndef	_TypeSpecification_H_
#define	_TypeSpecification_H_


#include <asn_application.h>

/* Including external dependencies */
#include "ObjectName.h"
#include <NULL.h>
#include "Integer32.h"
#include "Unsigned8.h"
#include <BOOLEAN.h>
#include "Unsigned32.h"
#include <constr_SEQUENCE.h>
#include <asn_SEQUENCE_OF.h>
#include <constr_SEQUENCE_OF.h>
#include <constr_CHOICE.h>

#ifdef __cplusplus
extern "C" {
#endif

/* Dependencies */
typedef enum TypeSpecification_PR {
	TypeSpecification_PR_NOTHING,	/* No components present */
	TypeSpecification_PR_typeName,
	TypeSpecification_PR_array,
	TypeSpecification_PR_structure,
	TypeSpecification_PR_boolean,
	TypeSpecification_PR_bitstring,
	TypeSpecification_PR_integer,
	TypeSpecification_PR_unsigned,
	TypeSpecification_PR_floatingpoint,
	TypeSpecification_PR_octetstring,
	TypeSpecification_PR_visiblestring,
	TypeSpecification_PR_generalizedtime,
	TypeSpecification_PR_binarytime,
	TypeSpecification_PR_bcd,
	TypeSpecification_PR_objId,
	TypeSpecification_PR_mMSString,
	TypeSpecification_PR_utctime
} TypeSpecification_PR;

/* Forward declarations */
struct TypeSpecification;
struct StructComponent;

struct TypeSpecification__array {
			BOOLEAN_t	*packed	/* DEFAULT FALSE */;
			Unsigned32_t	 numberOfElements;
			struct TypeSpecification	*elementType;
			
			/* Context for parsing across buffer boundaries */
			asn_struct_ctx_t _asn_ctx;
		};

struct TypeSpecification__structure__components {
				A_SEQUENCE_OF(struct StructComponent) list;
				
				/* Context for parsing across buffer boundaries */
				asn_struct_ctx_t _asn_ctx;
			};

struct TypeSpecification__structure {
			BOOLEAN_t	*packed	/* DEFAULT FALSE */;
			 struct TypeSpecification__structure__components components;
			
			/* Context for parsing across buffer boundaries */
			asn_struct_ctx_t _asn_ctx;
		};

struct TypeSpecification__floatingpoint {
			Unsigned8_t	 formatwidth;
			Unsigned8_t	 exponentwidth;
			
			/* Context for parsing across buffer boundaries */
			asn_struct_ctx_t _asn_ctx;
		};

/* TypeSpecification */
typedef struct TypeSpecification {
	TypeSpecification_PR present;
	union TypeSpecification_u {
		ObjectName_t	 typeName;
		struct TypeSpecification__array array;
		struct TypeSpecification__structure structure;
		NULL_t	 boolean;
		Integer32_t	 bitstring;
		Unsigned8_t	 integer;
		Unsigned8_t	 Unsigned;
		struct TypeSpecification__floatingpoint floatingpoint;
		Integer32_t	 octetstring;
		Integer32_t	 visiblestring;
		NULL_t	 generalizedtime;
		BOOLEAN_t	 binarytime;
		Unsigned8_t	 bcd;
		NULL_t	 objId;
		Integer32_t	 mMSString;
		NULL_t	 utctime;
	} choice;
	
	/* Context for parsing across buffer boundaries */
	asn_struct_ctx_t _asn_ctx;
} TypeSpecification_t;

/* Implementation */
LIB61850_INTERNAL extern asn_TYPE_descriptor_t asn_DEF_TypeSpecification;

#ifdef __cplusplus
}
#endif

/* Referred external types */
#include "TypeSpecification.h"
#include "StructComponent.h"

#endif	/* _TypeSpecification_H_ */
