package main import ( "os" "path" ) type Wiki struct { Root string } func (w Wiki) fileName(title string) string { return path.Join(w.Root, title) } func (w Wiki) Save(p Page) error { return os.WriteFile(w.fileName(p.Title), p.Body, 0600) } func (w Wiki) Load(title string) (Page, error) { body, err := os.ReadFile(w.fileName(title)) return Page{Title: title, Body: body}, err } func (w Wiki) Delete(title string) error { return os.Remove(w.fileName(title)) } func (w Wiki) List() ([]os.FileInfo, error) { files, err := os.ReadDir(w.Root) if err != nil { return nil, err } var pages []os.FileInfo for _, entry := range files { file := entry.Name() if !entry.IsDir() && file[0] != '.' { info, err := entry.Info() if err != nil { return nil, err } pages = append(pages, info) } } return pages, nil }