fuel_gql_client/client/schema/
resource.rs1use crate::client::schema::{
2 coin::Coin,
3 message::Message,
4 schema,
5 Address,
6 AssetId,
7 ConversionError,
8 MessageId,
9 UtxoId,
10 U64,
11};
12use itertools::Itertools;
13use std::str::FromStr;
14
15#[derive(cynic::InputObject, Clone, Debug)]
16#[cynic(schema_path = "./assets/schema.sdl")]
17pub struct ExcludeInput {
18 utxos: Vec<UtxoId>,
20 messages: Vec<MessageId>,
22}
23
24impl ExcludeInput {
25 pub fn from_tuple(tuple: (Vec<&str>, Vec<&str>)) -> Result<Self, ConversionError> {
26 let utxos = tuple.0.into_iter().map(UtxoId::from_str).try_collect()?;
27 let messages = tuple.1.into_iter().map(MessageId::from_str).try_collect()?;
28
29 Ok(Self { utxos, messages })
30 }
31}
32
33#[derive(cynic::InputObject, Clone, Debug)]
34#[cynic(schema_path = "./assets/schema.sdl")]
35pub struct SpendQueryElementInput {
36 pub asset_id: AssetId,
38 pub amount: U64,
40 pub max: Option<U64>,
42}
43
44#[derive(cynic::InlineFragments, Debug)]
45#[cynic(schema_path = "./assets/schema.sdl")]
46pub enum Resource {
47 Coin(Coin),
48 Message(Message),
49 #[cynic(fallback)]
50 Unknown,
51}
52
53impl Resource {
54 pub fn amount(&self) -> u64 {
55 match self {
56 Resource::Coin(c) => c.amount.0,
57 Resource::Message(m) => m.amount.0,
58 Resource::Unknown => 0,
59 }
60 }
61}
62
63#[derive(cynic::QueryVariables, Debug)]
64pub struct ResourcesToSpendArgs {
65 owner: Address,
67 query_per_asset: Vec<SpendQueryElementInput>,
69 excluded_ids: Option<ExcludeInput>,
71}
72
73pub(crate) type ResourcesToSpendArgsTuple =
74 (Address, Vec<SpendQueryElementInput>, Option<ExcludeInput>);
75
76impl From<ResourcesToSpendArgsTuple> for ResourcesToSpendArgs {
77 fn from(r: ResourcesToSpendArgsTuple) -> Self {
78 ResourcesToSpendArgs {
79 owner: r.0,
80 query_per_asset: r.1,
81 excluded_ids: r.2,
82 }
83 }
84}
85
86#[derive(cynic::QueryFragment, Debug)]
87#[cynic(
88 schema_path = "./assets/schema.sdl",
89 graphql_type = "Query",
90 variables = "ResourcesToSpendArgs"
91)]
92pub struct ResourcesToSpendQuery {
93 #[arguments(owner: $owner, queryPerAsset: $query_per_asset, excludedIds: $excluded_ids)]
94 pub resources_to_spend: Vec<Vec<Resource>>,
95}