sui_graphql_rpc/types/
object_change.rsuse async_graphql::*;
use sui_types::effects::{IDOperation, ObjectChange as NativeObjectChange};
use super::{object::Object, sui_address::SuiAddress};
pub(crate) struct ObjectChange {
pub native: NativeObjectChange,
pub checkpoint_viewed_at: u64,
}
#[Object]
impl ObjectChange {
async fn address(&self) -> SuiAddress {
self.native.id.into()
}
async fn input_state(&self, ctx: &Context<'_>) -> Result<Option<Object>> {
let Some(version) = self.native.input_version else {
return Ok(None);
};
Object::query(
ctx,
self.native.id.into(),
Object::at_version(version.value(), self.checkpoint_viewed_at),
)
.await
.extend()
}
async fn output_state(&self, ctx: &Context<'_>) -> Result<Option<Object>> {
let Some(version) = self.native.output_version else {
return Ok(None);
};
Object::query(
ctx,
self.native.id.into(),
Object::at_version(version.value(), self.checkpoint_viewed_at),
)
.await
.extend()
}
async fn id_created(&self) -> Option<bool> {
Some(self.native.id_operation == IDOperation::Created)
}
async fn id_deleted(&self) -> Option<bool> {
Some(self.native.id_operation == IDOperation::Deleted)
}
}