sui_indexer/models/
display.rs

1// Copyright (c) Mysten Labs, Inc.
2// SPDX-License-Identifier: Apache-2.0
3
4use diesel::prelude::*;
5use serde::Deserialize;
6
7use sui_types::display::DisplayVersionUpdatedEvent;
8
9use crate::schema::display;
10
11#[derive(Queryable, Insertable, Selectable, Debug, Clone, Deserialize)]
12#[diesel(table_name = display)]
13pub struct StoredDisplay {
14    pub object_type: String,
15    pub id: Vec<u8>,
16    pub version: i16,
17    pub bcs: Vec<u8>,
18}
19
20impl StoredDisplay {
21    pub fn try_from_event(event: &sui_types::event::Event) -> Option<Self> {
22        let (ty, display_event) = DisplayVersionUpdatedEvent::try_from_event(event)?;
23
24        Some(Self {
25            object_type: ty.to_canonical_string(/* with_prefix */ true),
26            id: display_event.id.bytes.to_vec(),
27            version: display_event.version as i16,
28            bcs: event.contents.clone(),
29        })
30    }
31
32    pub fn to_display_update_event(&self) -> Result<DisplayVersionUpdatedEvent, bcs::Error> {
33        bcs::from_bytes(&self.bcs)
34    }
35}