From 6091bea631659a2e5d152726f3581ca2d1bd235c Mon Sep 17 00:00:00 2001 From: jet2tlf Date: Mon, 3 Jun 2024 14:43:29 -0300 Subject: codecrafters submit [skip ci] --- cmd/mybittorrent/file.go | 74 +----------------------------------------------- 1 file changed, 1 insertion(+), 73 deletions(-) (limited to 'cmd/mybittorrent/file.go') diff --git a/cmd/mybittorrent/file.go b/cmd/mybittorrent/file.go index 2302976..498ea3f 100644 --- a/cmd/mybittorrent/file.go +++ b/cmd/mybittorrent/file.go @@ -1,12 +1,6 @@ package main -import ( - "bytes" - "fmt" - "io" -) - -type File struct { +type Meta struct { Announce string `bencode:"announce"` Info FileInfo `bencode:"info"` } @@ -17,69 +11,3 @@ type FileInfo struct { PieceLength int `bencode:"piece length"` Pieces string `bencode:"pieces"` } - -func NewFile() *File { - return &File{} -} - -func (f *File) ReadFrom(r io.ReadCloser) error { - buf := new(bytes.Buffer) - - _, err := buf.ReadFrom(r) - if err != nil { - return err - } - - defer func(r io.ReadCloser) { - err := r.Close() - if err != nil { - fmt.Printf("failed to close: %v+\n", err) - } - }(r) - - if err != nil { - return err - } - - decoded, err := NewDecoder(buf.String()).Decode() - if err != nil { - return err - } - - content, ok := decoded.(map[string]any) - if !ok { - return fmt.Errorf("invalid contents") - } - - f.Announce, ok = content["announce"].(string) - if !ok { - return fmt.Errorf("invalid announce field") - } - - info, ok := content["info"].(map[string]any) - if !ok { - return fmt.Errorf("invalid info field") - } - - f.Info.Length, ok = info["length"].(int) - if !ok { - return fmt.Errorf("invalid info.length field") - } - - f.Info.Name, ok = info["name"].(string) - if !ok { - return fmt.Errorf("invalid info.name field") - } - - f.Info.PieceLength, ok = info["piece length"].(int) - if !ok { - return fmt.Errorf("invalid info.piece length field") - } - - f.Info.Pieces, ok = info["pieces"].(string) - if !ok { - return fmt.Errorf("invalid info.pieces field") - } - - return nil -} -- cgit v1.2.3