Files
meowlib/invitationinitpayload.go

81 lines
1.6 KiB
Go
Raw Normal View History

2026-04-02 18:50:04 +02:00
package meowlib
import (
"bytes"
"compress/gzip"
"io"
"os"
"github.com/makiuchi-d/gozxing"
"github.com/makiuchi-d/gozxing/qrcode"
"google.golang.org/protobuf/proto"
"image/png"
)
func (p *InvitationInitPayload) Serialize() ([]byte, error) {
return proto.Marshal(p)
}
func (p *InvitationInitPayload) Compress() ([]byte, error) {
out, err := p.Serialize()
if err != nil {
return nil, err
}
var b bytes.Buffer
gz, err := gzip.NewWriterLevel(&b, gzip.BestCompression)
if err != nil {
return nil, err
}
if _, err := gz.Write(out); err != nil {
return nil, err
}
if err := gz.Close(); err != nil {
return nil, err
}
return b.Bytes(), nil
}
func NewInvitationInitPayloadFromCompressed(compressed []byte) (*InvitationInitPayload, error) {
p := &InvitationInitPayload{}
reader := bytes.NewReader(compressed)
gzreader, err := gzip.NewReader(reader)
if err != nil {
return nil, err
}
output, err := io.ReadAll(gzreader)
if err != nil {
return nil, err
}
if err := proto.Unmarshal(output, p); err != nil {
return nil, err
}
return p, nil
}
func (p *InvitationInitPayload) WriteCompressed(filename string) error {
out, err := p.Compress()
if err != nil {
return err
}
return os.WriteFile(filename, out, 0600)
}
func (p *InvitationInitPayload) WriteQr(filename string) error {
data, err := p.Compress()
if err != nil {
return err
}
qwriter := qrcode.NewQRCodeWriter()
code, err := qwriter.Encode(string(data), gozxing.BarcodeFormat_QR_CODE, 512, 512, nil)
if err != nil {
return err
}
file, err := os.Create(filename)
if err != nil {
return err
}
defer file.Close()
return png.Encode(file, code)
}