fix: use typed envelope struct for PDS getRecord response parsing
Replaces the double-parse with serde_json::Value intermediate with a
single-pass parse into GetRecordResponse struct. This eliminates the
clone() and double deserialization path.
Changes:
- Add GetRecordResponse struct with typed value field (LabelerPolicies)
and optional uri/cid fields with #[serde(default)]
- Replace serde_json::from_slice::<Value> + from_value::<LabelerPolicies>
with single serde_json::from_slice::<GetRecordResponse>
- Remove ParseRecord and MissingValue variants from FetchRecordError
- All envelope parsing errors now map to ParseEnvelope variant; serde's
error message for missing 'value' field is already human-friendly
- Update match statement to remove now-unreachable variants
All 12 snapshot tests pass without changes, confirming error messages
remain clear.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>