You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: health.go
    path of file: ./repos/magistrala/pkg/sdk/go
    
    the code of the file until where you have to start completion: // Copyright (c) Abstract Machines
// SPDX-License-Identifier: Apache-2.0

package sdk

import (
	"encoding/json"
	"fmt"
	"net/http"

	"github.com/absmach/magistrala/pkg/errors"
)

// HealthInfo contains version endpoint response.
type HealthInfo struct {
	// Status contains service status.
	Status string `json:"status"`

	// Version contains current service ver
    
func (sdk mgSDK) Health(service string) (HealthInfo, errors.SDKError) {
	var url string
	switch service {
	case "things":
		url = fmt.Sprintf("%s/health", sdk.thingsURL)
	case "users":
		url = fmt.Sprintf("%s/health", sdk.usersURL)
	case "bootstrap":
		url = fmt.Sprintf("%s/health", sdk.bootstrapURL)
	case "certs":
		url = fmt.Sprintf("%s/health", sdk.certsURL)
	case "reader":
		url = fmt.Sprintf("%s/health", sdk.readerURL)
	case "http-adapter":
		url = fmt.Sprintf("%s/health", sdk.httpAdapterURL)
	}

	resp, err := sdk.client.Get(url)
	if err != nil {
		return HealthInfo{}, errors.NewSDKError(err)
	}
	defer resp.Body.Close()

	if err := errors.CheckError(resp, http.StatusOK); err != nil {
		return HealthInfo{}, err
	}

	var h HealthInfo
	if err := json.NewDecoder(resp.Body).Decode(&h); err != nil {
		return HealthInfo{}, errors.NewSDKError(err)
	}

	return h, nil
}