summaryrefslogtreecommitdiff
path: root/modules/hook/hook.go
diff options
context:
space:
mode:
Diffstat (limited to 'modules/hook/hook.go')
-rw-r--r--modules/hook/hook.go78
1 files changed, 78 insertions, 0 deletions
diff --git a/modules/hook/hook.go b/modules/hook/hook.go
new file mode 100644
index 0000000..4484f47
--- /dev/null
+++ b/modules/hook/hook.go
@@ -0,0 +1,78 @@
+// This Source Code Form is subject to the terms of the Mozilla Public
+// License, v. 2.0. If a copy of the MPL was not distributed with this
+// file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+package hook
+
+import (
+ "net/http"
+
+ "github.com/philippta/flyscrape"
+)
+
+type Module struct {
+ AdaptTransportFn func(http.RoundTripper) http.RoundTripper
+ ValidateRequestFn func(*flyscrape.Request) bool
+ BuildRequestFn func(*flyscrape.Request)
+ ReceiveResponseFn func(*flyscrape.Response)
+ ProvisionFn func(flyscrape.Context)
+ FinalizeFn func()
+}
+
+func (Module) ModuleInfo() flyscrape.ModuleInfo {
+ return flyscrape.ModuleInfo{
+ ID: "hook",
+ New: func() flyscrape.Module { return new(Module) },
+ }
+}
+
+func (m Module) AdaptTransport(t http.RoundTripper) http.RoundTripper {
+ if m.AdaptTransportFn == nil {
+ return t
+ }
+ return m.AdaptTransportFn(t)
+}
+
+func (m Module) ValidateRequest(r *flyscrape.Request) bool {
+ if m.ValidateRequestFn == nil {
+ return true
+ }
+ return m.ValidateRequestFn(r)
+}
+
+func (m Module) BuildRequest(r *flyscrape.Request) {
+ if m.BuildRequestFn == nil {
+ return
+ }
+ m.BuildRequestFn(r)
+}
+
+func (m Module) ReceiveResponse(r *flyscrape.Response) {
+ if m.ReceiveResponseFn == nil {
+ return
+ }
+ m.ReceiveResponseFn(r)
+}
+
+func (m Module) Provision(ctx flyscrape.Context) {
+ if m.ProvisionFn == nil {
+ return
+ }
+ m.ProvisionFn(ctx)
+}
+
+func (m Module) Finalize() {
+ if m.FinalizeFn == nil {
+ return
+ }
+ m.FinalizeFn()
+}
+
+var (
+ _ flyscrape.TransportAdapter = Module{}
+ _ flyscrape.RequestValidator = Module{}
+ _ flyscrape.RequestBuilder = Module{}
+ _ flyscrape.ResponseReceiver = Module{}
+ _ flyscrape.Provisioner = Module{}
+ _ flyscrape.Finalizer = Module{}
+)