hidrocor

ref: 0.0.2

./wiki.go


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
// This package holds the logic for reading a dir, finding out the main file,
// etc. It's a mere abstraction on top of the wiki's filesystem. When fed with
// a path, it'll return a read file for markdown consumption

package main

import (
	"errors"
	"os"
	"path"
)

func Lookup(wikiPath string, docPath string) ([]byte, error) {
	if docPath == "" {
		docPath = "README.md"
	}

	routePath := path.Join(wikiPath, docPath)
	fileInfo, err := os.Stat(routePath)

	if err != nil {
		return nil, err
	}

	if fileInfo.IsDir() {
		files, err := os.ReadDir(routePath)
		if err != nil {
			return nil, err
		}

		for _, file := range files {
			switch file.Name() {
			case
				"index.md",
				"INDEX.md",
				"readme.md",
				"README.md":
				source, err := os.ReadFile(path.Join(routePath, file.Name()))

				if err != nil {
					return nil, err
				}

				return source, nil
			}
		}
	} else {
		source, err := os.ReadFile(routePath)

		if err != nil {
			return nil, err
		}

		return source, nil
	}

	return nil, errors.New("Something wen't really wrong")
}