From 3e5c7bb9ac5c23b7c3cf70ea3e59869cada03d9e Mon Sep 17 00:00:00 2001 From: Ashok Menon Date: Tue, 29 Oct 2024 17:37:32 +0000 Subject: [PATCH] fixup: make StoredOwnerKind readable from SQL --- crates/sui-indexer-alt/src/models/objects.rs | 33 ++++++++++++++------ 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/crates/sui-indexer-alt/src/models/objects.rs b/crates/sui-indexer-alt/src/models/objects.rs index 43797845d5b22..a694fa916537d 100644 --- a/crates/sui-indexer-alt/src/models/objects.rs +++ b/crates/sui-indexer-alt/src/models/objects.rs @@ -1,15 +1,13 @@ // Copyright (c) Mysten Labs, Inc. // SPDX-License-Identifier: Apache-2.0 -use crate::schema::{kv_objects, sum_obj_types}; use diesel::{ - backend::Backend, - expression::AsExpression, - prelude::*, - serialize::{Output, Result, ToSql}, - sql_types::SmallInt, + backend::Backend, deserialize, expression::AsExpression, prelude::*, serialize, + sql_types::SmallInt, FromSqlRow, }; +use crate::schema::{kv_objects, sum_obj_types}; + #[derive(Insertable, Debug, Clone)] #[diesel(table_name = kv_objects, primary_key(object_id, object_version))] pub struct StoredObject { @@ -18,7 +16,7 @@ pub struct StoredObject { pub serialized_object: Option>, } -#[derive(AsExpression, Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] +#[derive(AsExpression, FromSqlRow, Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] #[diesel(sql_type = SmallInt)] #[repr(i16)] pub enum StoredOwnerKind { @@ -41,11 +39,11 @@ pub struct StoredSumObjType { pub instantiation: Option>, } -impl ToSql for StoredOwnerKind +impl serialize::ToSql for StoredOwnerKind where - i16: ToSql, + i16: serialize::ToSql, { - fn to_sql<'b>(&'b self, out: &mut Output<'b, '_, DB>) -> Result { + fn to_sql<'b>(&'b self, out: &mut serialize::Output<'b, '_, DB>) -> serialize::Result { match self { StoredOwnerKind::Immutable => 0.to_sql(out), StoredOwnerKind::Address => 1.to_sql(out), @@ -54,3 +52,18 @@ where } } } + +impl deserialize::FromSql for StoredOwnerKind +where + i16: deserialize::FromSql, +{ + fn from_sql(raw: DB::RawValue<'_>) -> deserialize::Result { + Ok(match i16::from_sql(raw)? { + 0 => StoredOwnerKind::Immutable, + 1 => StoredOwnerKind::Address, + 2 => StoredOwnerKind::Object, + 3 => StoredOwnerKind::Shared, + o => return Err(format!("Unexpected StoredOwnerKind: {o}").into()), + }) + } +}