43 lines
		
	
	
		
			897 B
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			43 lines
		
	
	
		
			897 B
		
	
	
	
		
			Go
		
	
	
	
| // Copyright 2023 The Gitea Authors. All rights reserved.
 | |
| // SPDX-License-Identifier: MIT
 | |
| 
 | |
| package queue
 | |
| 
 | |
| import (
 | |
| 	"context"
 | |
| 	"time"
 | |
| )
 | |
| 
 | |
| var pushBlockTime = 5 * time.Second
 | |
| 
 | |
| type baseQueue interface {
 | |
| 	PushItem(ctx context.Context, data []byte) error
 | |
| 	PopItem(ctx context.Context) ([]byte, error)
 | |
| 	HasItem(ctx context.Context, data []byte) (bool, error)
 | |
| 	Len(ctx context.Context) (int, error)
 | |
| 	Close() error
 | |
| 	RemoveAll(ctx context.Context) error
 | |
| }
 | |
| 
 | |
| func popItemByChan(ctx context.Context, popItemFn func(ctx context.Context) ([]byte, error)) (chanItem chan []byte, chanErr chan error) {
 | |
| 	chanItem = make(chan []byte)
 | |
| 	chanErr = make(chan error)
 | |
| 	go func() {
 | |
| 		for {
 | |
| 			it, err := popItemFn(ctx)
 | |
| 			if err != nil {
 | |
| 				close(chanItem)
 | |
| 				chanErr <- err
 | |
| 				return
 | |
| 			}
 | |
| 			if it == nil {
 | |
| 				close(chanItem)
 | |
| 				close(chanErr)
 | |
| 				return
 | |
| 			}
 | |
| 			chanItem <- it
 | |
| 		}
 | |
| 	}()
 | |
| 	return chanItem, chanErr
 | |
| }
 |