package handler import ( "embed" "encoding/json" "errors" "go/module/essential/visible/service/helper/retriever" ) // constant const ( // resource obrimHandlerResourceIdentifier = "framework/glossary" // 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 }