scrypto/component/
package.rs1use super::HasTypeInfo;
2use crate::prelude::{Global, HasStub, ObjectStub, ObjectStubHandle};
3use radix_common::prelude::PACKAGE_PACKAGE;
4use radix_engine_interface::blueprints::package::{
5 PackageClaimRoyaltiesInput, PACKAGE_BLUEPRINT, PACKAGE_CLAIM_ROYALTIES_IDENT,
6};
7use radix_engine_interface::blueprints::resource::FungibleBucket;
8use radix_engine_interface::types::*;
9use sbor::rust::prelude::*;
10
11pub type Package = Global<PackageStub>;
12
13#[derive(Debug, Copy, Clone, PartialEq, Eq)]
14pub struct PackageStub(pub ObjectStubHandle);
15
16impl HasStub for PackageStub {
17 type Stub = Self;
18}
19
20impl HasTypeInfo for PackageStub {
21 const PACKAGE_ADDRESS: Option<PackageAddress> = Some(PACKAGE_PACKAGE);
22
23 const BLUEPRINT_NAME: &'static str = PACKAGE_BLUEPRINT;
24
25 const OWNED_TYPE_NAME: &'static str = "OwnedPackage";
26
27 const GLOBAL_TYPE_NAME: &'static str = "GlobalPackage";
28}
29
30impl ObjectStub for PackageStub {
31 type AddressType = PackageAddress;
32
33 fn new(handle: ObjectStubHandle) -> Self {
34 Self(handle)
35 }
36
37 fn handle(&self) -> &ObjectStubHandle {
38 &self.0
39 }
40}
41
42impl PackageStub {
43 pub fn claim_royalties(&self) -> FungibleBucket {
44 self.call(
45 PACKAGE_CLAIM_ROYALTIES_IDENT,
46 &PackageClaimRoyaltiesInput {},
47 )
48 }
49}
50
51impl From<PackageAddress> for Package {
52 fn from(value: PackageAddress) -> Self {
53 Global(ObjectStub::new(ObjectStubHandle::Global(value.into())))
54 }
55}