micro: rewrite options to support multiple building blocks
Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
This commit is contained in:
		
							
								
								
									
										34
									
								
								register/context.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								register/context.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,34 @@ | ||||
| package register | ||||
|  | ||||
| import ( | ||||
| 	"context" | ||||
| ) | ||||
|  | ||||
| type registerKey struct{} | ||||
|  | ||||
| // FromContext get register from context | ||||
| func FromContext(ctx context.Context) (Register, bool) { | ||||
| 	if ctx == nil { | ||||
| 		return nil, false | ||||
| 	} | ||||
| 	c, ok := ctx.Value(registerKey{}).(Register) | ||||
| 	return c, ok | ||||
| } | ||||
|  | ||||
| // NewContext put register in context | ||||
| func NewContext(ctx context.Context, c Register) context.Context { | ||||
| 	if ctx == nil { | ||||
| 		ctx = context.Background() | ||||
| 	} | ||||
| 	return context.WithValue(ctx, registerKey{}, c) | ||||
| } | ||||
|  | ||||
| // SetOption returns a function to setup a context with given value | ||||
| func SetOption(k, v interface{}) Option { | ||||
| 	return func(o *Options) { | ||||
| 		if o.Context == nil { | ||||
| 			o.Context = context.Background() | ||||
| 		} | ||||
| 		o.Context = context.WithValue(o.Context, k, v) | ||||
| 	} | ||||
| } | ||||
		Reference in New Issue
	
	Block a user