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  }