From ba950aac5287d6af3300ebcd5e485a83aa146838 Mon Sep 17 00:00:00 2001 From: Ariel Mashraki Date: Sun, 18 Aug 2019 04:28:49 -0700 Subject: [PATCH] entc/load: add support for embedding schemas Reviewed By: alexsn Differential Revision: D16884402 fbshipit-source-id: 216bbf875251b0cbdd61e312ad763b439cab7813 --- ent.go | 33 ++++++++++++++++++++----------- entc/load/bindata.go | 8 ++++---- entc/load/load.go | 2 +- entc/load/load_test.go | 20 +++++++++++++++++-- entc/load/schema.go | 8 ++++---- entc/load/schema_test.go | 2 +- entc/load/template/main.tmpl | 4 ++-- entc/load/testdata/base/schema.go | 29 +++++++++++++++++++++++++++ 8 files changed, 80 insertions(+), 26 deletions(-) create mode 100644 entc/load/testdata/base/schema.go diff --git a/ent.go b/ent.go index 489fa185e..61f3e2bc4 100644 --- a/ent.go +++ b/ent.go @@ -7,11 +7,18 @@ import ( ) type ( - // Schema is the interface for describing an entity schema for entc. - Schema interface { + // 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() - Edges() []Edge Fields() []Field + Edges() []Edge Indexes() []Index } @@ -46,16 +53,18 @@ type ( Edge() string Fields() []string } + + // Schema is the default implementation Interface. + Schema struct { + Interface + } ) -// DefaultSchema holds the default schema implementation. -var DefaultSchema defaultSchema +// Fields of the schema. +func (Schema) Fields() []Field { return nil } -// defaultSchema is the default implementation for the schema. -type defaultSchema struct{ Schema } +// Edges of the schema. +func (Schema) Edges() []Edge { return nil } -func (defaultSchema) Edges() []Edge { return nil } - -func (defaultSchema) Fields() []Field { return nil } - -func (defaultSchema) Indexes() []Index { return nil } +// Indexes of the schema. +func (Schema) Indexes() []Index { return nil } diff --git a/entc/load/bindata.go b/entc/load/bindata.go index 7298788fc..75426848e 100644 --- a/entc/load/bindata.go +++ b/entc/load/bindata.go @@ -67,7 +67,7 @@ func (fi bindataFileInfo) Sys() interface{} { return nil } -var _templateMainTmpl = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x54\x92\x41\x8b\xdb\x30\x10\x85\xcf\x9a\x5f\x31\x15\x29\x2b\x81\x57\x4b\xaf\x0b\x39\x35\x39\xb4\xd0\xdd\x42\x16\x7a\x48\xc3\x22\xc7\xe3\xac\xa8\x2d\xbb\x92\x52\xba\x08\xfd\xf7\x22\xc9\x0e\xf4\x94\x8c\xe6\xe9\x7b\x6f\xc6\x8a\x11\x3b\xea\x8d\x25\xe4\xa3\x36\x96\x63\x4a\xf0\xf0\x80\x9f\xa7\x8e\xf0\x42\x96\x9c\x0e\xd4\x61\xfb\x8e\x77\x64\xc3\xf9\x76\x74\xa7\x70\xf7\x8c\x4f\xcf\x2f\xb8\xdf\x7d\x79\x51\x30\xeb\xf3\x2f\x7d\x21\xcc\x0c\x00\x33\xce\x93\x0b\x28\x80\xf1\xc9\x73\x60\xbc\x7d\x0f\x94\xff\xc4\x88\x81\xc6\x79\xd0\x81\x90\x57\x95\x2f\x96\xa5\x35\x3b\x63\x43\x8f\xfc\xe3\x6f\x8e\xea\xfb\x42\x4c\x09\x24\x40\x8c\xb8\x69\xb5\x27\x7c\xdc\x62\xf9\x5d\xfb\xf9\xee\x1f\xed\xd0\x9f\xdf\x68\xd4\x1e\xb7\x78\x3c\x91\x0d\xea\x50\xea\x58\xb8\x4e\xdb\x0b\xe1\xe6\xb5\xc1\x8d\xd5\x63\x61\xa8\x27\x3d\x92\xcf\x70\xc6\x62\xbc\x5f\xe0\x29\xa9\x5c\xdc\x72\xf8\x58\x31\x8f\x98\x91\x3b\xea\xf5\x75\x08\xf5\x28\xf1\x05\x96\x52\x53\x4c\xc8\x76\x78\x9f\x12\x24\x80\xfe\x6a\xcf\x65\x13\x42\x62\x04\x96\xe3\x0d\xc6\x92\xc7\xe3\xe9\x78\xca\xab\x00\xd6\x4f\x0e\x5f\x9b\x25\x75\x0e\x54\x33\xae\x53\x44\x60\xac\x6d\x90\x9c\xcb\xbd\x6f\xda\xf9\x37\x3d\x54\x63\x51\x35\x12\x18\x33\x7d\x51\x7c\xd8\xa2\x35\x43\xb9\xc3\x7a\x6d\x06\x41\xce\xe5\x76\x9e\xad\xfa\x6e\x51\xcf\x33\xd9\x4e\x94\xb2\xc1\x56\x42\xee\x4e\x5e\x1d\x42\x37\x5d\x83\xfa\xe1\x4c\x20\x51\xbe\x92\xfa\x3a\x19\xbb\x0a\x6b\x5c\xc1\x7f\x5a\x2e\xa5\xbc\xcd\xb6\xba\x64\xfb\xc9\x95\x21\x2b\x8b\x9c\xab\xac\x43\x70\xc6\x5e\xb2\x46\xed\xb3\x46\x48\x59\x34\xfb\xbf\x26\x88\x4f\x85\xf4\xdf\x5b\xa8\x43\xd5\xa7\xb0\x2c\x33\x25\xf8\x17\x00\x00\xff\xff\x0b\x99\x2b\x2f\x9d\x02\x00\x00") +var _templateMainTmpl = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x54\x91\x41\x6b\xdc\x30\x10\x85\xcf\x9a\x5f\x31\x15\x5b\x22\x81\xa3\xd0\x6b\x61\x4f\xcd\x1e\x52\x68\x52\xd8\x40\x0f\xdb\x25\xc8\xf6\x78\x23\x6a\xcb\xae\xa4\x94\x06\xa1\xff\x5e\x24\xd9\x0b\x3d\xd9\xf2\x7b\xfa\xe6\x3d\x4f\x8c\xd8\xd3\x60\x2c\x21\x9f\xb4\xb1\x1c\x53\x82\xbb\x3b\xfc\x32\xf7\x84\x17\xb2\xe4\x74\xa0\x1e\xdb\x77\xbc\x21\x1b\xba\xeb\xa7\x1b\x85\xf7\x4f\xf8\xf8\xf4\x8c\x87\xfb\x87\x67\x05\x8b\xee\x7e\xe9\x0b\x61\x66\x00\x98\x69\x99\x5d\x40\x01\x8c\xcf\x9e\x03\xe3\xed\x7b\xa0\xfc\x12\x23\x06\x9a\x96\x51\x07\x42\x5e\x5d\xbe\x8c\x2c\xd2\xe2\x8c\x0d\x03\xf2\x8f\xbf\x39\xaa\xef\x2b\x31\x25\x90\x00\x31\xe2\xae\xd5\x9e\xf0\xf3\x1e\xcb\x73\xd3\xf3\xdd\x3f\xda\xa1\xef\x5e\x69\xd2\x1e\xf7\x78\x3a\x93\x0d\xea\xc1\x06\x72\x83\xee\x28\x16\xb4\xd3\xf6\x42\xb8\x7b\x69\x70\x67\xf5\x54\x30\xea\x51\x4f\xe4\x33\x9f\xb1\x18\x6f\x57\x7e\x4a\x2a\x1f\xae\x51\x7c\x4c\x7c\xbd\x93\x52\x53\x58\x64\x7b\xbc\x4d\x09\x12\xc0\xf0\x66\xbb\xd2\x59\x48\x8c\xc0\x72\x90\xd1\x58\xf2\x78\x3a\x9f\xce\xb9\x34\xb0\x61\x76\xf8\xd2\xac\xf9\xf2\xdc\x1a\x65\xcb\x1b\x81\xb1\xb6\x41\x72\x2e\x6b\xdf\xb4\xf3\xaf\x7a\x3c\x16\x51\x54\x8f\x04\xc6\xcc\x50\x1c\x1f\xf6\x68\xcd\x58\xee\xb0\x41\x9b\x51\x90\x73\x59\xce\x15\xea\xdc\x3d\xea\x65\x21\xdb\x8b\x72\x6c\xb0\x95\x90\xd5\xd9\xab\x63\xe8\xe7\xb7\xa0\x7e\x38\x13\x48\x94\x7d\xa8\xaf\xb3\xb1\x9b\xb1\xc6\x15\xfc\xa7\xe5\x52\xca\x6b\xb7\x6d\x4a\x1e\x3f\xbb\x52\xb2\xb2\xc8\xb9\xca\x3a\x06\x67\xec\x25\x7b\xd4\x21\x7b\x84\x94\xc5\x73\xf8\x6b\x82\xf8\x54\x48\xff\x6d\xbd\x96\xaa\x4b\x5f\x7f\x66\x4a\xf0\x2f\x00\x00\xff\xff\xb5\xb1\x2f\xf6\x87\x02\x00\x00") func templateMainTmplBytes() ([]byte, error) { return bindataRead( @@ -82,12 +82,12 @@ func templateMainTmpl() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "template/main.tmpl", size: 669, mode: os.FileMode(420), modTime: time.Unix(1564567133, 0)} + info := bindataFileInfo{name: "template/main.tmpl", size: 647, mode: os.FileMode(420), modTime: time.Unix(1566121519, 0)} a := &asset{bytes: bytes, info: info} return a, nil } -var _schemaGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xb4\x57\xdf\x6f\xdb\xb6\x13\x7f\xb6\xfe\x8a\xfb\x1a\x68\x20\x15\x86\xf3\xae\xc2\x0f\x5f\x6c\x19\x96\x0d\x4b\x87\x76\xdb\x4b\x51\xb4\x8c\x74\x72\xd8\x4a\x94\x4b\xd2\x4e\xdb\xc0\xff\xfb\x70\x3f\x68\x49\xb6\x9b\x01\x2d\x52\xa0\x88\x78\xbf\x78\xf7\xb9\x0f\x8f\xf4\xc6\x54\x1f\xcd\x1a\xa1\xed\x4d\x9d\x65\xb6\xdb\xf4\x3e\x42\x9e\xcd\xe6\xe8\xaa\xbe\xb6\x6e\x7d\xf9\x21\xf4\x6e\x9e\xcd\xe6\x4d\x17\xe9\x8f\xc7\xa6\xc5\x2a\xce\x33\x12\xdd\x56\x97\xe8\x58\xac\x9f\x97\xa1\xba\xc3\xce\x5c\x36\x16\xdb\x7a\x9e\x15\x59\x76\x79\x09\xaf\x59\x06\x1e\x37\x1e\x03\xba\x18\xc0\x38\x40\x17\x97\xaa\x88\x77\x26\xc2\xbd\x09\x9c\x04\xd6\xd0\xf8\xbe\x03\x03\x55\xdf\x6d\x5a\x8b\x35\x6c\x03\x7a\xd0\x44\x97\x59\xfc\xb2\xc1\x14\x32\x44\xbf\xad\x22\x3c\x64\xb3\x1b\xd3\x21\x00\x90\xc4\xba\x35\x00\xbc\xa7\xbc\xcb\xb9\x33\x1d\x2e\xfa\xce\x46\xec\x36\xf1\xcb\xfc\x7d\x36\xbb\xaa\xd7\x18\x00\xe0\xcd\xdb\xe7\xf4\x79\xb0\x44\x92\x4f\x4d\x7f\xa1\x2a\x02\x9b\xf2\x67\x32\xe5\xea\x8e\x6c\xaf\x5d\x8d\x9f\x31\x90\x2d\x7f\x26\x5b\x2b\xf2\x89\xf1\x9e\x61\x91\x90\xa7\xa8\x88\xfc\x3b\x40\x11\xc7\x53\x4c\xc6\xb0\x3c\x86\xcc\x5f\x14\x44\xfe\x71\x85\x4b\x11\xa8\x3d\x6d\x71\x64\x6f\x34\xe2\xd9\xf8\xd1\xac\xa7\xe6\xaf\xed\xd7\x14\xfe\xb9\x75\x31\xb9\xaa\x79\xb0\x5f\x8f\xc2\xff\x74\x67\x7c\x40\xb6\x7b\x3e\x8a\xaf\xf6\x95\x68\xa7\x2e\x7f\x3b\xfb\x69\x2b\x9b\xdc\xf6\x7d\x7b\xb4\xc5\x96\xb5\x53\x8f\x1b\xdb\xb6\xe6\xb6\xc5\xf3\x1e\x4e\xb5\x53\x9f\x97\x9b\x68\x7b\x67\xda\xf3\x3e\xbd\x6a\xa7\x3e\x3f\x63\x63\xb6\x6d\xfc\x46\x66\xb5\x68\xa7\x2e\xff\x98\x56\x6b\x01\xeb\x22\xfa\xc6\x54\xf8\xb0\x4f\x2e\x3b\xd2\x9e\x38\xd8\xda\xc4\xde\x07\x18\xe1\x3b\x72\x50\xed\x19\x2e\xf2\x49\x38\xa5\x22\x8b\xbf\x83\x89\xec\x77\x86\x88\xda\xc6\xff\x66\xe0\xd4\xf0\x11\xea\x1d\x19\x1e\x73\xee\x15\x36\xb2\xf9\xd4\xce\x63\xf3\xee\x74\xf7\x57\xd8\x28\x3d\x27\x83\xc1\x63\xf3\x0d\x96\x69\x27\x1f\xa1\xd7\xb5\xdb\xa1\x0f\x78\x6c\x6a\x45\x7c\xbc\xfd\xa7\xad\xf5\x58\x1f\xd9\x7a\x15\x9f\xe9\x9a\x0c\x9a\xd3\xb6\x89\xfc\x3b\xfa\x26\x8e\x43\xe3\xb4\xd2\x03\x63\x1f\xa9\x54\x20\x3b\x99\xbf\x34\x55\xcf\x0e\xd5\x37\x6f\xa7\x2d\x39\x33\x53\xa5\xc8\x1b\xbc\xe7\xd8\x95\x47\x13\x91\x6b\xd4\x82\x28\xb6\x54\x25\xb7\xce\x70\x4c\x96\x59\xb3\x75\x55\x72\xcd\xf1\x40\xe6\x42\x7b\xfb\x90\xcd\x1c\x42\xb9\x82\x0b\x5a\x3e\x64\x33\xe6\x68\xc9\x45\xe2\x92\xbe\xf3\x62\x91\xcd\x98\x90\x49\x4a\xdf\x2a\x35\x6b\x11\x92\xd4\xac\x45\xa8\x54\x2b\x49\xa8\xdf\xa2\x10\x10\x4b\xb6\xbe\x0e\xb2\x12\x8d\xb2\xa3\x14\x8d\xae\x52\x34\xe9\x7a\xc9\xaa\xb4\x62\xdd\x3e\x9b\xd9\x06\x38\x7b\x5c\xfe\x3f\x84\xbe\xca\x8b\x17\x80\xf0\xbf\x15\x38\xdb\x52\x69\x33\xc7\x29\xc0\x6a\x40\xa0\x60\x3f\x8f\x71\xeb\x1d\x38\x54\x6c\xff\x30\x3e\xdc\x99\x56\x6f\x53\xbe\xf2\xe9\xbc\xe3\xf8\x76\x3e\x80\x4a\x5f\x3d\x18\xf8\xed\xf5\xcb\x1b\x72\x66\x7e\x55\xc6\xc1\x2d\x42\x8d\xe4\x5a\x8b\x09\x05\x50\xe7\xfe\xf6\x03\x56\x51\xff\x68\x57\x26\x9b\xe6\x21\xed\x9d\x36\x2c\x20\xbf\x85\x37\x6f\x6f\xbf\x44\x5c\x00\x7a\x4f\xff\x7b\x5f\x50\x5d\x81\x3b\x26\x66\x0f\x02\xb6\x75\xb5\xf5\x58\xc5\x5c\xdf\x25\xdc\xa5\x97\x8d\x86\x2d\x0a\xed\xe5\x3e\x9b\x29\xc1\x38\x64\xb9\x82\x60\x1a\x14\x2a\x26\x5b\x81\xd5\xfb\x31\x90\x09\x30\xdb\x2e\xa0\xe9\xe2\xf2\x8a\x72\x69\xf2\xb9\x66\xfd\xec\x53\x09\xcf\x76\xf3\x05\x04\xde\x87\x83\x0b\xd2\x4d\xef\xe1\xdd\x02\x1a\xda\xca\x1b\x47\x44\x15\xde\x53\xd4\xc0\xe2\x0b\xde\x9e\xd6\x23\xf2\x01\x34\x23\xfa\x8d\xf8\x47\x8a\x81\x81\x23\x0a\xb2\x22\x91\x50\x2e\x8d\x32\xc9\x79\xa5\x9a\x81\x86\xa4\x99\x12\x31\x5d\x4f\xa5\x28\x7f\x35\x41\x05\xaa\x4e\xb7\x64\xa9\xbe\x69\xad\xea\x74\x21\x26\x75\x5a\x0f\x39\xe9\xcd\x53\x42\x8b\x2e\xe7\xbc\x54\x92\x17\x6c\xb3\xcf\x66\x84\x7e\x58\x40\xff\x91\xb0\x69\x96\xb9\x3c\x41\xe8\xd1\xe0\x8b\x17\x24\x66\xa4\xe8\x99\xc0\xed\x63\x4d\x5e\xb0\xac\xe1\x05\xac\xe0\x82\xd4\x43\xb8\xea\x24\x9c\xbe\x29\x26\x21\xf5\x25\x41\x76\x55\x32\x38\x04\x4e\x8f\x90\x15\x5c\xa8\x9d\x86\x0f\x4b\x1d\x64\x2b\x30\x9b\x0d\xba\x3a\x4f\x92\x05\x84\x46\x48\x20\x4f\xca\x31\xe3\xf8\xf1\xf9\x94\x84\xc3\x81\x70\xbc\xbb\xf0\x6d\x29\x8f\xde\x51\xaa\x57\x92\xda\x30\x1f\x24\x4a\x7a\xad\x8e\x73\xd6\x97\xed\x53\x66\x6d\xeb\xcf\x43\xde\x9a\x83\x66\x9e\xde\xd5\xa3\xdc\xaf\x53\x92\x17\xfc\xc5\x4d\xa4\x2a\x88\x7e\xb6\xfe\xcc\xb5\x29\xf5\xa4\x23\x25\x8b\xf5\xb4\x4f\x4f\x03\x29\xa6\x67\x61\x3f\x19\x95\x74\x39\x2d\x75\x62\xe5\xa1\xd0\xb9\x39\x0c\x0f\xb8\xf7\x66\x13\x78\xe4\x49\xb1\x89\x16\x1d\xc6\xbb\xbe\x86\x7b\x1b\xef\xc0\x63\xd5\xef\xd0\x43\xec\x01\x5d\xd8\x7a\x04\xd7\xc3\xc6\x38\x5b\xd1\x4b\x0d\x3a\x09\x6f\xdd\x5a\x27\xe4\xc9\x6c\x9a\x8e\xc7\x26\xdd\xa0\x87\x5f\x0b\xc7\x83\xb2\xc6\x06\x3d\x50\xac\x9c\xd7\xd4\xb2\x1d\x23\x2c\x99\xd0\x85\xb1\x1b\x37\x70\x46\xfe\xab\x33\xbd\x4b\xe5\x48\xb6\xda\xc6\x1d\x9f\x8e\x26\xf1\xdf\xd9\x56\x0e\xc5\x9e\x8e\x8d\x02\x37\x71\xcf\x8b\x05\x5b\x0d\xe8\x09\x21\x4f\xc0\x13\xf1\x8f\x62\x37\x3e\x65\x53\xe8\xe4\x4c\x08\x72\x64\xf5\x84\xc0\x49\x29\x67\x70\x43\x3d\x8b\x8f\xc1\x26\x15\x9c\xa0\x96\x0e\xc3\x09\x6e\x49\xf1\xa3\xc8\x4d\xcf\xfa\x14\x3b\x7b\xf8\x85\x7b\x78\x63\x3e\x21\x7c\xa9\xa2\x33\x00\xda\xc3\x48\x78\x0c\xc2\x54\xca\x00\x22\x57\x79\x78\x30\x44\x18\x3f\x19\x8a\xc9\x8a\x72\xa3\xd1\x14\x97\xbf\x5b\x57\xe7\x05\xac\x56\x07\xfd\x9f\xd1\x73\xea\x74\x27\xc4\xe5\x55\x8b\x5d\x3e\x99\x18\x31\xdb\x67\xff\x06\x00\x00\xff\xff\xf1\x5d\x36\x5e\x56\x11\x00\x00") +var _schemaGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xb4\x57\xdf\x6f\xdb\xb6\x13\x7f\xb6\xfe\x8a\xfb\x1a\x68\x20\x15\x86\xf3\xae\xc2\x0f\x5f\x6c\x19\x96\x0d\x4b\x87\x76\xdb\x4b\x51\xb4\x8c\x74\x72\xd8\xca\x94\x4b\xd2\x4e\xdb\xc0\xff\xfb\x70\x3f\x68\x49\x96\x9b\x01\x2d\x52\xa0\x88\x78\xbf\x78\xf7\xb9\x0f\x8f\xf4\xd6\x54\x1f\xcd\x1a\xa1\xed\x4c\x9d\x65\x76\xb3\xed\x7c\x84\x3c\x9b\xcd\xd1\x55\x5d\x6d\xdd\xfa\xf2\x43\xe8\xdc\x3c\x9b\xcd\x9b\xdb\xea\x12\x5d\x1c\x7c\x5e\x86\xea\x0e\x37\xe6\xb2\xb1\xd8\xd6\x2c\xdf\xb0\xda\x63\xd3\x62\x15\xe7\x59\x91\x65\x97\x97\xf0\x9a\xad\xc0\xe3\xd6\x63\x40\x17\x03\x18\x07\xe8\xe2\x52\x15\xf1\xce\x44\xb8\x37\x81\x73\xc0\x1a\x1a\xdf\x6d\xc0\x40\xd5\x6d\xb6\xad\xc5\x1a\x76\x01\x3d\x68\x9e\xcb\x2c\x7e\xd9\x62\x0a\x19\xa2\xdf\x55\x11\x1e\xb2\xd9\x8d\xd9\x20\x00\x90\xc4\xba\x35\x00\xbc\xa7\xb4\xcb\xb9\x33\x1b\x5c\x74\x1b\x1b\x71\xb3\x8d\x5f\xe6\xef\xb3\xd9\x55\xbd\xc6\x00\x00\x6f\xde\x3e\xa7\xcf\xa3\x25\x92\x7c\x6c\xfa\x0b\xd5\x15\xd8\x94\x3f\x93\x29\xd7\x7b\x62\x7b\xed\x6a\xfc\x8c\x81\x6c\xf9\x33\xd9\x5a\x91\x8f\x8c\x0f\x0c\x8b\x84\x9c\xa2\x22\xf2\xef\x00\x45\x1c\xa7\x98\x0c\x61\x79\x0c\x99\xbf\x28\x88\xfc\xe3\x0a\x97\x22\x50\x7b\xda\xe2\xc4\xde\x68\xc4\xb3\xf1\xa3\x59\x8f\xcd\x5f\xdb\xaf\x29\xfc\x73\xeb\x62\x72\x55\xf3\x60\xbf\x9e\x84\xff\xe9\xce\xf8\x80\x6c\xf7\x7c\x10\x5f\xed\x2b\xd1\x8e\x5d\xfe\x76\xf6\xd3\x4e\x36\xb9\xed\xba\xf6\x64\x8b\x1d\x6b\xc7\x1e\x37\xb6\x6d\xcd\x6d\x8b\xe7\x3d\x9c\x6a\xc7\x3e\x2f\xb7\xd1\x76\xce\xb4\xe7\x7d\x3a\xd5\x8e\x7d\x7e\xc6\xc6\xec\xda\xf8\x8d\xcc\x6a\xd1\x8e\x5d\xfe\x31\xad\xd6\x02\xd6\x45\xf4\x8d\xa9\xf0\xe1\x90\x5c\xf6\xa4\x9d\x38\xd8\xda\xc4\xce\x07\x18\xe0\x3b\x70\x50\xed\x19\x2e\xf2\x49\x98\x52\x91\xc5\xdf\xc1\x44\xf6\x3b\x43\x44\x6d\xe3\x7f\x33\x70\x6c\xf8\x08\xf5\x4e\x0c\x4f\x39\xf7\x0a\x1b\xd9\x7c\x6c\xe7\xb1\x79\x37\xdd\xfd\x15\x36\x4a\xcf\xd1\x60\xf0\xd8\x7c\x83\x65\xda\xc9\x47\xe8\x75\xed\xf6\xe8\x03\x9e\x9a\x5a\x11\x9f\x6e\xff\x69\x67\x3d\xd6\x27\xb6\x5e\xc5\x67\xba\x26\x83\x66\xda\x36\x91\x7f\x47\xdf\xc4\xb1\x6f\x9c\x56\x7a\x64\xec\x23\x95\x0a\x64\x93\xf9\x4b\x53\xf5\xec\x50\x7d\xf3\x76\xdc\x92\x33\x33\x55\x8a\xbc\xc1\x7b\x8e\x5d\x79\x34\x11\xb9\x46\x2d\x88\x62\x4b\x55\x72\x0f\xf5\xc7\x64\x99\x35\x3b\x57\x25\xd7\x1c\x8f\x64\x2e\xb4\xb7\x0f\xd9\xcc\x21\x94\x2b\xb8\xa0\xe5\x43\x36\x63\x8e\x96\x5c\x24\x2e\xe9\x3b\x2f\x16\xd9\x8c\x09\x99\xa4\xf4\xad\x52\xb3\x16\x21\x49\xcd\x5a\x84\x4a\xb5\x92\x84\xfa\x2d\x0a\x01\xb1\x64\xeb\xeb\x20\x2b\xd1\x28\x3b\x4a\xd1\xe8\x2a\x45\x93\xae\x97\xac\x4a\x2b\xd6\x1d\xb2\x99\x6d\x80\xb3\xc7\xe5\xff\x43\xe8\xaa\xbc\x78\x01\x08\xff\x5b\x81\xb3\x2d\x95\x36\x73\x9c\x02\xac\x7a\x04\x0a\xf6\xf3\x18\x77\xde\x81\x43\xc5\xf6\x0f\xe3\xc3\x9d\x69\xf5\x36\xe5\x1b\x9f\xce\x3b\x0e\x6f\xe7\x23\xa8\xf4\xd5\x81\x81\xdf\x5e\xbf\xbc\x21\x67\xe6\x57\x65\x1c\xdc\x22\xd4\x48\xae\xb5\x98\x50\x00\x75\xee\x6e\x3f\x60\x15\xf5\x8f\x76\x65\xb4\x69\x1e\xd2\xde\x44\x5b\xdd\xa9\x80\xfc\x16\xde\xbc\xbd\xfd\x12\x71\x01\xe8\x3d\xfd\xef\x7c\x41\xa5\x05\x6e\x9a\xf8\x3e\x08\xde\xd6\xd5\xd6\x63\x15\x73\x7d\x76\x70\xa3\x5e\x36\x1a\xb9\x28\xb4\x9d\x87\x6c\xa6\x1c\xe3\x90\xe5\x0a\x82\x69\x50\xd8\x98\x6c\x05\x59\xef\x87\x58\x26\xcc\x6c\xbb\x80\x66\x13\x97\x57\x94\x4b\x93\xcf\x35\xf1\x67\x9f\x4a\x78\xb6\x9f\x2f\x20\xf0\x3e\x1c\x5c\xc0\x6e\x3a\x0f\xef\x16\xd0\xd0\x56\xde\x38\xe2\xaa\x50\x9f\xa2\x06\x16\x5f\xf0\xf6\xb4\x1e\xf0\x0f\xa0\x19\x30\x70\x40\x41\x52\xf4\x24\x1c\xb0\x90\x15\x89\x87\x72\x6f\x94\x49\xce\x2b\xd5\xf4\x4c\x24\xcd\x98\x8b\xe9\x86\x2a\x45\xf9\xab\x09\x2a\x50\x75\xba\x28\x4b\xf5\x4d\x6b\x55\xa7\x3b\x31\xa9\xd3\xba\xcf\x49\x2f\x9f\x12\x5a\x74\x39\xe7\xa5\x92\xbc\x60\x9b\x43\x36\x23\xf4\xc3\x02\xba\x8f\x84\x4d\xb3\xcc\xe5\x15\x42\xef\x06\x5f\xbc\x20\x31\x23\x45\x2f\x05\x6e\x1f\x6b\xf2\x82\x65\x0d\x2f\x60\x05\x17\xa4\xee\xc3\x55\x93\x70\xfa\xac\x18\x85\xd4\xc7\x04\xd9\x55\xc9\xe0\x18\x38\xbd\x43\x56\x70\xa1\x76\x1a\x3e\x2c\x75\x96\xad\xc0\x6c\xb7\xe8\xea\x3c\x49\x16\x10\x1a\x21\x81\xbc\x2a\x87\x8c\xe3\xf7\xe7\x53\x12\x0e\x7b\xc2\xf1\xee\xc2\xb7\xa5\xbc\x7b\x07\xa9\x5e\x49\x6a\xfd\x88\x90\x28\xe9\xc1\x3a\xcc\x59\x1f\xb7\x4f\x99\xb5\xad\x3f\xf7\x79\x6b\x0e\x9a\x79\x7a\x5a\x0f\x72\xbf\x4e\x49\x5e\xf0\x17\x37\x91\xaa\x20\xfa\xd9\xfa\x33\xd7\xa6\xd4\x93\x8e\x94\x2c\xd6\xd3\x3e\x3e\x0d\xa4\x18\x9f\x85\xc3\x68\x5a\xd2\xfd\xb4\xd4\xa1\x95\x87\x42\x47\x67\x3f\x3c\xe0\xde\x9b\x6d\xe0\xa9\x27\xc5\x26\x5a\x6c\x30\xde\x75\x35\xdc\xdb\x78\x07\x1e\xab\x6e\x8f\x1e\x62\x07\xe8\xc2\xce\x23\xb8\x0e\xb6\xc6\xd9\x8a\x1e\x6b\xb0\x91\xf0\xd6\xad\x75\x48\x4e\x66\xd3\x64\x42\x36\xe9\x1e\x3d\xfe\x66\x38\x9d\x95\x35\x36\xe8\x81\xc2\xe5\xbc\xa6\xae\xed\x19\x64\x49\x86\xae\x8d\xfd\xb0\x87\x33\xf2\x5f\x9d\x69\x5f\xaa\x48\x12\xd6\x4e\xee\xf9\x80\x34\xe9\x08\x38\xdb\xca\xb9\x38\xd0\xc9\x51\xec\x46\xee\x79\xb1\x60\xab\x1e\x40\xe1\xe4\x04\x3f\x11\xff\x28\x7c\xc3\x83\x36\x41\x4f\x4e\x86\x80\x47\x86\x4f\x88\x9d\x54\x73\x06\x3a\xd4\x13\xf9\x18\x72\x52\xc4\x04\xb8\x74\x24\x26\xd0\x25\xc5\x8f\x82\x37\x3e\xf1\x13\xf8\xec\xf1\xd7\xee\xf1\xbd\xf9\x84\x08\xa6\xa2\xce\x60\x68\x8f\xb3\xe1\x31\x14\x53\x35\x3d\x8e\x5c\xe8\xf1\xe5\x10\x61\xf8\x76\x28\x46\x2b\xca\x8d\x66\x54\x5c\xfe\x6e\x5d\x9d\x17\xb0\x5a\x1d\xf5\x7f\x46\xcf\xa9\xd3\xe5\x10\x97\x57\x2d\x6e\xf2\xd1\xe8\x88\xd9\x21\xfb\x37\x00\x00\xff\xff\xdb\x1a\x88\xcc\x61\x11\x00\x00") func schemaGoBytes() ([]byte, error) { return bindataRead( @@ -102,7 +102,7 @@ func schemaGo() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "schema.go", size: 4438, mode: os.FileMode(420), modTime: time.Unix(1565781131, 0)} + info := bindataFileInfo{name: "schema.go", size: 4449, mode: os.FileMode(420), modTime: time.Unix(1566124960, 0)} a := &asset{bytes: bytes, info: info} return a, nil } diff --git a/entc/load/load.go b/entc/load/load.go index d7cf24b1c..e1d15f156 100644 --- a/entc/load/load.go +++ b/entc/load/load.go @@ -89,7 +89,7 @@ func (c *Config) Load() (*SchemaSpec, error) { func (c *Config) load() (string, error) { // get the ent package info statically instead of dealing with string constants // in the code, since import is handled by goimports and renaming should be easy. - entface := reflect.TypeOf(struct{ ent.Schema }{}).Field(0).Type + entface := reflect.TypeOf(struct{ ent.Interface }{}).Field(0).Type pkgs, err := packages.Load(&packages.Config{Mode: packages.LoadSyntax}, c.Path, entface.PkgPath()) if err != nil { return "", err diff --git a/entc/load/load_test.go b/entc/load/load_test.go index 923000316..ce4ee5612 100644 --- a/entc/load/load_test.go +++ b/entc/load/load_test.go @@ -3,6 +3,8 @@ package load import ( "testing" + "fbc/ent/schema/field" + "github.com/stretchr/testify/require" ) @@ -39,7 +41,21 @@ func TestLoadNoSchema(t *testing.T) { func TestLoadSchemaFailure(t *testing.T) { cfg := &Config{Path: "./testdata/failure"} - schemas, err := cfg.Load() + spec, err := cfg.Load() require.Error(t, err) - require.Empty(t, schemas) + require.Nil(t, spec) +} + +func TestLoadBaseSchema(t *testing.T) { + cfg := &Config{Path: "./testdata/base"} + spec, err := cfg.Load() + require.NoError(t, err) + require.Len(t, spec.Schemas, 1) + require.Len(t, spec.Schemas[0].Fields, 2, "embedded base schema") + f1 := spec.Schemas[0].Fields[0] + require.Equal(t, "base_field", f1.Name) + require.Equal(t, field.TypeInt, f1.Type) + f2 := spec.Schemas[0].Fields[1] + require.Equal(t, "user_field", f2.Name) + require.Equal(t, field.TypeString, f2.Type) } diff --git a/entc/load/schema.go b/entc/load/schema.go index 62432c32d..124d40bc6 100644 --- a/entc/load/schema.go +++ b/entc/load/schema.go @@ -70,7 +70,7 @@ func NewEdge(e ent.Edge) *Edge { // MarshalSchema encode the ent.Schema interface into a JSON // that can be decoded into the Schema object object. -func MarshalSchema(schema ent.Schema) (b []byte, err error) { +func MarshalSchema(schema ent.Interface) (b []byte, err error) { s := &Schema{Name: indirect(reflect.TypeOf(schema)).Name()} fields, err := safeFields(schema) if err != nil { @@ -120,7 +120,7 @@ func MarshalSchema(schema ent.Schema) (b []byte, err error) { } // safeFields wraps the schema.Fields method with recover to ensure no panics in marshaling. -func safeFields(schema ent.Schema) (fields []ent.Field, err error) { +func safeFields(schema ent.Interface) (fields []ent.Field, err error) { defer func() { if v := recover(); v != nil { err = fmt.Errorf("schema.Fields panics: %v", v) @@ -131,7 +131,7 @@ func safeFields(schema ent.Schema) (fields []ent.Field, err error) { } // safeEdges wraps the schema.Edges method with recover to ensure no panics in marshaling. -func safeEdges(schema ent.Schema) (edges []ent.Edge, err error) { +func safeEdges(schema ent.Interface) (edges []ent.Edge, err error) { defer func() { if v := recover(); v != nil { err = fmt.Errorf("schema.Edges panics: %v", v) @@ -142,7 +142,7 @@ func safeEdges(schema ent.Schema) (edges []ent.Edge, err error) { } // safeIndexes wraps the schema.Indexes method with recover to ensure no panics in marshaling. -func safeIndexes(schema ent.Schema) (indexes []ent.Index, err error) { +func safeIndexes(schema ent.Interface) (indexes []ent.Index, err error) { defer func() { if v := recover(); v != nil { err = fmt.Errorf("schema.Indexes panics: %v", v) diff --git a/entc/load/schema_test.go b/entc/load/schema_test.go index cf4a0d5cc..d2c71453e 100644 --- a/entc/load/schema_test.go +++ b/entc/load/schema_test.go @@ -60,7 +60,7 @@ func (Group) Edges() []ent.Edge { } func TestMarshalSchema(t *testing.T) { - for _, u := range []ent.Schema{User{}, &User{}} { + for _, u := range []ent.Interface{User{}, &User{}} { buf, err := MarshalSchema(u) require.NoError(t, err) diff --git a/entc/load/template/main.tmpl b/entc/load/template/main.tmpl index 39ce8b53a..785336a38 100644 --- a/entc/load/template/main.tmpl +++ b/entc/load/template/main.tmpl @@ -12,9 +12,9 @@ import ( {{ $base := base .Package}} -var schemas = []ent.Schema{ +var schemas = []ent.Interface{ {{ range $_, $name := .Names }} - {{- $base }}.{{- printf "%s{Schema: ent.DefaultSchema}" $name }}, + {{- $base }}.{{- printf "%s{}" $name }}, {{ end -}} } diff --git a/entc/load/testdata/base/schema.go b/entc/load/testdata/base/schema.go new file mode 100644 index 000000000..135865419 --- /dev/null +++ b/entc/load/testdata/base/schema.go @@ -0,0 +1,29 @@ +package base + +import ( + "fbc/ent" + "fbc/ent/schema/field" +) + +// base schema for sharing fields and edges. +type base struct { + ent.Schema +} + +func (base) Fields() []ent.Field { + return []ent.Field{ + field.Int("base_field"), + } +} + +// User holds the user schema. +type User struct { + base +} + +func (u User) Fields() []ent.Field { + return append( + u.base.Fields(), + field.String("user_field"), + ) +}