(ctx context.Context, dag *dagql.Server, tree persistedModTree)
| 1064 | } |
| 1065 | |
| 1066 | func decodePersistedModTree(ctx context.Context, dag *dagql.Server, tree persistedModTree) (map[int]*ModTreeNode, error) { |
| 1067 | nodes := make(map[int]*ModTreeNode, len(tree.Nodes)) |
| 1068 | serverByModuleID := map[uint64]*dagql.Server{} |
| 1069 | |
| 1070 | for _, persisted := range tree.Nodes { |
| 1071 | if persisted.ID == 0 { |
| 1072 | return nil, fmt.Errorf("decode persisted mod tree: zero node ID") |
| 1073 | } |
| 1074 | if _, exists := nodes[persisted.ID]; exists { |
| 1075 | return nil, fmt.Errorf("decode persisted mod tree: duplicate node ID %d", persisted.ID) |
| 1076 | } |
| 1077 | |
| 1078 | node := &ModTreeNode{ |
| 1079 | Name: persisted.Name, |
| 1080 | Description: persisted.Description, |
| 1081 | IsCheck: persisted.IsCheck, |
| 1082 | IsGenerator: persisted.IsGenerator, |
| 1083 | IsUp: persisted.IsUp, |
| 1084 | } |
| 1085 | if persisted.ModuleResultID != 0 { |
| 1086 | module, err := loadPersistedObjectResultByResultID[*Module](ctx, dag, persisted.ModuleResultID, "mod tree module") |
| 1087 | if err != nil { |
| 1088 | return nil, err |
| 1089 | } |
| 1090 | node.Module = module |
| 1091 | if srv, ok := serverByModuleID[persisted.ModuleResultID]; ok { |
| 1092 | node.DagqlServer = srv |
| 1093 | } else { |
| 1094 | srv, err := dagqlServerForModule(ctx, module) |
| 1095 | if err != nil { |
| 1096 | return nil, fmt.Errorf("decode persisted mod tree server for module %d: %w", persisted.ModuleResultID, err) |
| 1097 | } |
| 1098 | serverByModuleID[persisted.ModuleResultID] = srv |
| 1099 | node.DagqlServer = srv |
| 1100 | } |
| 1101 | } |
| 1102 | if persisted.OriginalModuleResultID != 0 { |
| 1103 | originalModule, err := loadPersistedObjectResultByResultID[*Module](ctx, dag, persisted.OriginalModuleResultID, "mod tree original module") |
| 1104 | if err != nil { |
| 1105 | return nil, err |
| 1106 | } |
| 1107 | node.OriginalModule = originalModule |
| 1108 | } |
| 1109 | if persisted.TypeResultID != 0 { |
| 1110 | typeDef, err := loadPersistedObjectResultByResultID[*TypeDef](ctx, dag, persisted.TypeResultID, "mod tree typedef") |
| 1111 | if err != nil { |
| 1112 | return nil, err |
| 1113 | } |
| 1114 | node.Type = typeDef |
| 1115 | } |
| 1116 | nodes[persisted.ID] = node |
| 1117 | } |
| 1118 | |
| 1119 | for _, persisted := range tree.Nodes { |
| 1120 | if persisted.ParentID == 0 { |
| 1121 | continue |
| 1122 | } |
| 1123 | parent, ok := nodes[persisted.ParentID] |
no test coverage detected