// 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. // Package ent is the interface between end-user schemas and entc (ent codegen). package ent import ( "github.com/facebookincubator/ent/schema/edge" "github.com/facebookincubator/ent/schema/field" "github.com/facebookincubator/ent/schema/index" ) type ( // The Interface type describes the requirements for an exported type defined in the schema package. // It functions as the interface between the user's schema types and codegen loader. // Users should use the Schema type for embedding as follows: // // type T struct { // ent.Schema // } // Interface interface { // Type is a dummy method, that is used in edge declaration. // // The Type method should be used as follows: // // type S struct { ent.Schema } // // type T struct { ent.Schema } // // func (T) Edges() []ent.Edge { // return []ent.Edge{ // edge.To("S", S.Type), // } // } // Type() // Fields returns the fields of the schema. Fields() []Field // Edges returns the edges of the schema. Edges() []Edge // Indexes returns the indexes of the schema. Indexes() []Index } // A Field interface returns a field descriptor for vertex fields/properties. // The usage for the interface is as follows: // // func (T) Fields() []ent.Field { // return []ent.Field{ // field.Int("int"), // } // } // Field interface { Descriptor() *field.Descriptor } // A Edge interface returns an edge descriptor for vertex edges. // The usage for the interface is as follows: // // func (T) Edges() []ent.Edge { // return []ent.Edge{ // edge.To("S", S.Type), // } // } // Edge interface { Descriptor() *edge.Descriptor } // A Index interface returns an index descriptor for vertex indexes. // The usage for the interface is as follows: // // func (T) Indexes() []ent.Index { // return []ent.Index{ // index.Fields("f1", "f2"). // Unique(), // } // } // Index interface { Descriptor() *index.Descriptor } // Schema is the default implementation for the schema Interface. // It can be embedded in end-user schemas as follows: // // type T struct { // ent.Schema // } // Schema struct { Interface } ) // Fields of the schema. func (Schema) Fields() []Field { return nil } // Edges of the schema. func (Schema) Edges() []Edge { return nil } // Indexes of the schema. func (Schema) Indexes() []Index { return nil }