Export HGVS.
[lightning.git] / gob.go
1 package main
2
3 import (
4         "bufio"
5         "encoding/gob"
6         "io"
7         _ "net/http/pprof"
8
9         "golang.org/x/crypto/blake2b"
10 )
11
12 type CompactGenome struct {
13         Name     string
14         Variants []tileVariantID
15 }
16
17 type CompactSequence struct {
18         Name          string
19         TileSequences map[string][]tileLibRef
20 }
21
22 type TileVariant struct {
23         Tag      tagID
24         Variant  tileVariantID
25         Blake2b  [blake2b.Size256]byte
26         Sequence []byte
27 }
28
29 type LibraryEntry struct {
30         TagSet           [][]byte
31         CompactGenomes   []CompactGenome
32         CompactSequences []CompactSequence
33         TileVariants     []TileVariant
34 }
35
36 func ReadCompactGenomes(rdr io.Reader) ([]CompactGenome, error) {
37         var ret []CompactGenome
38         err := DecodeLibrary(rdr, func(ent *LibraryEntry) error {
39                 ret = append(ret, ent.CompactGenomes...)
40                 return nil
41         })
42         return ret, err
43 }
44
45 func DecodeLibrary(rdr io.Reader, cb func(*LibraryEntry) error) error {
46         dec := gob.NewDecoder(bufio.NewReaderSize(rdr, 1<<26))
47         var err error
48         for err == nil {
49                 var ent LibraryEntry
50                 err = dec.Decode(&ent)
51                 if err == nil {
52                         err = cb(&ent)
53                 }
54         }
55         if err == io.EOF {
56                 return nil
57         } else {
58                 return err
59         }
60 }