github.com/caos/orbos@v1.5.14-0.20221103111702-e6cd0cea7ad4/internal/executables/download.go (about)

     1  package executables
     2  
     3  import (
     4  	"fmt"
     5  	"net/http"
     6  )
     7  
     8  type Downloadable struct {
     9  	Key    string
    10  	URL    string
    11  	Client *http.Client
    12  }
    13  
    14  func Download(downloadable ...Downloadable) <-chan PackableTuple {
    15  	return deriveFmapDownload(download, toDownloadableChan(downloadable))
    16  }
    17  
    18  func download(dl Downloadable) (pt PackableTuple) {
    19  	defer func() {
    20  		if _, err := pt(); err != nil {
    21  			fmt.Printf("Downloading %s from %s failed\n", dl.Key, dl.URL)
    22  			return
    23  		}
    24  		fmt.Printf("Successfully downloaded %s from %s\n", dl.Key, dl.URL)
    25  	}()
    26  
    27  	resp, err := dl.Client.Get(dl.URL)
    28  	if err != nil {
    29  		resp.Body.Close()
    30  		return deriveTuplePackable(nil, err)
    31  	}
    32  
    33  	return deriveTuplePackable(&packable{
    34  		key:  dl.Key,
    35  		data: resp.Body,
    36  	}, nil)
    37  }
    38  
    39  func toDownloadableChan(downloadable []Downloadable) <-chan Downloadable {
    40  	dlChan := make(chan Downloadable, 0)
    41  	go func() {
    42  		for _, bin := range downloadable {
    43  			dlChan <- bin
    44  		}
    45  		close(dlChan)
    46  	}()
    47  	return dlChan
    48  }