This repository has been archived by the owner on Apr 9, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 4
/
postnumre.go
56 lines (50 loc) · 1.88 KB
/
postnumre.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
package dawa
import (
"bufio"
"github.com/ugorji/go/codec"
"io"
)
type Postnummer struct {
Href string `json:"href"` // Postnummerets unikke URL.
Kommuner []KommuneRef `json:"kommuner"` // De kommuner hvis areal overlapper postnumeret areal.
Navn string `json:"navn"` // Det navn der er knyttet til postnummeret, typisk byens eller bydelens navn. Repræsenteret ved indtil 20 tegn. Eksempel: ”København NV”.
Nr string `json:"nr"` // Unik identifikation af det postnummeret. Postnumre fastsættes af Post Danmark. Repræsenteret ved fire cifre. Eksempel: ”2400” for ”København NV”.
// Never set to anything but null
Stormodtageradresser []AdgangsAdresseRef `json:"stormodtageradresser"` // Hvis postnummeret er et stormodtagerpostnummer rummer feltet adresserne på stormodtageren.
}
// PostnummerIter is an Iterator that enable you to get individual entries.
type PostnummerIter struct {
a chan Postnummer
err error
closer
}
// Next will return addresses.
// It will return an error if that has been encountered.
// When there are not more entries nil, io.EOF will be returned.
func (a *PostnummerIter) Next() (*Postnummer, error) {
v, ok := <-a.a
if ok {
return &v, nil
}
return nil, a.err
}
// ImportPostnumreJSON will import "postnumre" from a JSON input, supplied to the reader.
// An iterator will be returned that return all items.
func ImportPostnumreJSON(in io.Reader) (*PostnummerIter, error) {
var h codec.JsonHandle
h.DecodeOptions.ErrorIfNoField = JSONStrictFieldCheck
// use a buffered reader for efficiency
if _, ok := in.(io.ByteScanner); !ok {
in = bufio.NewReader(in)
}
ret := &PostnummerIter{a: make(chan Postnummer, 100)}
go func() {
defer close(ret.a)
var dec *codec.Decoder = codec.NewDecoder(in, &h)
ret.err = dec.Decode(&ret.a)
if ret.err == nil {
ret.err = io.EOF
}
}()
return ret, nil
}