-
Notifications
You must be signed in to change notification settings - Fork 19
/
services.go
59 lines (47 loc) · 1.93 KB
/
services.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
package engine
import (
"errors"
"github.com/nyaruka/goflow/flows"
)
// EmailServiceFactory resolves a session to a email service
type EmailServiceFactory func(flows.SessionAssets) (flows.EmailService, error)
// WebhookServiceFactory resolves a session to a webhook service
type WebhookServiceFactory func(flows.SessionAssets) (flows.WebhookService, error)
// ClassificationServiceFactory resolves a session and classifier to an NLU service
type ClassificationServiceFactory func(*flows.Classifier) (flows.ClassificationService, error)
// AirtimeServiceFactory resolves a session to an airtime service
type AirtimeServiceFactory func(flows.SessionAssets) (flows.AirtimeService, error)
type services struct {
email EmailServiceFactory
webhook WebhookServiceFactory
classification ClassificationServiceFactory
airtime AirtimeServiceFactory
}
func newEmptyServices() *services {
return &services{
email: func(flows.SessionAssets) (flows.EmailService, error) {
return nil, errors.New("no email service factory configured")
},
webhook: func(flows.SessionAssets) (flows.WebhookService, error) {
return nil, errors.New("no webhook service factory configured")
},
classification: func(*flows.Classifier) (flows.ClassificationService, error) {
return nil, errors.New("no classification service factory configured")
},
airtime: func(flows.SessionAssets) (flows.AirtimeService, error) {
return nil, errors.New("no airtime service factory configured")
},
}
}
func (s *services) Email(sa flows.SessionAssets) (flows.EmailService, error) {
return s.email(sa)
}
func (s *services) Webhook(sa flows.SessionAssets) (flows.WebhookService, error) {
return s.webhook(sa)
}
func (s *services) Classification(classifier *flows.Classifier) (flows.ClassificationService, error) {
return s.classification(classifier)
}
func (s *services) Airtime(sa flows.SessionAssets) (flows.AirtimeService, error) {
return s.airtime(sa)
}