mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 00:20:25 +08:00 
			
		
		
		
	* Dropped unused codekit config * Integrated dynamic and static bindata for public * Ignore public bindata * Add a general generate make task * Integrated flexible public assets into web command * Updated vendoring, added all missiong govendor deps * Made the linter happy with the bindata and dynamic code * Moved public bindata definition to modules directory * Ignoring the new bindata path now * Updated to the new public modules import path * Updated public bindata command and drop the new prefix
		
			
				
	
	
		
			112 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			112 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package iohelper
 | 
						|
 | 
						|
import (
 | 
						|
	"encoding/binary"
 | 
						|
 | 
						|
	pb "github.com/golang/protobuf/proto"
 | 
						|
	"github.com/juju/errors"
 | 
						|
)
 | 
						|
 | 
						|
type PbBuffer struct {
 | 
						|
	b []byte
 | 
						|
}
 | 
						|
 | 
						|
func NewPbBuffer() *PbBuffer {
 | 
						|
	b := []byte{}
 | 
						|
	return &PbBuffer{
 | 
						|
		b: b,
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func (b *PbBuffer) Bytes() []byte {
 | 
						|
	return b.b
 | 
						|
}
 | 
						|
 | 
						|
func (b *PbBuffer) Write(d []byte) (int, error) {
 | 
						|
	b.b = append(b.b, d...)
 | 
						|
	return len(d), nil
 | 
						|
}
 | 
						|
 | 
						|
func (b *PbBuffer) WriteByte(d byte) error {
 | 
						|
	return binary.Write(b, binary.BigEndian, d)
 | 
						|
}
 | 
						|
 | 
						|
func (b *PbBuffer) WriteString(d string) error {
 | 
						|
	return binary.Write(b, binary.BigEndian, d)
 | 
						|
}
 | 
						|
 | 
						|
func (b *PbBuffer) WriteInt32(d int32) error {
 | 
						|
	return binary.Write(b, binary.BigEndian, d)
 | 
						|
}
 | 
						|
 | 
						|
func (b *PbBuffer) WriteInt64(d int64) error {
 | 
						|
	return binary.Write(b, binary.BigEndian, d)
 | 
						|
}
 | 
						|
 | 
						|
func (b *PbBuffer) WriteFloat32(d float32) error {
 | 
						|
	return binary.Write(b, binary.BigEndian, d)
 | 
						|
}
 | 
						|
 | 
						|
func (b *PbBuffer) WriteFloat64(d float64) error {
 | 
						|
	return binary.Write(b, binary.BigEndian, d)
 | 
						|
}
 | 
						|
 | 
						|
func (b *PbBuffer) WritePBMessage(d pb.Message) error {
 | 
						|
	buf, err := pb.Marshal(d)
 | 
						|
	if err != nil {
 | 
						|
		return errors.Trace(err)
 | 
						|
	}
 | 
						|
 | 
						|
	_, err = b.Write(buf)
 | 
						|
	return errors.Trace(err)
 | 
						|
}
 | 
						|
 | 
						|
func (b *PbBuffer) WriteDelimitedBuffers(bufs ...*PbBuffer) error {
 | 
						|
	totalLength := 0
 | 
						|
	lens := make([][]byte, len(bufs))
 | 
						|
	for i, v := range bufs {
 | 
						|
		n := len(v.Bytes())
 | 
						|
		lenb := pb.EncodeVarint(uint64(n))
 | 
						|
 | 
						|
		totalLength += len(lenb) + n
 | 
						|
		lens[i] = lenb
 | 
						|
	}
 | 
						|
 | 
						|
	err := b.WriteInt32(int32(totalLength))
 | 
						|
	if err != nil {
 | 
						|
		return errors.Trace(err)
 | 
						|
	}
 | 
						|
 | 
						|
	for i, v := range bufs {
 | 
						|
		_, err = b.Write(lens[i])
 | 
						|
		if err != nil {
 | 
						|
			return errors.Trace(err)
 | 
						|
		}
 | 
						|
 | 
						|
		_, err = b.Write(v.Bytes())
 | 
						|
		if err != nil {
 | 
						|
			return errors.Trace(err)
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	return nil
 | 
						|
}
 | 
						|
 | 
						|
func (b *PbBuffer) PrependSize() error {
 | 
						|
	size := int32(len(b.b))
 | 
						|
	newBuf := NewPbBuffer()
 | 
						|
 | 
						|
	err := newBuf.WriteInt32(size)
 | 
						|
	if err != nil {
 | 
						|
		return errors.Trace(err)
 | 
						|
	}
 | 
						|
 | 
						|
	_, err = newBuf.Write(b.b)
 | 
						|
	if err != nil {
 | 
						|
		return errors.Trace(err)
 | 
						|
	}
 | 
						|
 | 
						|
	*b = *newBuf
 | 
						|
	return nil
 | 
						|
}
 |