identity_iota_interaction/
iota_verifiable_credential.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
// Copyright 2020-2025 IOTA Stiftung
// SPDX-License-Identifier: Apache-2.0

use crate::move_types::language_storage::TypeTag;
use crate::types::base_types::ObjectID;
use crate::MoveType;
use crate::TypedValue;
use serde::Deserialize;
use serde::Serialize;
use std::str::FromStr;

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct IotaVerifiableCredential {
  data: Vec<u8>,
}

impl IotaVerifiableCredential {
  pub fn new(data: Vec<u8>) -> IotaVerifiableCredential {
    IotaVerifiableCredential { data }
  }

  pub fn data(&self) -> &Vec<u8> {
    &self.data
  }
}

impl MoveType for IotaVerifiableCredential {
  fn move_type(package: ObjectID) -> TypeTag {
    TypeTag::from_str(&format!("{package}::public_vc::PublicVc")).expect("valid utf8")
  }

  fn get_typed_value(&self, _package: ObjectID) -> TypedValue<Self>
  where
    Self: MoveType,
    Self: Sized,
  {
    TypedValue::IotaVerifiableCredential(self)
  }
}