]> Sergey Matveev's repositories - btrtrc.git/blob - metainfo/nodes.go
feat: remove print BuildFromFilePath
[btrtrc.git] / metainfo / nodes.go
1 package metainfo
2
3 import (
4         "fmt"
5         "net"
6         "strconv"
7
8         "github.com/anacrolix/torrent/bencode"
9 )
10
11 type Node string
12
13 var (
14         _ bencode.Unmarshaler = new(Node)
15 )
16
17 func (n *Node) UnmarshalBencode(b []byte) (err error) {
18         var iface interface{}
19         err = bencode.Unmarshal(b, &iface)
20         if err != nil {
21                 return
22         }
23         switch v := iface.(type) {
24         case string:
25                 *n = Node(v)
26         case []interface{}:
27                 func() {
28                         defer func() {
29                                 r := recover()
30                                 if r != nil {
31                                         err = r.(error)
32                                 }
33                         }()
34                         *n = Node(net.JoinHostPort(v[0].(string), strconv.FormatInt(v[1].(int64), 10)))
35                 }()
36         default:
37                 err = fmt.Errorf("unsupported type: %T", iface)
38         }
39         return
40 }