github.com/bingoohuang/pkger@v0.0.0-20210127185155-a71b9df4c4c7/pkging/pkgutil/dump.go (about)

     1  package pkgutil
     2  
     3  import (
     4  	"encoding/json"
     5  	"fmt"
     6  	"io"
     7  	"os"
     8  
     9  	"github.com/bingoohuang/pkger/here"
    10  	"github.com/bingoohuang/pkger/pkging"
    11  )
    12  
    13  func Dump(w io.Writer, pkg pkging.Pkger) error {
    14  	d := struct {
    15  		Type  string
    16  		Info  here.Info
    17  		Paths map[string]os.FileInfo
    18  	}{
    19  		Type:  fmt.Sprintf("%T", pkg),
    20  		Paths: map[string]os.FileInfo{},
    21  	}
    22  
    23  	info, err := pkg.Current()
    24  	if err != nil {
    25  		return err
    26  	}
    27  	d.Info = info
    28  
    29  	err = pkg.Walk("/", func(path string, info os.FileInfo, err error) error {
    30  		if err != nil {
    31  			return err
    32  		}
    33  
    34  		d.Paths[path] = info
    35  		return nil
    36  	})
    37  	if err != nil {
    38  		return err
    39  	}
    40  
    41  	enc := json.NewEncoder(w)
    42  	enc.SetIndent("", " ")
    43  
    44  	if err := enc.Encode(d); err != nil {
    45  		return err
    46  	}
    47  
    48  	return nil
    49  }