github.com/diadata-org/diadata@v1.4.593/pkg/dia/service/assetservice/source/jsonReader.go (about) 1 package source 2 3 import ( 4 "encoding/json" 5 6 "github.com/diadata-org/diadata/pkg/dia" 7 "github.com/diadata-org/diadata/pkg/dia/helpers/configCollectors" 8 ) 9 10 type Assets struct { 11 Assets []dia.Asset `json:"Assets"` 12 } 13 14 type jsonReader struct { 15 path string 16 filename string 17 assetChannel chan dia.Asset 18 doneChannel chan bool 19 } 20 21 func NewJSONReader(path string, filename string) *jsonReader { 22 var jr jsonReader 23 var assetChannel = make(chan dia.Asset) 24 var doneChannel = make(chan bool) 25 jr.assetChannel = assetChannel 26 jr.doneChannel = doneChannel 27 jr.path = path 28 jr.filename = filename 29 30 go func() { 31 jr.fetchAssets() 32 }() 33 return &jr 34 } 35 36 func (jr *jsonReader) Asset() chan dia.Asset { 37 return jr.assetChannel 38 } 39 40 func (jr *jsonReader) Done() chan bool { 41 return jr.doneChannel 42 } 43 44 // fetchAssets fetches all assets from the json file and sends them into the assetChannel. 45 func (jr *jsonReader) fetchAssets() { 46 data, err := configCollectors.ReadJSONFromConfig(jr.path + "/" + jr.filename) 47 if err != nil { 48 log.Error(err) 49 } 50 var assets Assets 51 err = json.Unmarshal(data, &assets) 52 if err != nil { 53 log.Error(err) 54 } 55 for _, asset := range assets.Assets { 56 log.Info("got asset: ", asset) 57 jr.assetChannel <- asset 58 } 59 jr.doneChannel <- true 60 }