use crate::{
client::{
node_api::indexer::{
query_parameters::{
verify_query_parameters_alias_outputs, verify_query_parameters_basic_outputs,
verify_query_parameters_foundry_outputs, verify_query_parameters_nft_outputs, QueryParameter,
},
QueryParameters,
},
ClientInner, Error, Result,
},
types::{
api::plugins::indexer::OutputIdsResponse,
block::output::{AliasId, FoundryId, NftId, OutputId},
},
};
impl ClientInner {
pub async fn basic_output_ids(
&self,
query_parameters: impl Into<Vec<QueryParameter>> + Send,
) -> Result<OutputIdsResponse> {
let route = "api/indexer/v1/outputs/basic";
let query_parameters = verify_query_parameters_basic_outputs(query_parameters.into())?;
self.get_output_ids(route, query_parameters, true, false).await
}
pub async fn alias_output_ids(
&self,
query_parameters: impl Into<Vec<QueryParameter>> + Send,
) -> Result<OutputIdsResponse> {
let route = "api/indexer/v1/outputs/alias";
let query_parameters = verify_query_parameters_alias_outputs(query_parameters.into())?;
self.get_output_ids(route, query_parameters, true, false).await
}
pub async fn alias_output_id(&self, alias_id: AliasId) -> Result<OutputId> {
let route = format!("api/indexer/v1/outputs/alias/{alias_id}");
Ok(*(self
.get_output_ids(&route, QueryParameters::empty(), true, false)
.await?
.first()
.ok_or_else(|| Error::NoOutput(format!("{alias_id:?}")))?))
}
pub async fn foundry_output_ids(
&self,
query_parameters: impl Into<Vec<QueryParameter>> + Send,
) -> Result<OutputIdsResponse> {
let route = "api/indexer/v1/outputs/foundry";
let query_parameters = verify_query_parameters_foundry_outputs(query_parameters.into())?;
self.get_output_ids(route, query_parameters, true, false).await
}
pub async fn foundry_output_id(&self, foundry_id: FoundryId) -> Result<OutputId> {
let route = format!("api/indexer/v1/outputs/foundry/{foundry_id}");
Ok(*(self
.get_output_ids(&route, QueryParameters::empty(), true, false)
.await?
.first()
.ok_or_else(|| Error::NoOutput(format!("{foundry_id:?}")))?))
}
pub async fn nft_output_ids(
&self,
query_parameters: impl Into<Vec<QueryParameter>> + Send,
) -> Result<OutputIdsResponse> {
let route = "api/indexer/v1/outputs/nft";
let query_parameters = verify_query_parameters_nft_outputs(query_parameters.into())?;
self.get_output_ids(route, query_parameters, true, false).await
}
pub async fn nft_output_id(&self, nft_id: NftId) -> Result<OutputId> {
let route = format!("api/indexer/v1/outputs/nft/{nft_id}");
Ok(*(self
.get_output_ids(&route, QueryParameters::empty(), true, false)
.await?
.first()
.ok_or_else(|| Error::NoOutput(format!("{nft_id:?}")))?))
}
}