fuel_gql_client/client/schema/
message.rsuse super::{
block::Header,
Bytes32,
HexString,
PageDirection,
PageInfo,
PaginatedResult,
PaginationRequest,
Signature,
TransactionId,
};
use crate::client::schema::{
schema,
Address,
MessageId,
U64,
};
#[derive(cynic::QueryFragment, Debug)]
#[cynic(schema_path = "./assets/schema.sdl")]
pub struct Message {
pub message_id: MessageId,
pub amount: U64,
pub sender: Address,
pub recipient: Address,
pub nonce: U64,
pub data: HexString,
pub da_height: U64,
pub fuel_block_spend: Option<U64>,
}
#[derive(cynic::QueryFragment, Debug)]
#[cynic(
schema_path = "./assets/schema.sdl",
graphql_type = "Query",
variables = "OwnedMessagesConnectionArgs"
)]
pub struct OwnedMessageQuery {
#[arguments(owner: $owner, after: $after, before: $before, first: $first, last: $last)]
pub messages: MessageConnection,
}
#[derive(cynic::QueryFragment, Debug)]
#[cynic(schema_path = "./assets/schema.sdl")]
pub struct MessageConnection {
pub edges: Vec<MessageEdge>,
pub page_info: PageInfo,
}
#[derive(cynic::QueryFragment, Debug)]
#[cynic(schema_path = "./assets/schema.sdl")]
pub struct MessageEdge {
pub cursor: String,
pub node: Message,
}
#[derive(cynic::QueryVariables, Debug)]
pub struct OwnedMessagesConnectionArgs {
pub owner: Option<Address>,
pub after: Option<String>,
pub before: Option<String>,
pub first: Option<i32>,
pub last: Option<i32>,
}
#[derive(cynic::QueryFragment, Debug)]
#[cynic(
schema_path = "./assets/schema.sdl",
graphql_type = "Query",
variables = "MessageProofArgs"
)]
pub struct MessageProofQuery {
#[arguments(transactionId: $transaction_id, messageId: $message_id)]
pub message_proof: Option<MessageProof>,
}
#[derive(cynic::QueryFragment, Debug)]
#[cynic(schema_path = "./assets/schema.sdl")]
pub struct MessageProof {
pub proof_set: Vec<Bytes32>,
pub proof_index: U64,
pub signature: Signature,
pub header: Header,
pub sender: Address,
pub recipient: Address,
pub nonce: Bytes32,
pub amount: U64,
pub data: HexString,
}
#[derive(cynic::QueryVariables, Debug)]
pub struct MessageProofArgs {
pub transaction_id: TransactionId,
pub message_id: MessageId,
}
impl From<(Option<Address>, PaginationRequest<String>)> for OwnedMessagesConnectionArgs {
fn from(r: (Option<Address>, PaginationRequest<String>)) -> Self {
match r.1.direction {
PageDirection::Forward => OwnedMessagesConnectionArgs {
owner: r.0,
after: r.1.cursor,
before: None,
first: Some(r.1.results as i32),
last: None,
},
PageDirection::Backward => OwnedMessagesConnectionArgs {
owner: r.0,
after: None,
before: r.1.cursor,
first: None,
last: Some(r.1.results as i32),
},
}
}
}
impl From<MessageConnection> for PaginatedResult<Message, String> {
fn from(conn: MessageConnection) -> Self {
PaginatedResult {
cursor: conn.page_info.end_cursor,
has_next_page: conn.page_info.has_next_page,
has_previous_page: conn.page_info.has_previous_page,
results: conn.edges.into_iter().map(|e| e.node).collect(),
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn owned_message_query_gql_output() {
use cynic::QueryBuilder;
let operation = OwnedMessageQuery::build(OwnedMessagesConnectionArgs {
owner: Some(Address::default()),
after: None,
before: None,
first: None,
last: None,
});
insta::assert_snapshot!(operation.query)
}
}