Skip to content

Commit

Permalink
Add package to generate QR codes
Browse files Browse the repository at this point in the history
  • Loading branch information
moncho committed Sep 3, 2017
1 parent e6184d9 commit 834c8c5
Show file tree
Hide file tree
Showing 15 changed files with 2,484 additions and 1 deletion.
8 changes: 7 additions & 1 deletion Gopkg.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

60 changes: 60 additions & 0 deletions qr/encode.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
package qr

import (
"io"

"rsc.io/qr"
)

const blackSquare = "\033[40m \033[0m"
const whiteSquare = "\033[47m \033[0m"

type encodingParams struct {
Level qr.Level
Writer io.Writer
BlackChar string
WhiteChar string
}

//Creates a QR that can be displayed on a terminal
func encode(text string, params encodingParams) error {
w := params.Writer
white := params.WhiteChar
black := params.BlackChar
code, err := qr.Encode(text, params.Level)

if err != nil {
return err
}

w.Write([]byte(white))
for i := 0; i <= code.Size; i++ {
w.Write([]byte(white))
}
w.Write([]byte("\n"))

for i := 0; i <= code.Size; i++ {
w.Write([]byte(white))
for j := 0; j <= code.Size; j++ {
if code.Black(i, j) {
w.Write([]byte(black))
} else {
w.Write([]byte(white))
}
}
w.Write([]byte("\n"))
}
return err
}

//Encode encodes the given text as a QR code, the QR is written
//on the given writer
func Encode(text string, w io.Writer) error {
params := encodingParams{
Level: qr.L,
Writer: w,
BlackChar: blackSquare,
WhiteChar: whiteSquare,
}
return encode(text, params)
}
32 changes: 32 additions & 0 deletions qr/encode_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package qr

import (
"bytes"
"testing"
)

func TestQRWritingDoesNotFail(t *testing.T) {
type args struct {
text string
}
tests := []struct {
name string
args args
wantErr bool
}{
{
"QR encoding",
args{"whatever"},
false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
w := &bytes.Buffer{}
if err := Encode(tt.args.text, w); (err != nil) != tt.wantErr {
t.Errorf("Encode() error = %v, wantErr %v", err, tt.wantErr)
}

})
}
}
27 changes: 27 additions & 0 deletions vendor/rsc.io/qr/LICENSE

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions vendor/rsc.io/qr/README.md

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

149 changes: 149 additions & 0 deletions vendor/rsc.io/qr/coding/gen.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit 834c8c5

Please sign in to comment.