From 0ea7dd58d3f1c791fe52d0db10c6fa60f94b7f92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Victor=20Oliveira=20Couto?= Date: Sun, 26 May 2024 16:38:05 -0300 Subject: [PATCH] :rabbit2: refactor: Reduce code complexity a little by detaching new func --- remy/internal/injector/methods.go | 41 +++++++++++++++++++++---------- 1 file changed, 28 insertions(+), 13 deletions(-) diff --git a/remy/internal/injector/methods.go b/remy/internal/injector/methods.go index ef87f55..fb3a0ff 100644 --- a/remy/internal/injector/methods.go +++ b/remy/internal/injector/methods.go @@ -36,6 +36,27 @@ func Register[T any](ij types.Injector, bind types.Bind[T], keys ...string) erro return ij.Bind(elementType, value) } +func checkSavedAsBind[T any]( + retriever types.DependencyRetriever, checkElem any, +) (foundElem *T, err error) { + if genericBind, assertOk := checkElem.(interface { + PointerValue() any + GenAsAny(injector types.DependencyRetriever) (any, error) + }); assertOk { + // Check if the returned value can implement the requested interface + if _, ok := genericBind.PointerValue().(T); !ok { + return + } + var anyVal any + if anyVal, err = genericBind.GenAsAny(retriever); err != nil { + return + } else if bindElem, ok := anyVal.(T); ok { + foundElem = &bindElem + } + } + return +} + func GetAll[T any]( retriever types.DependencyRetriever, optKey ...string, ) (resultList []T, err error) { @@ -50,19 +71,13 @@ func GetAll[T any]( case T: resultList = append(resultList, instanceBind) default: - if genericBind, assertOk := checkElem.(interface { - PointerValue() any - GenAsAny(injector types.DependencyRetriever) (any, error) - }); assertOk { - if _, ok := genericBind.PointerValue().(T); !ok { - continue - } - var anyVal any - if anyVal, err = genericBind.GenAsAny(retriever); err != nil { - return - } else if bindElem, ok := anyVal.(T); ok { - resultList = append(resultList, bindElem) - } + var foundElem *T + if foundElem, err = checkSavedAsBind[T](retriever, checkElem); err != nil { + return + } + + if foundElem != nil { + resultList = append(resultList, *foundElem) } } }