This repository has been archived on 2024-03-03. You can view files and clone it, but cannot push or open issues or pull requests.
doggo-fetcher/internal/alias.go

97 lines
1.6 KiB
Go

package internal
import (
"bufio"
"errors"
"fmt"
"os"
"strings"
)
type Alias struct {
file string
aliases map[string]string
}
type Aliaser interface {
GetAliasVersion(alias string) string
GetAllAlias() map[string]string
SetAlias(alias, version string)
RenameAlias(old, new string) error
WriteAliasFile() error
}
func NewAlias(path string) (Aliaser, error) {
f, err := os.Open(path)
if err != nil {
return nil, err
}
alias := make(map[string]string)
sc := bufio.NewScanner(f)
for sc.Scan() {
splittedLine := strings.Split(sc.Text(), " ")
if len(splittedLine) != 2 {
return nil, errors.New("alias file malformatted")
}
if splittedLine[1] == "" {
continue
}
alias[splittedLine[0]] = splittedLine[1]
}
return &Alias{
file: path,
aliases: alias,
}, nil
}
func (a *Alias) GetAliasVersion(alias string) string {
if v, ok := a.aliases[alias]; !ok {
return ""
} else {
return v
}
}
func (a *Alias) GetAllAlias() map[string]string {
return a.aliases
}
func (a *Alias) SetAlias(alias, version string) {
a.aliases[alias] = strings.ReplaceAll(version, "go", "")
}
func (a *Alias) WriteAliasFile() error {
f, err := os.OpenFile(a.file, os.O_WRONLY|os.O_TRUNC, 06664)
if err != nil {
return err
}
defer f.Close()
d := []byte{}
for k, v := range a.aliases {
d = append(d, []byte(fmt.Sprintf("%s %s", k, v))...)
}
if _, err := f.Write(d); err != nil {
return err
}
return nil
}
func (a *Alias) RenameAlias(old, new string) error {
if _, ok := a.aliases[old]; !ok {
return fmt.Errorf("\"%s\" isn't an alias", old)
}
version := a.aliases[old]
a.aliases[new] = version
delete(a.aliases, old)
return nil
}