This repository has been archived by the owner on Aug 16, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 6
/
item_builder.go
103 lines (85 loc) · 1.74 KB
/
item_builder.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
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
package layer
func ItemFromLayer(l Layer) *Item {
li, ok := l.(*Item)
if !ok {
return nil
}
return li
}
func ItemFromLayerRef(l *Layer) *Item {
if l == nil {
return nil
}
li, ok := (*l).(*Item)
if !ok {
return nil
}
return li
}
type ItemBuilder struct {
l *Item
}
func NewItem() *ItemBuilder {
return &ItemBuilder{l: &Item{layerBase: layerBase{visible: true}}}
}
func (b *ItemBuilder) Build() (*Item, error) {
if b.l.id.IsNil() {
return nil, ErrInvalidID
}
return b.l, nil
}
func (b *ItemBuilder) MustBuild() *Item {
item, err := b.Build()
if err != nil {
panic(err)
}
return item
}
func (b *ItemBuilder) base(layer layerBase) *ItemBuilder {
b.l.layerBase = layer
return b
}
func (b *ItemBuilder) ID(id ID) *ItemBuilder {
b.l.id = id
return b
}
func (b *ItemBuilder) NewID() *ItemBuilder {
b.l.id = NewID()
return b
}
func (b *ItemBuilder) Scene(s SceneID) *ItemBuilder {
b.l.scene = s
return b
}
func (b *ItemBuilder) Name(name string) *ItemBuilder {
b.l.name = name
return b
}
func (b *ItemBuilder) IsVisible(visible bool) *ItemBuilder {
b.l.visible = visible
return b
}
func (b *ItemBuilder) Plugin(plugin *PluginID) *ItemBuilder {
b.l.plugin = plugin.CopyRef()
return b
}
func (b *ItemBuilder) Extension(extension *PluginExtensionID) *ItemBuilder {
b.l.extension = extension.CloneRef()
return b
}
func (b *ItemBuilder) Property(p *PropertyID) *ItemBuilder {
b.l.property = p.CopyRef()
return b
}
func (b *ItemBuilder) Infobox(infobox *Infobox) *ItemBuilder {
b.l.infobox = infobox
return b
}
func (b *ItemBuilder) LinkedDataset(linkedDataset *DatasetID) *ItemBuilder {
b.l.linkedDataset = linkedDataset.CopyRef()
return b
}
func (b *ItemBuilder) Tags(tags *TagList) *ItemBuilder {
b.l.tags = tags
return b
}