From a84719762a6073ccaba8ed547da065faacea433d Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Sun, 9 Jul 2017 23:08:36 +0200 Subject: Parse --- zhead/header.go | 42 ++++++++++++++++++++++++++++++++++++++++++ zhead/header_test.go | 14 ++++++++++++++ 2 files changed, 56 insertions(+) (limited to 'zhead') diff --git a/zhead/header.go b/zhead/header.go index 400be5b..2984345 100644 --- a/zhead/header.go +++ b/zhead/header.go @@ -1,7 +1,12 @@ package zhead import ( + "bufio" "bytes" + "encoding/hex" + "io" + "strconv" + "strings" "text/template" "time" ) @@ -37,3 +42,40 @@ func (h Header) Print() ([]byte, error) { err = t.ExecuteTemplate(buf, "header", h) return buf.Bytes(), err } + +func Parse(r io.Reader) (Header, error) { + var inSum bool + var h Header + scanner := bufio.NewScanner(r) + for scanner.Scan() { + line := scanner.Text() + switch { + case strings.HasPrefix(line, "date="): + t, err := time.Parse(time.RFC3339, line[5:]) + if err != nil { + return Header{}, err + } + h.Date = t + case strings.HasPrefix(line, "key="): + h.KeyFile = line[4:] + case strings.HasPrefix(line, "algorithm="): + h.Alg = line[10:] + case strings.HasPrefix(line, "blocksize="): + i, err := strconv.Atoi(line[9:]) + if err != nil { + return Header{}, err + } + h.BlockSize = i + case line == "": + inSum = true + } + if inSum { + sum, err := hex.DecodeString(line) + if err != nil { + return Header{}, err + } + h.Sums = append(h.Sums, sum) + } + } + return h, scanner.Err() +} diff --git a/zhead/header_test.go b/zhead/header_test.go index b6f8d35..820763a 100644 --- a/zhead/header_test.go +++ b/zhead/header_test.go @@ -1,6 +1,7 @@ package zhead import ( + "os" "testing" "time" ) @@ -22,3 +23,16 @@ func TestHeader(t *testing.T) { } t.Log(string(body)) } + +func TestParse(t *testing.T) { + fd, err := os.Open("testdata/header.txt") + if err != nil { + t.Fatal(err) + } + defer fd.Close() + h, err := Parse(fd) + if err != nil { + t.Fatal(err) + } + t.Log(h) +} -- cgit v1.2.3