89 lines
2.3 KiB
Go
89 lines
2.3 KiB
Go
package handler
|
|
|
|
import (
|
|
"embed"
|
|
"encoding/json"
|
|
"errors"
|
|
|
|
"go/module/essential/visible/service/helper/retriever"
|
|
)
|
|
|
|
// constant
|
|
const (
|
|
// resource
|
|
obrimHandlerResourceIdentifier = "software/metadata" // change identifier if needed
|
|
obrimHandlerResourceFileName = "resource" // change file name if needed
|
|
obrimHandlerResourceFileExt = ".json" // do not change
|
|
|
|
// success
|
|
ObrimHandlerCodeSuccessResourceAvailable = "SUCCESS_RESOURCE_AVAILABLE"
|
|
|
|
// fail
|
|
ObrimHandlerCodeFailedResourceNotFound = "FAILED_RESOURCE_NOT_FOUND"
|
|
ObrimHandlerCodeFailedInvalidResource = "FAILED_INVALID_RESOURCE"
|
|
)
|
|
|
|
// obrimHandlerEmbeddedResource stores the embedded resource file.
|
|
//
|
|
//go:embed resource.json
|
|
var obrimHandlerEmbeddedResource embed.FS
|
|
|
|
// obrimHandlerProvider implements the Retriever JSON provider contract.
|
|
type obrimHandlerProvider struct{}
|
|
|
|
// Retrieve loads and returns the complete parsed resource payload.
|
|
func (provider obrimHandlerProvider) Retrieve() (any, error) {
|
|
return obrimHandlerFetch()
|
|
}
|
|
|
|
// init registers the handler during package initialization.
|
|
func init() {
|
|
obrimHandlerRegister()
|
|
}
|
|
|
|
// obrimHandlerRegister registers the handler with Retriever.
|
|
func obrimHandlerRegister() {
|
|
retriever.ObrimRetrieverJsonRegister(
|
|
obrimHandlerResourceIdentifier,
|
|
obrimHandlerProvider{},
|
|
)
|
|
}
|
|
|
|
// obrimHandlerFetch loads, parses, and returns the complete resource payload.
|
|
func obrimHandlerFetch() (any, error) {
|
|
resource, err := obrimHandlerLoadResource()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
payload, err := obrimHandlerParseResource(resource)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return payload, nil
|
|
}
|
|
|
|
// obrimHandlerLoadResource loads the embedded resource.
|
|
func obrimHandlerLoadResource() ([]byte, error) {
|
|
resource, err := obrimHandlerEmbeddedResource.ReadFile(
|
|
obrimHandlerResourceFileName + obrimHandlerResourceFileExt,
|
|
)
|
|
if err != nil {
|
|
return nil, errors.New(ObrimHandlerCodeFailedResourceNotFound)
|
|
}
|
|
|
|
return resource, nil
|
|
}
|
|
|
|
// obrimHandlerParseResource parses the embedded JSON resource.
|
|
func obrimHandlerParseResource(resource []byte) (map[string]any, error) {
|
|
var payload map[string]any
|
|
|
|
if err := json.Unmarshal(resource, &payload); err != nil {
|
|
return nil, errors.New(ObrimHandlerCodeFailedInvalidResource)
|
|
}
|
|
|
|
return payload, nil
|
|
}
|