github.com/containers/podman/v4@v4.9.4/libpod/events/memory.go (about)

     1  package events
     2  
     3  import (
     4  	"context"
     5  )
     6  
     7  // EventMemory is the structure for event writing to a channel. It contains the eventer
     8  // options and the event itself.  Methods for reading and writing are also defined from it.
     9  type EventMemory struct {
    10  	options  EventerOptions
    11  	elements chan *Event
    12  }
    13  
    14  // Write event to memory queue
    15  func (e EventMemory) Write(event Event) (err error) {
    16  	e.elements <- &event
    17  	return
    18  }
    19  
    20  // Read event(s) from memory queue
    21  func (e EventMemory) Read(ctx context.Context, options ReadOptions) (err error) {
    22  	select {
    23  	case <-ctx.Done():
    24  		return
    25  	default:
    26  	}
    27  
    28  	select {
    29  	case event := <-e.elements:
    30  		options.EventChannel <- event
    31  	default:
    32  	}
    33  	return nil
    34  }
    35  
    36  // String returns eventer type
    37  func (e EventMemory) String() string {
    38  	return e.options.EventerType
    39  }
    40  
    41  // NewMemoryEventer returns configured MemoryEventer
    42  func NewMemoryEventer() Eventer {
    43  	return EventMemory{
    44  		options: EventerOptions{
    45  			EventerType: Memory.String(),
    46  		},
    47  		elements: make(chan *Event, 100),
    48  	}
    49  }