casper_client/rpcs/v2_0_0/
get_entity.rs1use casper_types::{
2 account::{Account, AccountHash},
3 AddressableEntity as CasperTypesAddressableEntity, EntityAddr, EntryPointValue, NamedKeys,
4 ProtocolVersion, PublicKey,
5};
6use serde::{Deserialize, Serialize};
7
8use crate::rpcs::common::BlockIdentifier;
9
10pub(crate) const GET_ENTITY_METHOD: &str = "state_get_entity";
11
12#[derive(Serialize, Deserialize, PartialEq, Eq, Debug, Clone)]
14#[serde(deny_unknown_fields)]
15pub enum EntityIdentifier {
16 PublicKey(PublicKey),
18 AccountHash(AccountHash),
20 EntityAddr(EntityAddr),
22}
23
24#[derive(Debug, PartialEq, Eq, Serialize, Deserialize, Clone)]
36pub struct AddressableEntity {
37 pub entity: CasperTypesAddressableEntity,
39
40 pub named_keys: NamedKeys,
42
43 pub entry_points: Vec<EntryPointValue>,
45}
46
47#[derive(Debug, PartialEq, Eq, Serialize, Deserialize, Clone)]
49pub enum EntityOrAccount {
50 AddressableEntity(AddressableEntity),
52 LegacyAccount(Account),
54}
55
56impl EntityOrAccount {
57 pub fn addressable_entity(&self) -> Option<&AddressableEntity> {
59 if let EntityOrAccount::AddressableEntity(addressable_entity) = &self {
60 Some(addressable_entity)
61 } else {
62 None
63 }
64 }
65
66 pub fn legacy_account(&self) -> Option<&Account> {
68 if let EntityOrAccount::LegacyAccount(account) = &self {
69 Some(account)
70 } else {
71 None
72 }
73 }
74}
75
76#[derive(Serialize, Deserialize, Debug)]
78#[serde(deny_unknown_fields)]
79pub(crate) struct GetAddressableEntityParams {
80 entity_identifier: EntityIdentifier,
82 block_identifier: Option<BlockIdentifier>,
84}
85
86impl GetAddressableEntityParams {
87 pub fn new(
89 entity_identifier: EntityIdentifier,
90 block_identifier: Option<BlockIdentifier>,
91 ) -> Self {
92 GetAddressableEntityParams {
93 entity_identifier,
94 block_identifier,
95 }
96 }
97}
98
99#[derive(PartialEq, Eq, Serialize, Deserialize, Debug, Clone)]
101#[serde(deny_unknown_fields)]
102pub struct GetAddressableEntityResult {
103 pub api_version: ProtocolVersion,
105 #[serde(alias = "entity")]
107 pub entity_result: EntityOrAccount,
108 pub merkle_proof: String,
110}