-
Notifications
You must be signed in to change notification settings - Fork 42
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
refactor: add context functions for better encapsulation
- Loading branch information
Aldo Fuster Turpin
committed
Apr 24, 2024
1 parent
d5615c4
commit e3a5202
Showing
16 changed files
with
370 additions
and
75 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,97 @@ | ||
package main | ||
|
||
import ( | ||
"context" | ||
"fmt" | ||
"log/slog" | ||
|
||
"github.com/Azure/ARO-HCP/internal/api" | ||
"github.com/Azure/ARO-HCP/internal/api/arm" | ||
) | ||
|
||
type ContextError struct { | ||
got any | ||
} | ||
|
||
func (c *ContextError) Error() string { | ||
return fmt.Sprintf( | ||
"error retrieving value from context, value obtained was '%v' and type obtained was '%T'", | ||
c.got, | ||
c.got) | ||
} | ||
|
||
type contextKey int | ||
|
||
const ( | ||
// Keys for request-scoped data in http.Request contexts | ||
contextKeyOriginalPath contextKey = iota | ||
contextKeyBody | ||
contextKeyLogger | ||
contextKeyVersion | ||
contextKeyCorrelationData | ||
contextKeySystemData | ||
contextKeySubscriptionState | ||
) | ||
|
||
func ContextWithOriginalPath(ctx context.Context, originalPath string) context.Context { | ||
return context.WithValue(ctx, contextKeyOriginalPath, originalPath) | ||
} | ||
|
||
func OriginalPathFromContext(ctx context.Context) (string, bool) { | ||
originalPath, ok := ctx.Value(contextKeyOriginalPath).(string) | ||
return originalPath, ok | ||
} | ||
|
||
func ContextWithBody(ctx context.Context, body []byte) context.Context { | ||
return context.WithValue(ctx, contextKeyBody, body) | ||
} | ||
|
||
func BodyFromContext(ctx context.Context) ([]byte, bool) { | ||
body, ok := ctx.Value(contextKeyBody).([]byte) | ||
return body, ok | ||
} | ||
|
||
func ContextWithLogger(ctx context.Context, logger *slog.Logger) context.Context { | ||
return context.WithValue(ctx, contextKeyLogger, logger) | ||
} | ||
|
||
func LoggerFromContext(ctx context.Context) (*slog.Logger, bool) { | ||
logger, ok := ctx.Value(contextKeyLogger).(*slog.Logger) | ||
return logger, ok | ||
} | ||
|
||
func ContextWithVersion(ctx context.Context, version api.Version) context.Context { | ||
return context.WithValue(ctx, contextKeyVersion, version) | ||
} | ||
|
||
func VersionFromContext(ctx context.Context) (api.Version, bool) { | ||
version, ok := ctx.Value(contextKeyVersion).(api.Version) | ||
return version, ok | ||
} | ||
|
||
func ContextWithCorrelationData(ctx context.Context, correlationData *arm.CorrelationData) context.Context { | ||
return context.WithValue(ctx, contextKeyCorrelationData, correlationData) | ||
} | ||
|
||
func CorrelationDataFromContext(ctx context.Context) (*arm.CorrelationData, bool) { | ||
correlationData, ok := ctx.Value(contextKeyCorrelationData).(*arm.CorrelationData) | ||
return correlationData, ok | ||
} | ||
|
||
func ContextWithSystemData(ctx context.Context, systemData *arm.SystemData) context.Context { | ||
return context.WithValue(ctx, contextKeySystemData, systemData) | ||
} | ||
|
||
func SystemDataFromContext(ctx context.Context) (*arm.SystemData, bool) { | ||
systemData, ok := ctx.Value(contextKeySystemData).(*arm.SystemData) | ||
return systemData, ok | ||
} | ||
|
||
func ContextWithSubscriptionState(ctx context.Context, subscriptionState arm.RegistrationState) context.Context { | ||
return context.WithValue(ctx, contextKeySubscriptionState, subscriptionState) | ||
} | ||
|
||
func SubscriptionStateFromContext(ctx context.Context) (arm.RegistrationState, bool) { | ||
subscriptionState, ok := ctx.Value(contextKeySubscriptionState).(arm.RegistrationState) | ||
return subscriptionState, ok | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.