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