Slice imported data by tag#.
[lightning.git] / gob.go
1 // Copyright (C) The Lightning Authors. All rights reserved.
2 //
3 // SPDX-License-Identifier: AGPL-3.0
4
5 package lightning
6
7 import (
8         "bufio"
9         "encoding/gob"
10         "io"
11         "io/ioutil"
12         _ "net/http/pprof"
13
14         "github.com/klauspost/pgzip"
15         "golang.org/x/crypto/blake2b"
16 )
17
18 type CompactGenome struct {
19         Name     string
20         Variants []tileVariantID
21         StartTag tagID
22         EndTag   tagID
23 }
24
25 type CompactSequence struct {
26         Name          string
27         TileSequences map[string][]tileLibRef
28 }
29
30 type TileVariant struct {
31         Tag      tagID
32         Variant  tileVariantID
33         Blake2b  [blake2b.Size256]byte
34         Sequence []byte
35 }
36
37 type LibraryEntry struct {
38         TagSet           [][]byte
39         CompactGenomes   []CompactGenome
40         CompactSequences []CompactSequence
41         TileVariants     []TileVariant
42 }
43
44 func ReadCompactGenomes(rdr io.Reader, gz bool) ([]CompactGenome, error) {
45         var ret []CompactGenome
46         err := DecodeLibrary(rdr, gz, func(ent *LibraryEntry) error {
47                 ret = append(ret, ent.CompactGenomes...)
48                 return nil
49         })
50         return ret, err
51 }
52
53 func DecodeLibrary(rdr io.Reader, gz bool, cb func(*LibraryEntry) error) error {
54         zrdr := ioutil.NopCloser(rdr)
55         var err error
56         if gz {
57                 zrdr, err = pgzip.NewReader(bufio.NewReaderSize(rdr, 1<<20))
58                 if err != nil {
59                         return err
60                 }
61         }
62         dec := gob.NewDecoder(zrdr)
63         for err == nil {
64                 var ent LibraryEntry
65                 err = dec.Decode(&ent)
66                 if err == nil {
67                         err = cb(&ent)
68                 }
69         }
70         if err != io.EOF {
71                 return err
72         }
73         return zrdr.Close()
74 }