Files
ent/examples/entcpkg
Ariel Mashraki 939c7cff1a entc/gen: reduce the usage of DISTINCT in queries (#3305)
Most queries are not graph traversals but rather regular table scans,
in which case the DISTINCT clause is not needed as duplicates cannot be
returned (unless query was modified by the user).
2023-02-06 22:40:50 +02:00
..

entcpkg example

An example of using entc (ent codegen) as package rather than an executable.

In this example, we have a file named entc.go under the ./ent directory, that holds the configuration for the codegen:

// +build ignore

package main

import (
	"log"
	"strings"
	"text/template"

	"entgo.io/ent/entc"
	"entgo.io/ent/entc/gen"
)

func main() {
	opts := []entc.Option{
		entc.Dependency(
			entc.DependencyType(&http.Client{}),
		),
		entc.TemplateFiles(
			"template/debug.tmpl",
			"template/stringer.tmpl",
		),
    }
	err := entc.Generate("./schema", &gen.Config{
		Header: `
			// Copyright 2019-present Facebook Inc. All rights reserved.
			// This source code is licensed under the Apache 2.0 license found
			// in the LICENSE file in the root directory of this source tree.

			// Code generated by ent, DO NOT EDIT.
		`,
		// A usage for custom templates with external functions.
		Templates: []*gen.Template{
			gen.MustParse(gen.NewTemplate("static").
				Funcs(template.FuncMap{"title": strings.ToTitle}).
				ParseFiles("template/static.tmpl")),
		},
	}, opts...)
	if err != nil {
		log.Fatal("running ent codegen:", err)
	}
}

As you can see, the file is tagged with // +build ignore in order to not include it in the ent package. In order to run the codegen, run the file itself (using go run) or run go generate ./ent. The generate.go file holds the go run command:

package ent

//go:generate go run entc.go

The generate.go file is preferred if you have many generate pragmas in your project.