summaryrefslogtreecommitdiffstats
path: root/services/f3/driver/tree.go
blob: 0302ed74aec6036bfc328bf1816272d8ad4bfc1b (plain)
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
// Copyright Earl Warren <contact@earl-warren.org>
// Copyright Loïc Dachary <loic@dachary.org>
// SPDX-License-Identifier: MIT

package driver

import (
	"context"
	"fmt"

	forgejo_options "code.gitea.io/gitea/services/f3/driver/options"

	f3_tree "code.forgejo.org/f3/gof3/v3/tree/f3"
	"code.forgejo.org/f3/gof3/v3/tree/generic"
)

type treeDriver struct {
	generic.NullTreeDriver

	options *forgejo_options.Options
}

func (o *treeDriver) Init() {
	o.NullTreeDriver.Init()
}

func (o *treeDriver) Factory(ctx context.Context, kind generic.Kind) generic.NodeDriverInterface {
	switch kind {
	case f3_tree.KindForge:
		return newForge()
	case f3_tree.KindOrganizations:
		return newOrganizations()
	case f3_tree.KindOrganization:
		return newOrganization()
	case f3_tree.KindUsers:
		return newUsers()
	case f3_tree.KindUser:
		return newUser()
	case f3_tree.KindProjects:
		return newProjects()
	case f3_tree.KindProject:
		return newProject()
	case f3_tree.KindIssues:
		return newIssues()
	case f3_tree.KindIssue:
		return newIssue()
	case f3_tree.KindComments:
		return newComments()
	case f3_tree.KindComment:
		return newComment()
	case f3_tree.KindAssets:
		return newAssets()
	case f3_tree.KindAsset:
		return newAsset()
	case f3_tree.KindLabels:
		return newLabels()
	case f3_tree.KindLabel:
		return newLabel()
	case f3_tree.KindReactions:
		return newReactions()
	case f3_tree.KindReaction:
		return newReaction()
	case f3_tree.KindReviews:
		return newReviews()
	case f3_tree.KindReview:
		return newReview()
	case f3_tree.KindReviewComments:
		return newReviewComments()
	case f3_tree.KindReviewComment:
		return newReviewComment()
	case f3_tree.KindMilestones:
		return newMilestones()
	case f3_tree.KindMilestone:
		return newMilestone()
	case f3_tree.KindPullRequests:
		return newPullRequests()
	case f3_tree.KindPullRequest:
		return newPullRequest()
	case f3_tree.KindReleases:
		return newReleases()
	case f3_tree.KindRelease:
		return newRelease()
	case f3_tree.KindTopics:
		return newTopics()
	case f3_tree.KindTopic:
		return newTopic()
	case f3_tree.KindRepositories:
		return newRepositories()
	case f3_tree.KindRepository:
		return newRepository(ctx)
	case generic.KindRoot:
		return newRoot(o.GetTree().(f3_tree.TreeInterface).NewFormat(kind))
	default:
		panic(fmt.Errorf("unexpected kind %s", kind))
	}
}

func newTreeDriver(tree generic.TreeInterface, anyOptions any) generic.TreeDriverInterface {
	driver := &treeDriver{
		options: anyOptions.(*forgejo_options.Options),
	}
	driver.Init()
	return driver
}