iota_json_rpc_types/
iota_indexer.rs1use std::collections::BTreeMap;
5
6use iota_names::registry::NameRecord;
7use iota_sdk_types::{Address, ObjectId};
8use schemars::JsonSchema;
9use serde::{Deserialize, Serialize};
10use serde_with::serde_as;
11
12use crate::iota_primitives::{Address as AddressSchema, ObjectId as ObjectIdSchema};
13
14#[serde_as]
16#[derive(Serialize, Deserialize, Debug, Clone, JsonSchema)]
17#[serde(rename_all = "camelCase")]
18pub struct IotaNameRecord {
19 #[serde_as(as = "ObjectIdSchema")]
27 #[schemars(with = "ObjectIdSchema")]
28 pub nft_id: ObjectId,
29 pub expiration_timestamp_ms: u64,
31 #[serde_as(as = "Option<AddressSchema>")]
33 #[schemars(with = "Option<AddressSchema>")]
34 pub target_address: Option<Address>,
35 pub data: BTreeMap<String, String>,
37}
38
39impl From<NameRecord> for IotaNameRecord {
40 fn from(record: NameRecord) -> Self {
41 Self {
42 nft_id: record.nft_id.bytes,
43 expiration_timestamp_ms: record.expiration_timestamp_ms,
44 target_address: record.target_address,
45 data: record
46 .data
47 .contents
48 .into_iter()
49 .map(|entry| (entry.key.to_string(), entry.value))
50 .collect(),
51 }
52 }
53}