, errors: array} */ public function validate(array $snapshot): array { $warnings = []; $errors = []; if ($snapshot === []) { $warnings[] = 'Snapshot is empty'; } if (array_is_list($snapshot)) { $warnings[] = 'This snapshot may be incomplete or malformed'; } foreach ($snapshot as $value) { if (is_string($value) && $this->looksSerializedJson($value)) { $warnings[] = 'Snapshot may have been stored as a serialized string'; break; } } return [ 'isValid' => empty($errors), 'warnings' => array_values(array_unique($warnings)), 'errors' => array_values(array_unique($errors)), ]; } private function looksSerializedJson(string $value): bool { $trimmed = trim($value); return str_starts_with($trimmed, '{') || str_starts_with($trimmed, '['); } }