First function: detect/choose discriminator
(simpleId string)
| 35 | |
| 36 | // First function: detect/choose discriminator |
| 37 | func parseSimpleId(simpleId string) (discriminator string, value string, err error) { |
| 38 | // Check for explicit discriminator with @ |
| 39 | if parts := strings.SplitN(simpleId, "@", 2); len(parts) == 2 { |
| 40 | return parts[0], parts[1], nil |
| 41 | } |
| 42 | |
| 43 | // Handle special keywords |
| 44 | if simpleId == SimpleId_This || simpleId == SimpleId_Block || simpleId == SimpleId_Tab || |
| 45 | simpleId == SimpleId_Ws || simpleId == SimpleId_Workspace || |
| 46 | simpleId == SimpleId_Client || simpleId == SimpleId_Global || simpleId == SimpleId_Temp { |
| 47 | return "this", simpleId, nil |
| 48 | } |
| 49 | |
| 50 | // Check if it's a simple ORef (type:uuid) |
| 51 | if _, err := waveobj.ParseORef(simpleId); err == nil { |
| 52 | return "oref", simpleId, nil |
| 53 | } |
| 54 | |
| 55 | // Check for tab:N format |
| 56 | if simpleTabNumRe.MatchString(simpleId) { |
| 57 | return "tabnum", simpleId, nil |
| 58 | } |
| 59 | |
| 60 | // check for [view]:N format |
| 61 | if viewBlockRe.MatchString(simpleId) { |
| 62 | return "view", simpleId, nil |
| 63 | } |
| 64 | |
| 65 | // Check for plain number (block reference) |
| 66 | if _, err := strconv.Atoi(simpleId); err == nil { |
| 67 | return "blocknum", simpleId, nil |
| 68 | } |
| 69 | |
| 70 | // Check for UUIDs |
| 71 | if _, err := uuid.Parse(simpleId); err == nil { |
| 72 | return "uuid", simpleId, nil |
| 73 | } |
| 74 | if shortUUIDRe.MatchString(strings.ToLower(simpleId)) { |
| 75 | return "uuid8", simpleId, nil |
| 76 | } |
| 77 | |
| 78 | return "", "", fmt.Errorf("invalid simple id format: %s", simpleId) |
| 79 | } |
| 80 | |
| 81 | // Individual resolvers |
| 82 | func resolveThis(ctx context.Context, data wshrpc.CommandResolveIdsData, value string) (*waveobj.ORef, error) { |
no test coverage detected