use crate::sns::report::{
SnsHostError, SnsNeuronDetailReport, SnsNeuronRequest,
assemble::{SnsNeuronDetailReportParts, sns_neuron_detail_report_from_parts},
live::LiveSnsSource,
lookup::resolve_sns_lookup,
source::{SnsNeuronSource, sns_neuron_id_from_text, validate_mainnet_sns_neuron},
};
pub async fn build_sns_neuron_detail_report(
request: &SnsNeuronRequest,
) -> Result<SnsNeuronDetailReport, SnsHostError> {
build_sns_neuron_detail_report_with_source(request, &LiveSnsSource::default()).await
}
pub async fn build_sns_neuron_detail_report_with_source(
request: &SnsNeuronRequest,
source: &dyn SnsNeuronSource,
) -> Result<SnsNeuronDetailReport, SnsHostError> {
sns_neuron_id_from_text(&request.neuron_id)?;
let lookup = resolve_sns_lookup(&request.lookup, source).await?;
let neuron = source
.fetch_sns_neuron(&lookup.fetch_request, &lookup.sns, &request.neuron_id)
.await?;
validate_mainnet_sns_neuron(&neuron, &request.neuron_id)?;
Ok(sns_neuron_detail_report_from_parts(
SnsNeuronDetailReportParts {
fetch_request: lookup.fetch_request,
sns: lookup.sns,
neuron_id: request.neuron_id.clone(),
neuron,
},
))
}