Skip to content

Commit b249b5f

Browse files
committed
Bump version to 0.3.1 and add flexible JSON deserialization for agentId field
- Update workspace version from 0.3.0 to 0.3.1 - Add `deserialize_u64_or_string` helper function to handle both number and string JSON formats - Apply custom deserializer to `Registration.agent_id` field to accept agentId as either JSON number or string - Import `Deserializer` trait from serde
1 parent dc27573 commit b249b5f

3 files changed

Lines changed: 22 additions & 5 deletions

File tree

Cargo.lock

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ default-members = ["erc8004"]
44
resolver = "3"
55

66
[workspace.package]
7-
version = "0.3.0"
7+
version = "0.3.1"
88
edition = "2024"
99
license = "MIT OR Apache-2.0"
1010
repository = "https://github.com/qntx/erc8004"

erc8004/src/types.rs

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,24 @@
44
//! specification (agent registration files, feedback files, etc.) and provide
55
//! ergonomic wrappers around on-chain primitives.
66
7-
use serde::{Deserialize, Serialize};
7+
use serde::{Deserialize, Deserializer, Serialize};
8+
9+
/// Deserialize a `u64` from either a JSON number or a JSON string.
10+
fn deserialize_u64_or_string<'de, D>(deserializer: D) -> Result<u64, D::Error>
11+
where
12+
D: Deserializer<'de>,
13+
{
14+
#[derive(Deserialize)]
15+
#[serde(untagged)]
16+
enum StringOrNum {
17+
Num(u64),
18+
Str(String),
19+
}
20+
match StringOrNum::deserialize(deserializer)? {
21+
StringOrNum::Num(n) => Ok(n),
22+
StringOrNum::Str(s) => s.parse::<u64>().map_err(serde::de::Error::custom),
23+
}
24+
}
825

926
/// The top-level agent registration file resolved by `agentURI`.
1027
///
@@ -80,7 +97,7 @@ pub struct ServiceEndpoint {
8097
#[derive(Debug, Clone, Serialize, Deserialize)]
8198
pub struct Registration {
8299
/// The ERC-721 token ID on the target chain.
83-
#[serde(rename = "agentId")]
100+
#[serde(rename = "agentId", deserialize_with = "deserialize_u64_or_string")]
84101
pub agent_id: u64,
85102

86103
/// A colon-separated string `{namespace}:{chainId}:{identityRegistry}`.

0 commit comments

Comments
 (0)