1
0
mirror of https://github.com/MontFerret/ferret.git synced 2025-01-06 03:03:57 +02:00
ferret/pkg/html/driver.go

65 lines
1.2 KiB
Go
Raw Normal View History

package html
2018-09-18 22:42:38 +02:00
import (
"context"
2018-09-23 10:33:20 +02:00
"fmt"
"github.com/MontFerret/ferret/pkg/html/dynamic"
"github.com/MontFerret/ferret/pkg/html/static"
2018-09-23 10:33:20 +02:00
"github.com/MontFerret/ferret/pkg/runtime/core"
"github.com/MontFerret/ferret/pkg/runtime/env"
2018-09-18 22:42:38 +02:00
"github.com/MontFerret/ferret/pkg/runtime/values"
)
type Name string
2018-09-27 04:03:06 +02:00
const (
Dynamic Name = "dynamic"
Static Name = "static"
2018-09-27 04:03:06 +02:00
)
2018-09-18 22:42:38 +02:00
type Driver interface {
GetDocument(ctx context.Context, url values.String) (values.HTMLNode, error)
2018-09-18 22:42:38 +02:00
Close() error
}
func ToContext(ctx context.Context, name Name, drv Driver) context.Context {
2018-09-18 22:42:38 +02:00
return context.WithValue(ctx, name, drv)
}
func FromContext(ctx context.Context, name Name) (Driver, error) {
2018-09-18 22:42:38 +02:00
val := ctx.Value(name)
drv, ok := val.(Driver)
if ok {
2018-09-23 10:33:20 +02:00
return drv, nil
2018-09-18 22:42:38 +02:00
}
2018-09-23 10:33:20 +02:00
return nil, core.Error(core.ErrNotFound, fmt.Sprintf("%s driver", name))
2018-09-18 22:42:38 +02:00
}
func WithDynamicDriver(ctx context.Context) context.Context {
e := env.FromContext(ctx)
return context.WithValue(
ctx,
Dynamic,
dynamic.NewDriver(
e.CDPAddress,
dynamic.WithProxy(e.ProxyAddress),
),
)
2018-09-18 22:42:38 +02:00
}
func WithStaticDriver(ctx context.Context) context.Context {
e := env.FromContext(ctx)
return context.WithValue(
ctx,
Static,
static.NewDriver(
static.WithProxy(e.ProxyAddress),
),
)
2018-09-18 22:42:38 +02:00
}