use crate::sns::report::{
MainnetSns, MainnetSnsCanisterInventory, MainnetSnsCanisters, MainnetSnsInventory,
MainnetSnsLifecycle, MainnetSnsMetadata, MainnetSnsMetrics, MainnetSnsNeuron,
MainnetSnsNeuronPage, MainnetSnsNeurons, MainnetSnsProposal, MainnetSnsProposalPage,
MainnetSnsProposals, MainnetSnsRewardNeuronPage, MainnetSnsSwap, MainnetSnsToken,
MainnetSnsUpgrade, SnsGovernanceParameters, SnsHostError, SnsNeuronId, SnsProposalTopicFilter,
SnsRewardEvent, SnsRunningVersionResponse, SnsSourceRequest,
};
pub trait SnsDiscoverySource {
fn fetch_sns_inventory(
&self,
request: &SnsSourceRequest,
) -> Result<MainnetSnsInventory, SnsHostError>;
fn fetch_sns_metadata(
&self,
request: &SnsSourceRequest,
targets: &[MainnetSnsCanisters],
) -> Result<Vec<MainnetSnsMetadata>, SnsHostError>;
}
pub trait SnsCatalogSource: SnsDiscoverySource {
fn fetch_sns_lifecycles(
&self,
request: &SnsSourceRequest,
targets: &[MainnetSnsCanisters],
) -> Result<Vec<MainnetSnsLifecycle>, SnsHostError>;
}
pub trait SnsCanisterSource: SnsDiscoverySource {
fn fetch_sns_canisters(
&self,
request: &SnsSourceRequest,
sns: &MainnetSns,
) -> Result<MainnetSnsCanisterInventory, SnsHostError>;
}
pub trait SnsNeuronSource: SnsDiscoverySource {
fn fetch_sns_neuron(
&self,
request: &SnsSourceRequest,
sns: &MainnetSns,
neuron_id: &str,
) -> Result<MainnetSnsNeuron, SnsHostError>;
}
pub trait SnsNeuronsSource: SnsDiscoverySource {
fn fetch_sns_neurons(
&self,
request: &SnsSourceRequest,
sns: &MainnetSns,
limit: u32,
owner_principal_id: Option<&str>,
) -> Result<MainnetSnsNeurons, SnsHostError>;
fn fetch_sns_neuron_page(
&self,
request: &SnsSourceRequest,
sns: &MainnetSns,
limit: u32,
start_page_at: Option<&SnsNeuronId>,
owner_principal_id: Option<&str>,
) -> Result<MainnetSnsNeuronPage, SnsHostError>;
}
pub trait SnsRewardSource: SnsDiscoverySource {
fn fetch_sns_reward_running_version(
&self,
request: &SnsSourceRequest,
sns: &MainnetSns,
) -> Result<SnsRunningVersionResponse, SnsHostError>;
fn fetch_sns_reward_parameters(
&self,
request: &SnsSourceRequest,
sns: &MainnetSns,
) -> Result<SnsGovernanceParameters, SnsHostError>;
fn fetch_sns_reward_event(
&self,
request: &SnsSourceRequest,
sns: &MainnetSns,
) -> Result<SnsRewardEvent, SnsHostError>;
fn fetch_sns_reward_neuron_page(
&self,
request: &SnsSourceRequest,
sns: &MainnetSns,
limit: u32,
start_page_at: Option<&SnsNeuronId>,
) -> Result<MainnetSnsRewardNeuronPage, SnsHostError>;
}
pub trait SnsParamsSource: SnsDiscoverySource {
fn fetch_sns_params(
&self,
request: &SnsSourceRequest,
sns: &MainnetSns,
) -> Result<SnsGovernanceParameters, SnsHostError>;
}
pub trait SnsSwapSource: SnsDiscoverySource {
fn fetch_sns_swap(
&self,
request: &SnsSourceRequest,
sns: &MainnetSns,
) -> Result<MainnetSnsSwap, SnsHostError>;
}
pub trait SnsMetricsSource: SnsDiscoverySource {
fn fetch_sns_metrics(
&self,
request: &SnsSourceRequest,
sns: &MainnetSns,
time_window_seconds: u64,
) -> Result<MainnetSnsMetrics, SnsHostError>;
}
pub trait SnsUpgradeSource: SnsDiscoverySource {
fn fetch_sns_upgrade(
&self,
request: &SnsSourceRequest,
sns: &MainnetSns,
) -> Result<MainnetSnsUpgrade, SnsHostError>;
}
pub trait SnsProposalSource: SnsDiscoverySource {
fn fetch_sns_proposal(
&self,
request: &SnsSourceRequest,
sns: &MainnetSns,
proposal_id: u64,
) -> Result<MainnetSnsProposal, SnsHostError>;
}
pub trait SnsProposalsSource: SnsDiscoverySource {
fn fetch_sns_proposals(
&self,
request: &SnsSourceRequest,
sns: &MainnetSns,
limit: u32,
before_proposal_id: Option<u64>,
include_status: &[i32],
topic: SnsProposalTopicFilter,
) -> Result<MainnetSnsProposals, SnsHostError>;
fn fetch_sns_proposal_page(
&self,
request: &SnsSourceRequest,
sns: &MainnetSns,
limit: u32,
before_proposal_id: Option<u64>,
) -> Result<MainnetSnsProposalPage, SnsHostError>;
}
pub trait SnsTokenSource: SnsDiscoverySource {
fn fetch_sns_token(
&self,
request: &SnsSourceRequest,
sns: &MainnetSns,
) -> Result<MainnetSnsToken, SnsHostError>;
}