{
	"description": "This type represents the general information of a MEC service.",
	"type": "object",
	"required": [
		"serName",
		"version",
		"state",
		"transportInfo",
		"serializer"
	],
	"properties": {
		"serInstanceId": {
			"description": "Identifier of the service instance assigned by the MEC platform.",
			"type": "string",
			"readOnly": true,
			"example": "ServiceInstance123"
		},
		"serName": {
			"description": "The name of the service. This is how the service producing MEC application identifies the service instance it produces.",
			"type": "string",
			"example": "ExampleService"
		},
		"serCategory": {
			"description": "This type represents the category reference",
			"type": "object",
			"required": [
				"href",
				"id",
				"name",
				"version"
			],
			"properties": {
				"href": {
					"description": "Reference of the catalogue",
					"type": "string",
					"format": "uri",
					"example": "/example/catalogue1"
				},
				"id": {
					"description": "Unique identifier of the category",
					"type": "string",
					"example": "id12345"
				},
				"name": {
					"description": "Name of the category, example values include RNI, Location & Bandwidth Management",
					"type": "string",
					"example": "RNI"
				},
				"version": {
					"description": "Category version",
					"type": "string",
					"example": "version1"
				}
			}
		},
		"version": {
			"description": "Service version",
			"type": "string",
			"example": "ServiceVersion1"
		},
		"state": {
			"description": "This enumeration defines the possible states of a service.",
			"type": "string",
			"enum": [
				"ACTIVE",
				"INACTIVE"
			],
			"example": "ACTIVE"
		},
		"transportInfo": {
			"description": "This type represents the general information of a MEC service.",
			"type": "object",
			"required": [
				"id",
				"name",
				"type",
				"protocol",
				"version",
				"endpoint",
				"security"
			],
			"properties": {
				"id": {
					"description": "The identifier of this transport",
					"type": "string",
					"example": "TransId12345"
				},
				"name": {
					"description": "The name of this transport",
					"type": "string",
					"example": "REST"
				},
				"description": {
					"description": "Human-readable description of this transport",
					"type": "string",
					"example": "REST API"
				},
				"type": {
					"description": "The enumeration TransportType represents types of transports",
					"type": "string",
					"enum": [
						"REST_HTTP",
						"MB_TOPIC_BASED",
						"MB_ROUTING",
						"MB_PUBSUB",
						"RPC",
						"RPC_STREAMING",
						"WEBSOCKET"
					],
					"example": "REST_HTTP"
				},
				"protocol": {
					"description": "The name of the protocol used. Shall be set to HTTP for a REST API.",
					"type": "string",
					"example": "HTTP"
				},
				"version": {
					"description": "The version of the protocol used",
					"type": "string",
					"example": "2.0"
				},
				"endpoint": {
					"description": "This type represents information about a transport endpoint",
					"type": "object",
					"oneOf": [{
							"description": "Entry point information of the service as string, formatted according to URI syntax",
							"type": "object",
							"required": [
								"uris"
							],
							"properties": {
								"uris": {
									"type": "array",
									"minItems": 0,
									"items": {
										"description": "Entry point information of the service",
										"type": "string",
										"format": "uri",
										"example": "/mecSerMgmtApi/service/EntryPoint"
									}
								}
							}
						},
						{
							"description": "Entry point information of the service as one or more pairs of IP address and port",
							"type": "object",
							"required": [
								"addresses"
							],
							"properties": {
								"addresses": {
									"type": "array",
									"minItems": 0,
									"items": {
										"description": "A IP address and port pair",
										"type": "object",
										"required": [
											"host",
											"port"
										],
										"properties": {
											"host": {
												"description": "Host portion of the address",
												"type": "string",
												"example": "192.0.2.0"
											},
											"port": {
												"description": "Port portion of the address",
												"type": "integer",
												"format": "uint32",
												"example": 8080
											}
										}
									}
								}
							}
						},
						{
							"description": "Entry point information of the service in a format defined by an implementation, or in an external specification.",
							"type": "object",
							"required": [
								"alternative"
							],
							"properties": {
								"alternative": {
									"type": "object"
								}
							}
						}
					]
				},
				"security": {
					"description": "This type represents security information related to a transport",
					"type": "object",
					"properties": {
						"oAuth2Info": {
							"description": "Parameters related to use of OAuth 2.0",
							"required": [
								"grantTypes",
								"tokenEndpoint"
							],
							"properties": {
								"grantTypes": {
									"description": "List of supported OAuth 2.0 grant types.",
									"type": "array",
									"minItems": 1,
									"maxItems": 4,
									"items": {
										"description": "OAuth 2.0 grant type",
										"type": "string",
										"enum": [
											"OAUTH2_AUTHORIZATION_CODE",
											"OAUTH2_IMPLICIT_GRANT",
											"OAUTH2_RESOURCE_OWNER",
											"OAUTH2_CLIENT_CREDENTIALS"
										],
										"example": "OAUTH2_CLIENT_CREDENTIALS"
									}
								},
								"tokenEndpoint": {
									"description": "The token endpoint",
									"type": "string",
									"format": "uri",
									"example": "/mecSerMgmtApi/security/TokenEndPoint"
								}
							},
							"type": "object"
						}
					}
				},
				"implSpecificInfo": {
					"description": "Additional implementation specific details of the transport",
					"type": "object"
				}
			}
		},
		"serializer": {
			"description": "The enumeration  represents types of serializers",
			"type": "string",
			"enum": [
				"JSON",
				"XML",
				"PROTOBUF3"
			],
			"example": "JSON"
		},
		"scopeOfLocality": {
			"description": "The scope of locality as expressed by \"consumedLocalOnly\" and \"isLocal\". If absent, defaults to MEC_HOST",
			"type": "string",
			"enum": [
				"MEC_SYSTEM",
				"MEC_HOST",
				"NFVI_POP",
				"ZONE",
				"ZONE_GROUP",
				"NFVI_NODE"
			],
			"example": "MEC_SYSTEM"
		},
		"consumedLocalOnly": {
			"description": "Indicate whether the service can only be consumed by the MEC applications located in the same locality (as defined by scopeOfLocality) as this  service instance.",
			"type": "boolean",
			"example": false
		},
		"isLocal": {
			"description": "Indicate whether the service is located in the same locality (as defined by scopeOfLocality) as the consuming MEC application.",
			"type": "boolean",
			"example": true
		}
	}
}