iota_indexer/models/
obj_indices.rs

1// Copyright (c) Mysten Labs, Inc.
2// Modifications Copyright (c) 2024 IOTA Stiftung
3// SPDX-License-Identifier: Apache-2.0
4
5use diesel::prelude::*;
6
7use crate::{
8    schema::objects_version,
9    types::{IndexedDeletedObject, IndexedObject},
10};
11
12/// Model types related to tables that support efficient execution of queries on
13/// the `objects`, `objects_history` and `objects_snapshot` tables.
14
15#[derive(Queryable, Insertable, Debug, Identifiable, Clone, QueryableByName)]
16#[diesel(table_name = objects_version, primary_key(object_id, object_version))]
17pub struct StoredObjectVersion {
18    pub object_id: Vec<u8>,
19    pub object_version: i64,
20    pub cp_sequence_number: i64,
21}
22
23impl From<&IndexedObject> for StoredObjectVersion {
24    fn from(o: &IndexedObject) -> Self {
25        Self {
26            object_id: o.object.id().to_vec(),
27            object_version: o.object.version().value() as i64,
28            cp_sequence_number: o.checkpoint_sequence_number as i64,
29        }
30    }
31}
32
33impl From<&IndexedDeletedObject> for StoredObjectVersion {
34    fn from(o: &IndexedDeletedObject) -> Self {
35        Self {
36            object_id: o.object_id.to_vec(),
37            object_version: o.object_version as i64,
38            cp_sequence_number: o.checkpoint_sequence_number as i64,
39        }
40    }
41}