entc/gen: introduce the entc.Dependency option

This commit is contained in:
Ariel Mashraki
2021-10-25 21:56:48 +03:00
committed by Ariel Mashraki
parent 5bbd973ffa
commit 82eeeb5a1c
13 changed files with 338 additions and 52 deletions

View File

@@ -7,6 +7,9 @@
package ent
import (
"io"
"net/http"
"entgo.io/ent"
"entgo.io/ent/dialect"
)
@@ -23,7 +26,9 @@ type config struct {
// log used for logging on debug mode.
log func(...interface{})
// hooks to execute on mutations.
hooks *hooks
hooks *hooks
HTTPClient *http.Client
Writer io.Writer
}
// hooks per client, for fast access.
@@ -61,3 +66,17 @@ func Driver(driver dialect.Driver) Option {
c.driver = driver
}
}
// HTTPClient configures the HTTPClient.
func HTTPClient(v *http.Client) Option {
return func(c *config) {
c.HTTPClient = v
}
}
// Writer configures the Writer.
func Writer(v io.Writer) Option {
return func(c *config) {
c.Writer = v
}
}

View File

@@ -10,12 +10,14 @@ package main
import (
"fmt"
"log"
"net/http"
"strings"
"text/template"
"entgo.io/ent/entc"
"entgo.io/ent/entc/gen"
"entgo.io/ent/schema"
"entgo.io/ent/schema/field"
)
func main() {
@@ -23,9 +25,20 @@ func main() {
if err != nil {
log.Fatalf("creating extension: %v", err)
}
// A usage for custom options to configure the
// A usage for custom options to configure the code generator to use
// an extension and inject external dependencies in the generated API.
opts := []entc.Option{
entc.Extensions(ex),
entc.Dependency(
entc.DependencyType(&http.Client{}),
),
entc.Dependency(
entc.DependencyName("Writer"),
entc.DependencyTypeInfo(&field.TypeInfo{
Ident: "io.Writer",
PkgPath: "io",
}),
),
}
err = entc.Generate("./schema", &gen.Config{
Header: `

View File

@@ -8,20 +8,36 @@ import (
"context"
"fmt"
"log"
"net/http"
"os"
"entgo.io/ent/examples/entcpkg/ent"
"entgo.io/ent/examples/entcpkg/ent/hook"
_ "github.com/mattn/go-sqlite3"
)
func Example_EntcPkg() {
client, err := ent.Open("sqlite3", "file:ent?mode=memory&cache=shared&_fk=1")
client, err := ent.Open(
"sqlite3",
"file:ent?mode=memory&cache=shared&_fk=1",
ent.Writer(os.Stdout),
ent.HTTPClient(http.DefaultClient),
)
if err != nil {
log.Fatalf("failed opening connection to sqlite: %v", err)
}
defer client.Close()
// An example for using the injected dependencies in the generated builders.
client.User.Use(func(next ent.Mutator) ent.Mutator {
return hook.UserFunc(func(ctx context.Context, m *ent.UserMutation) (ent.Value, error) {
_ = m.HTTPClient
_ = m.Writer
return next.Mutate(ctx, m)
})
})
ctx := context.Background()
// run the auto migration tool.
// Run the auto migration tool.
if err := client.Schema.Create(ctx); err != nil {
log.Fatalf("failed creating schema resources: %v", err)
}