package shrty import ( "bytes" "encoding/json" "errors" "io" "os" ) type DB struct { Path string Store *Store } type Store struct { Token map[string]*Data `json:"token"` // [token]*Data Url map[string]string `json:"url"` // [hash]token } var ( ErrNotFound = errors.New("Url not Found") ErrCreateToken = errors.New("There are some problems while creating Token") ErrNoUrl = errors.New("String is no Url!") ) // Open up func Open(path string) (*DB, error) { s := DB{Path: path, Store: &Store{ Token: make(map[string]*Data), Url: make(map[string]string)}, } // Open db ore create if not exist! if db, err := os.OpenFile(s.Path, os.O_RDWR|os.O_CREATE, 0644); err == nil { json.Unmarshal(StreamToByte(db), &s.Store) db.Close() return &s, nil } else { return &s, err } } func (s *DB) Remove(URL string) error { return nil } func (s *DB) Save() error { if db, err := os.OpenFile(s.Path, os.O_RDWR|os.O_CREATE, 0644); err == nil { b, err := json.Marshal(s.Store) db.Write(b) db.Close() return err } else { return err } } func StreamToByte(stream io.Reader) []byte { buf := new(bytes.Buffer) buf.ReadFrom(stream) return buf.Bytes() }