73 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			73 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
//+build ignore
 | 
						|
 | 
						|
package main
 | 
						|
 | 
						|
import (
 | 
						|
	"bytes"
 | 
						|
	"fmt"
 | 
						|
	"io"
 | 
						|
	"log"
 | 
						|
	"os"
 | 
						|
 | 
						|
	"github.com/pierrec/lz4/v4/internal/lz4block"
 | 
						|
	"github.com/pierrec/packer"
 | 
						|
	"golang.org/x/tools/imports"
 | 
						|
)
 | 
						|
 | 
						|
type DescriptorFlags struct {
 | 
						|
	// FLG
 | 
						|
	_                 [2]int
 | 
						|
	ContentChecksum   [1]bool
 | 
						|
	Size              [1]bool
 | 
						|
	BlockChecksum     [1]bool
 | 
						|
	BlockIndependence [1]bool
 | 
						|
	Version           [2]uint16
 | 
						|
	// BD
 | 
						|
	_              [4]int
 | 
						|
	BlockSizeIndex [3]lz4block.BlockSizeIndex
 | 
						|
	_              [1]int
 | 
						|
}
 | 
						|
 | 
						|
type DataBlockSize struct {
 | 
						|
	size         [31]int
 | 
						|
	Uncompressed bool
 | 
						|
}
 | 
						|
 | 
						|
func main() {
 | 
						|
	err := do()
 | 
						|
	if err != nil {
 | 
						|
		log.Fatal(err)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func do() error {
 | 
						|
	out, err := os.Create("frame_gen.go")
 | 
						|
	if err != nil {
 | 
						|
		return err
 | 
						|
	}
 | 
						|
	defer out.Close()
 | 
						|
 | 
						|
	pkg := "lz4stream"
 | 
						|
	buf := new(bytes.Buffer)
 | 
						|
	for i, t := range []interface{}{
 | 
						|
		DescriptorFlags{}, DataBlockSize{},
 | 
						|
	} {
 | 
						|
		if i > 0 {
 | 
						|
			pkg = ""
 | 
						|
		}
 | 
						|
		err := packer.GenPackedStruct(buf, &packer.Config{PkgName: pkg}, t)
 | 
						|
		if err != nil {
 | 
						|
			return fmt.Errorf("%T: %v", t, err)
 | 
						|
		}
 | 
						|
	}
 | 
						|
	// Resolve imports.
 | 
						|
	code, err := imports.Process("", buf.Bytes(), nil)
 | 
						|
	if err != nil {
 | 
						|
		// Output without imports.
 | 
						|
		_, _ = io.Copy(out, buf)
 | 
						|
		return err
 | 
						|
	}
 | 
						|
	_, err = io.Copy(out, bytes.NewReader(code))
 | 
						|
	return err
 | 
						|
}
 |