41 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Markdown
		
	
	
			
		
		
	
	
			41 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Markdown
		
	
	
# onecontext
 | 
						|
 | 
						|
A library to merge existing V contexts.
 | 
						|
 | 
						|
## Overview
 | 
						|
 | 
						|
Have you ever faced the situation where you have to merge multiple existing contexts?
 | 
						|
If not, then you might, eventually.
 | 
						|
 | 
						|
For example, we can face the situation where we are building an application
 | 
						|
using a library that gives us a global context.
 | 
						|
This context expires once the application is stopped.
 | 
						|
 | 
						|
Meanwhile, we are exposing a service like this:
 | 
						|
 | 
						|
```v ignore
 | 
						|
fn (f Foo) get(ctx context.Context, bar Bar) ?Baz {
 | 
						|
	. . .
 | 
						|
}
 | 
						|
```
 | 
						|
 | 
						|
Here, we receive another context provided by the service.
 | 
						|
 | 
						|
Then, in the `get` implementation, we want for example to query a database and
 | 
						|
we must provide a context for that.
 | 
						|
 | 
						|
Ideally, we would like to provide a merged context that would expire either:
 | 
						|
 | 
						|
- When the application is stopped
 | 
						|
- Or when the received service context expires
 | 
						|
 | 
						|
This is exactly the purpose of this library.
 | 
						|
 | 
						|
In our case, we can now merge the two contexts in a single one like this:
 | 
						|
 | 
						|
```v ignore
 | 
						|
ctx, cancel := onecontext.merge(ctx1, ctx2)
 | 
						|
```
 | 
						|
 | 
						|
This returns a merged context that we can now propagate
 |