scrypto/component/
package.rs

1use 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}