Add txqr package

This commit is contained in:
Ivan Danyliuk
2018-11-10 19:25:36 +01:00
parent e4cf6df2b1
commit f99345a92e
2 changed files with 66 additions and 0 deletions
+48
View File
@@ -0,0 +1,48 @@
package txqr
import (
"fmt"
"image"
"github.com/divan/txqr/protocol"
"github.com/divan/txqr/qr"
)
func Encode(str string) (<-chan image.Image, error) {
size := 100
chunks, err := protocol.NewEncoder(size).Encode(str)
if err != nil {
return nil, fmt.Errorf("encode: %v", err)
}
ch := make(chan image.Image)
go func(ch chan<- image.Image) {
defer close(ch)
for _, chunk := range chunks {
img, err := qr.Encode(chunk, 512)
if err != nil {
// TODO: handle error better
fmt.Errorf("[ERROR] encode: %v", err)
continue
}
ch <- img
}
}(ch)
return ch, nil
}
func Decode(ch <-chan image.Image) (string, error) {
dec := protocol.NewDecoder()
for img := range ch {
chunk, err := qr.Decode(img)
if err != nil {
return "", fmt.Errorf("decode: %v", err)
}
err = dec.DecodeChunk(chunk)
if err != nil {
return "", fmt.Errorf("decode chunk: %v", err)
}
}
return dec.Data(), nil
}
+18
View File
@@ -0,0 +1,18 @@
package txqr
import "testing"
func TestTXQR(t *testing.T) {
str := "hello, world!"
ch, err := Encode(str)
if err != nil {
t.Fatalf("Encode failed: %v", err)
}
got, err := Decode(ch)
if err != nil {
t.Fatalf("Decode failed: %v", err)
}
if got != str {
t.Fatalf("Expected '%s', but got '%s'", str, got)
}
}