1 import Base 2 import entity_key.bend as K 3 4 type RelationKind is Data: 5 Ordinary{} 6 Hierarchy{} 7 type Descriptor is Data: 8 Descriptor{key: U32,name: String,inverseName: String,kind: RelationKind} 9 type Edge is Data: 10 Edge{relation: Descriptor,source: K.Key,target: K.Key} 11 type Error is Data: 12 MissingEntity{source: K.Key} 13 MissingTargetEntity{source: K.Key,target: K.Key,relation: String} 14 SelfRelationNotAllowed{source: K.Key,relation: String} 15 HierarchyCycle{source: K.Key,target: K.Key,relation: String} 16 MissingChildEntity{source: K.Key,child: K.Key,relation: String} 17 DuplicateChild{source: K.Key,child: K.Key,relation: String} 18 ChildNotRelatedToParent{source: K.Key,child: K.Key,relation: String} 19 ChildSetMismatch{source: K.Key,relation: String} 20 type Operation is Data: 21 Relate{} 22 ReorderChildren{} 23 type Failure is Data: 24 Failure{relation: Descriptor,operation: Operation,source: K.Key,target: K.Key,error: Error} 25 type Inverse is Data: 26 Inverse{relation: Descriptor,target: K.Key,sources: List<&2,K.Key>} 27 type SpecGraph is Data: 28 SpecGraph{edges: List<&2,Edge>} 29 type Graph is Data: 30 Graph{edges: List<&2,Edge>,inverses: List<&2,Inverse>} 31 type SpecResult is Data: 32 SpecResult{graph: SpecGraph,error: Maybe<&2,Error>} 33 type CoreResult is Data: 34 CoreResult{graph: Graph,error: Maybe<&2,Error>} 35 type ChildStatus is Data: 36 ChildStatus{id: K.Key,live: Bool} 37 38 # Diagnostic continuation, not a new relation rejection policy. 39 type CleanupFrame is Data: 40 CleanupEnter{id:K.Key} 41 CleanupDescriptors{id:K.Key,remaining:List<&2,Descriptor>} 42 CleanupChildren{id:K.Key,descriptor:Descriptor,remainingDescriptors:List<&2,Descriptor>,remainingChildren:List<&2,K.Key>} 43 CleanupFinish{id:K.Key} 44 # Public reorder provisioning accepts this nominal hierarchy family only. 45 type HierarchyDescriptor is Data: 46 HierarchyDescriptor{key:U32,name:String,inverseName:String}