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 }