You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

65 lines
1.2 KiB
Go

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()
}