github.com/Secbyte/godog@v0.7.14-0.20200116175429-d8f0aeeb70cf/metadata.go (about)

     1  package godog
     2  
     3  import (
     4  	"sync"
     5  )
     6  
     7  // StepMetadata provides additional information about the step for the cucumber formatter
     8  type StepMetadata struct {
     9  	Comment  string
    10  	Mimetype string //mime_type
    11  	Data     string
    12  }
    13  
    14  //AllMetaData centrally store metadata
    15  type AllMetaData struct {
    16  	m          *sync.Mutex
    17  	dictionary map[string][]StepMetadata
    18  }
    19  
    20  // CreateMetaData create function
    21  func CreateMetaData() AllMetaData {
    22  	return AllMetaData{
    23  		m:          new(sync.Mutex),
    24  		dictionary: make(map[string][]StepMetadata),
    25  	}
    26  }
    27  
    28  //AddMetadata add data for later reference
    29  func (a *AllMetaData) AddMetadata(stepID string, data StepMetadata) {
    30  	a.m.Lock()
    31  	defer a.m.Unlock()
    32  
    33  	if d, ok := a.dictionary[stepID]; ok {
    34  		a.dictionary[stepID] = append(d, data)
    35  	} else {
    36  		a.dictionary[stepID] = []StepMetadata{data}
    37  	}
    38  }
    39  
    40  // PopMetadata remove data and return
    41  func (a *AllMetaData) PopMetadata(stepID string) []StepMetadata {
    42  	a.m.Lock()
    43  	defer a.m.Unlock()
    44  
    45  	if d, ok := a.dictionary[stepID]; ok {
    46  		delete(a.dictionary, stepID)
    47  		return d
    48  	}
    49  
    50  	return []StepMetadata{}
    51  }