1use cosmwasm_std::{Addr, StdResult, Storage};
2use cw2::{ContractVersion, CONTRACT};
3use cw_controllers::Admin;
4use cw_storage_plus::Item;
5use schemars::JsonSchema;
6use serde::{Deserialize, Serialize};
7
8use abstract_sdk::{memory::Memory, ADMIN, BASE_STATE};
9
10pub struct AddOnContract<'a> {
12 pub base_state: Item<'a, AddOnState>,
14 pub version: Item<'a, ContractVersion>,
15 pub admin: Admin<'a>,
16}
17
18impl Default for AddOnContract<'static> {
19 fn default() -> Self {
20 Self::new(BASE_STATE, ADMIN)
21 }
22}
23
24impl<'a> AddOnContract<'a> {
26 fn new(base_state_key: &'a str, admin_key: &'a str) -> Self {
27 Self {
28 version: CONTRACT,
29 base_state: Item::new(base_state_key),
30 admin: Admin::new(admin_key),
31 }
32 }
33 pub fn state(&self, store: &dyn Storage) -> StdResult<AddOnState> {
34 self.base_state.load(store)
35 }
36
37 pub fn version(&self, store: &dyn Storage) -> StdResult<ContractVersion> {
38 self.version.load(store)
39 }
40}
41
42#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
44pub struct AddOnState {
45 pub proxy_address: Addr,
47 pub memory: Memory,
49}