identity_iota_core/rebased/migration/
registry.rsuse identity_iota_interaction::rpc_types::IotaData;
use identity_iota_interaction::types::base_types::ObjectID;
use identity_iota_interaction::types::id::ID;
use identity_iota_interaction::IotaClientTrait;
use crate::rebased::client::IdentityClientReadOnly;
use super::get_identity;
use super::OnChainIdentity;
#[derive(thiserror::Error, Debug)]
pub enum Error {
#[error(transparent)]
Client(anyhow::Error),
#[error("could not locate MigrationRegistry object: {0}")]
NotFound(String),
#[error("malformed MigrationRegistry's entry: {0}")]
Malformed(String),
}
pub async fn lookup(id_client: &IdentityClientReadOnly, alias_id: ObjectID) -> Result<Option<OnChainIdentity>, Error> {
let dynamic_field_name = serde_json::from_value(serde_json::json!({
"type": "0x2::object::ID",
"value": alias_id.to_string()
}))
.expect("valid move value");
let identity_id = id_client
.read_api()
.get_dynamic_field_object(id_client.migration_registry_id(), dynamic_field_name)
.await
.map_err(|e| Error::Client(e.into()))?
.data
.map(|data| {
data
.content
.and_then(|content| content.try_into_move())
.and_then(|move_object| move_object.fields.to_json_value().get_mut("value").map(std::mem::take))
.and_then(|value| serde_json::from_value::<ID>(value).map(|id| id.bytes).ok())
.ok_or(Error::Malformed(
"invalid MigrationRegistry's Entry encoding".to_string(),
))
})
.transpose()?;
if let Some(id) = identity_id {
get_identity(id_client, id).await.map_err(|e| Error::Client(e.into()))
} else {
Ok(None)
}
}