dumping all of the database and utilites into the project, will work on the managers next
This commit is contained in:
		
							
								
								
									
										70
									
								
								common/engine/compressor.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										70
									
								
								common/engine/compressor.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,70 @@
 | 
			
		||||
package engine
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"bytes"
 | 
			
		||||
	"compress/gzip"
 | 
			
		||||
	"encoding/gob"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"io"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type SomeStruct struct {
 | 
			
		||||
	A string
 | 
			
		||||
	B int64
 | 
			
		||||
	C float64
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//1.
 | 
			
		||||
func StructToBytes(obj SomeStruct) (bytes.Buffer, error) {
 | 
			
		||||
	//now gob this
 | 
			
		||||
	var indexBuffer bytes.Buffer
 | 
			
		||||
	encoder := gob.NewEncoder(&indexBuffer)
 | 
			
		||||
	if err := encoder.Encode(obj); err != nil {
 | 
			
		||||
		return indexBuffer, err
 | 
			
		||||
	}
 | 
			
		||||
	return indexBuffer, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//1.
 | 
			
		||||
func BytesToGob(obj []byte) (bytes.Buffer, error) {
 | 
			
		||||
	//now gob this
 | 
			
		||||
	var indexBuffer bytes.Buffer
 | 
			
		||||
	encoder := gob.NewEncoder(&indexBuffer)
 | 
			
		||||
	if err := encoder.Encode(obj); err != nil {
 | 
			
		||||
		return indexBuffer, err
 | 
			
		||||
	}
 | 
			
		||||
	return indexBuffer, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//2.
 | 
			
		||||
func CompressBinary(binaryBuffer *bytes.Buffer) (bytes.Buffer, error) {
 | 
			
		||||
	//now compress it
 | 
			
		||||
	var compressionBuffer bytes.Buffer
 | 
			
		||||
	compressor := gzip.NewWriter(&compressionBuffer)
 | 
			
		||||
	_, err := compressor.Write(binaryBuffer.Bytes())
 | 
			
		||||
	err = compressor.Close()
 | 
			
		||||
	return compressionBuffer, err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//3.
 | 
			
		||||
func DecompressBinary(compressionBuffer bytes.Buffer) (*gzip.Reader, error) {
 | 
			
		||||
	//now decompress it
 | 
			
		||||
	dataReader := bytes.NewReader(compressionBuffer.Bytes())
 | 
			
		||||
	if reader, err := gzip.NewReader(dataReader); err != nil {
 | 
			
		||||
		fmt.Println("gzip failed ", err)
 | 
			
		||||
		return &gzip.Reader{}, err
 | 
			
		||||
	} else {
 | 
			
		||||
		err := reader.Close()
 | 
			
		||||
		return reader, err
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//4.
 | 
			
		||||
func GobToBytes(binaryBytes io.Reader) ([]byte, error) {
 | 
			
		||||
	decoder := gob.NewDecoder(binaryBytes)
 | 
			
		||||
	var tmp []byte
 | 
			
		||||
	if err := decoder.Decode(&tmp); err != nil {
 | 
			
		||||
		return tmp, err
 | 
			
		||||
	}
 | 
			
		||||
	return tmp, nil
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user