Module of the PluginDomain for extending collection contracts
A plugin is a smart contract which extends the functionality of the
collection base contract by obtaining an instance of the collection
Witness type.
Plugins are thus able to implement custom logic for collections
post-deployment.
This solves the issue that after a package is deployed, it can no
longer leverage witness protected API.
Structs
        plugins::PluginDomain<C> has store
    
    plugins::PluginDomain<C> has store
Fields:
| Name | Type | Description | 
|---|---|---|
| generator | witness::WitnessGenerator<C> | Generator responsible for issuing delegated witnesses | 
| packages | vec_set::VecSet<type_name::TypeName> | Witnesses that have the ability to mutate standard domains | 
Methods
        public fun add_plugin<C, PluginWitness>(
    _witness: witness::Witness<C>,
    collection: &mut collection::Collection<C>,
)
    
    public fun add_plugin<C, PluginWitness>(
    _witness: witness::Witness<C>,
    collection: &mut collection::Collection<C>,
)Attributes witness as a plugin on the Collection
Panics
Panics if witness was already attributed or PluginDomain is not
registered on the Collection.
        public fun remove_plugin<C, PluginWitness>(
    _witness: witness::Witness<C>,
    collection: &mut collection::Collection<C>,
)
    
    public fun remove_plugin<C, PluginWitness>(
    _witness: witness::Witness<C>,
    collection: &mut collection::Collection<C>,
)Removes witness as a plugin on the Collection
Panics
Panics if witness was not attributed or PluginDomain is not
registered on the Collection.
        public fun delegate<C, PluginWitness>(
    _witness: &PluginWitness,
    collection: &mut collection::Collection<C>,
): witness::Witness<C>
    
    public fun delegate<C, PluginWitness>(
    _witness: &PluginWitness,
    collection: &mut collection::Collection<C>,
): witness::Witness<C>Create a delegated witness
Delegated witness can be used to authorize mutating operations across most OriginByte domains.
Panics
Panics if plugin witness was not a plugin or CreatorsDomain was not
registered on the Collection.
        public fun contains_plugin<C, PluginWitness>(
    domain: &plugins::PluginDomain<C>,
): bool
    
    public fun contains_plugin<C, PluginWitness>(
    domain: &plugins::PluginDomain<C>,
): boolReturns whether witness is a defined plugin
        public fun borrow_plugins<C>(
    domain: &plugins::PluginDomain<C>,
): &vec_set::VecSet<type_name::TypeName>
    
    public fun borrow_plugins<C>(
    domain: &plugins::PluginDomain<C>,
): &vec_set::VecSet<type_name::TypeName>Returns list of all defined plugins
        public fun borrow_plugin_domain<C>(
    collection: &collection::Collection<C>,
): &plugins::PluginDomain<C>
    
    public fun borrow_plugin_domain<C>(
    collection: &collection::Collection<C>,
): &plugins::PluginDomain<C>Borrows PluginDomain from Collection
Panics
Panics if PluginDomain is not registered on Collection.
        public fun add_plugin_domain<C, W>(
    witness: &W,
    collection: &mut collection::Collection<C>,
)
    
    public fun add_plugin_domain<C, W>(
    witness: &W,
    collection: &mut collection::Collection<C>,
)Adds PluginDomain to Collection
Panics
Panics if CreatorsDomain already exists.
        public fun assert_plugin<C, PluginWitness>(
    domain: &plugins::PluginDomain<C>,
)
    
    public fun assert_plugin<C, PluginWitness>(
    domain: &plugins::PluginDomain<C>,
)Asserts that witness is attributed in PluginDomain
Panics
Panics if PluginDomain is not defined or witness is not a plugin.
        public fun assert_domain<C>(
    collection: &collection::Collection<C>,
)
    
    public fun assert_domain<C>(
    collection: &collection::Collection<C>,
)Asserts that PluginDomain is defined on the Collection
Panics
Panics if PluginDomain is not defined on the Collection.