mod.rs

Overview

This file defines the GraphQL query root and associated types for querying blockchain-related data, accounts, messages, transactions, and blocks from a database. It provides the main entry points for GraphQL queries, implementing filtering, ordering, and pagination capabilities with asynchronous database access. The file leverages the async-graphql library to expose these queries in a GraphQL API, and integrates with a SQLite database through the sqlx crate. It also includes support for DataLoader batching and caching to optimize loading related entities such as messages and transactions.

Enumerations

QueryOrderByDirection

pub enum QueryOrderByDirection {
    ASC,
    DESC,
}

Usage Example:

let direction = QueryOrderByDirection::ASC;
println!("Sort direction: {}", direction);  // Output: Sort direction: ASC

Structs

QueryOrderBy

pub struct QueryOrderBy {
    pub path: Option<String>,
    pub direction: Option<QueryOrderByDirection>,
}

Usage Example:

GraphQL query input might specify:

orderBy: [{ path: "timestamp", direction: ASC }]

Main Struct: QueryRoot

pub struct QueryRoot;

QueryRoot Methods

info

async fn info(&self, ctx: &Context<'_>) -> FieldResult<Option<Info>>

account

async fn account(&self, address: String) -> Option<AccountQuery>

blocks

async fn blocks(
    &self,
    ctx: &Context<'_>,
    filter: Option<BlockFilter>,
    order_by: Option<Vec<Option<QueryOrderBy>>>,
    limit: Option<i32>,
    _timeout: Option<f64>,
) -> FieldResult<Option<Vec<Option<Block>>>>

accounts

async fn accounts(
    &self,
    ctx: &Context<'_>,
    filter: Option<AccountFilter>,
    order_by: Option<Vec<Option<QueryOrderBy>>>,
    limit: Option<i32>,
    _timeout: Option<f64>,
) -> FieldResult<Option<Vec<Option<Account>>>>

messages

async fn messages(
    &self,
    ctx: &Context<'_>,
    filter: Option<MessageFilter>,
    order_by: Option<Vec<Option<QueryOrderBy>>>,
    limit: Option<i32>,
    _timeout: Option<f64>,
) -> FieldResult<Option<Vec<Option<Message>>>>

transactions

async fn transactions(
    &self,
    ctx: &Context<'_>,
    filter: Option<TransactionFilter>,
    order_by: Option<Vec<Option<QueryOrderBy>>>,
    limit: Option<i32>,
    _timeout: Option<f64>,
) -> FieldResult<Option<Vec<Option<Transaction>>>>

blockchain

async fn blockchain<'ctx>(
    &'ctx self,
    ctx: &'ctx Context<'ctx>,
) -> FieldResult<Option<BlockchainQuery<'ctx>>>

Important Implementation Details

Interaction With Other Modules


Mermaid Diagram: Structure of mod.rs (Class Diagram)

classDiagram
class QueryRoot {
+info(ctx)
+account(address)
+blocks(ctx, filter, order_by, limit, timeout)
+accounts(ctx, filter, order_by, limit, timeout)
+messages(ctx, filter, order_by, limit, timeout)
+transactions(ctx, filter, order_by, limit, timeout)
+blockchain(ctx)
}
class QueryOrderBy {
+path: Option<String>
+direction: Option<QueryOrderByDirection>
}
class QueryOrderByDirection {
<<enum>>
+ASC
+DESC
}
QueryRoot --> QueryOrderBy
QueryRoot --> QueryOrderByDirection

This diagram represents the main types in this file, showing QueryRoot as the principal class exposing multiple asynchronous query methods. The sorting enum QueryOrderByDirection and sorting criteria struct QueryOrderBy are related as inputs to these queries.