github.com/cayleygraph/cayley@v0.7.7/schema/schema_test.go (about) 1 package schema_test 2 3 import ( 4 "sort" 5 "time" 6 7 "github.com/cayleygraph/cayley/schema" 8 "github.com/cayleygraph/quad" 9 "github.com/cayleygraph/quad/voc" 10 "github.com/cayleygraph/quad/voc/rdf" 11 ) 12 13 func init() { 14 voc.RegisterPrefix("ex:", "http://example.org/") 15 schema.RegisterType(quad.IRI("ex:Coords"), Coords{}) 16 } 17 18 type item struct { 19 rdfType struct{} `quad:"rdf:type > some:item"` 20 ID quad.IRI `quad:"@id"` 21 Name string `quad:"name"` 22 Spec string `quad:"spec,optional"` 23 } 24 25 type item2 struct { 26 Name string `quad:"name"` 27 Spec string `quad:"spec"` 28 } 29 30 type timeItem struct { 31 ID quad.IRI `quad:"@id"` 32 Name string `quad:"name"` 33 TS time.Time `quad:"ts"` 34 } 35 36 type treeItemByIRI []treeItem 37 38 func (o treeItemByIRI) Len() int { return len(o) } 39 func (o treeItemByIRI) Less(i, j int) bool { return o[i].ID < o[j].ID } 40 func (o treeItemByIRI) Swap(i, j int) { o[i], o[j] = o[j], o[i] } 41 42 type treeItem struct { 43 ID quad.IRI `quad:"@id"` 44 Name string `quad:"name"` 45 Children []treeItem `quad:"child"` 46 } 47 48 func (t *treeItem) Sort() { 49 for _, c := range t.Children { 50 c.Sort() 51 } 52 sort.Sort(treeItemByIRI(t.Children)) 53 } 54 55 type treeItemOptByIRI []treeItemOpt 56 57 func (o treeItemOptByIRI) Len() int { return len(o) } 58 func (o treeItemOptByIRI) Less(i, j int) bool { return o[i].ID < o[j].ID } 59 func (o treeItemOptByIRI) Swap(i, j int) { o[i], o[j] = o[j], o[i] } 60 61 type treeItemOpt struct { 62 ID quad.IRI `quad:"@id"` 63 Name string `quad:"name"` 64 Children []treeItemOpt `quad:"child,optional"` 65 } 66 67 func (t *treeItemOpt) Sort() { 68 for _, c := range t.Children { 69 c.Sort() 70 } 71 sort.Sort(treeItemOptByIRI(t.Children)) 72 } 73 74 type treeItemReqByIRI []treeItemReq 75 76 func (o treeItemReqByIRI) Len() int { return len(o) } 77 func (o treeItemReqByIRI) Less(i, j int) bool { return o[i].ID < o[j].ID } 78 func (o treeItemReqByIRI) Swap(i, j int) { o[i], o[j] = o[j], o[i] } 79 80 type treeItemReq struct { 81 ID quad.IRI `quad:"@id"` 82 Name string `quad:"name"` 83 Children []treeItemReq `quad:"child,required"` 84 } 85 86 func (t *treeItemReq) Sort() { 87 for _, c := range t.Children { 88 c.Sort() 89 } 90 sort.Sort(treeItemReqByIRI(t.Children)) 91 } 92 93 type genObject struct { 94 ID quad.IRI `quad:"@id"` 95 Name string `quad:"name"` 96 } 97 98 type MyString string 99 100 type genObjectTypedef struct { 101 ID quad.IRI `quad:"@id"` 102 Name MyString `quad:"name"` 103 } 104 105 type subObject struct { 106 genObject 107 Num int `quad:"num"` 108 } 109 110 type subSubObject struct { 111 subObject 112 Num2 int `quad:"num2"` 113 } 114 115 type Coords struct { 116 Lat float64 `json:"ex:lat"` 117 Lng float64 `json:"ex:lng"` 118 } 119 120 type NodeLoop struct { 121 ID quad.IRI `quad:"@id"` 122 Name string `quad:"name"` 123 Next *NodeLoop `quad:"next"` 124 } 125 126 type NestedNode struct { 127 ID quad.IRI `quad:"@id"` 128 Name string `quad:"name"` 129 Prev genObject `quad:"prev,opt"` 130 Next genObject `quad:"next,opt"` 131 } 132 133 type Alts struct { 134 Alt []OptFields `quad:"alt"` 135 } 136 137 type OptFields struct { 138 One string `quad:"one,optional"` 139 Two string `quad:"two,optional"` 140 } 141 142 func iri(s string) quad.IRI { return quad.IRI(s) } 143 144 const typeIRI = quad.IRI(rdf.Type) 145 146 var treeQuads = []quad.Quad{ 147 {iri("n1"), iri("name"), quad.String("Node 1"), nil}, 148 {iri("n2"), iri("name"), quad.String("Node 2"), nil}, 149 {iri("n3"), iri("name"), quad.String("Node 3"), nil}, 150 {iri("n4"), iri("name"), quad.String("Node 4"), nil}, 151 {iri("n5"), iri("name"), quad.String("Node 5"), nil}, 152 153 {iri("n1"), iri("child"), iri("n2"), nil}, 154 {iri("n1"), iri("child"), iri("n3"), nil}, 155 156 {iri("n3"), iri("child"), iri("n4"), nil}, 157 }