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
 |