(line []byte)
| 221 | } |
| 222 | |
| 223 | func parseEntry(line []byte) (lockEntry, error) { |
| 224 | var tuple []json.RawMessage |
| 225 | if err := decodeJSON(line, &tuple); err != nil { |
| 226 | return lockEntry{}, fmt.Errorf("invalid tuple JSON: %w", err) |
| 227 | } |
| 228 | if len(tuple) != 5 { |
| 229 | return lockEntry{}, fmt.Errorf("invalid tuple length %d: expected 5", len(tuple)) |
| 230 | } |
| 231 | |
| 232 | var namespace string |
| 233 | if err := decodeJSON(tuple[0], &namespace); err != nil { |
| 234 | return lockEntry{}, fmt.Errorf("invalid namespace: %w", err) |
| 235 | } |
| 236 | |
| 237 | var operation string |
| 238 | if err := decodeJSON(tuple[1], &operation); err != nil { |
| 239 | return lockEntry{}, fmt.Errorf("invalid operation: %w", err) |
| 240 | } |
| 241 | |
| 242 | var inputs []any |
| 243 | if err := decodeJSON(tuple[2], &inputs); err != nil { |
| 244 | return lockEntry{}, fmt.Errorf("invalid inputs: %w", err) |
| 245 | } |
| 246 | canonicalInputs, inputsJSON, err := canonicalizeInputs(inputs) |
| 247 | if err != nil { |
| 248 | return lockEntry{}, fmt.Errorf("canonicalizing inputs: %w", err) |
| 249 | } |
| 250 | |
| 251 | var value any |
| 252 | if err := decodeJSON(tuple[3], &value); err != nil { |
| 253 | return lockEntry{}, fmt.Errorf("invalid value: %w", err) |
| 254 | } |
| 255 | canonicalValue, err := canonicalizeValue(value) |
| 256 | if err != nil { |
| 257 | return lockEntry{}, fmt.Errorf("canonicalizing value: %w", err) |
| 258 | } |
| 259 | var policy string |
| 260 | if err := decodeJSON(tuple[4], &policy); err != nil { |
| 261 | return lockEntry{}, fmt.Errorf("invalid policy: %w", err) |
| 262 | } |
| 263 | |
| 264 | return lockEntry{ |
| 265 | namespace: namespace, |
| 266 | operation: operation, |
| 267 | inputs: canonicalInputs, |
| 268 | inputsJSON: inputsJSON, |
| 269 | value: canonicalValue, |
| 270 | policy: policy, |
| 271 | }, nil |
| 272 | } |
| 273 | |
| 274 | func canonicalizeInputs(inputs []any) ([]any, string, error) { |
| 275 | if inputs == nil { |
no test coverage detected